20초봉을 쓰고 있습니다.
dayindex == Floor(Random(2))-1 => 요 봉에서 진입하고 싶습니다.
위 식에 따르면, random에 의해 1 또는 2가 나오고, 거기에서 1을 빼면
0 또는 1이 됩니다.
그러므로 당일 첫 봉 혹은 두번째 봉에서 거래가 이루어져야 할 것 같은데,
거래 내역을 보면 죄다 2번째 봉에서만 거래가 이루어집니다.
즉, 9:00:40초로 찍힙니다.
마찬가지로 당일 청산도 다음과 같이 하고 싶습니다.
당일청산시간 = 152100 + floor(random(4))*100 + (floor(random(3))-1)*20;
3시 21분에서 1~4분을 더한 후, 20초, 40초, 혹은 0초를 더해주고 싶습니다.
그러면 청산 시각의 끝이, 0초 20초 40초 이렇게 골고루 나와야할 것 같은데.
죄다 40초로만 찍히고 아주 가끔 0초가 있습니다. 20초는 한건도 나오지가 않습니다.
혹시 원인을 알 수 있을런지요?
감사합니다.
답변 1
예스스탁
예스스탁 답변
2021-01-07 15:20:33
안녕하세요
예스스탁입니다.
Random(2)에 의해 0.00~2.00까지 숫자가 나오고
Floor(Random(2))에 의해 0,1,2가 나올수 있습니다.
또한 Random(2)에 의해 0.3이 나오면 floor에 의해 0만 취해지게 되는데
그러면 dayindex == -1이라는 조건이 됩니다. 봉번호는 -1이없으므로 진입불가입니다.
그러므로 Floor(Random(1.99))와 같이 지정하면 0,1만 나오게 되고
해당값에 -1은 하는 것은 불필요합니다.
매봉 dayindex == Floor(Random(2))-1조건을 수행하면
첫봉에서는 Floor(Random(2))-1 값이 -1 또는 1이 나오고
두번쨰봉에서는 -1 또는 0이 나오면 그날은 거래가 없게 됩니다.
청산식도 위와 같습니다.
랜덤에 의해 0,1,2를 취하게 하고 20을 곱해서 지정하시면 됩니다.
이전 문의에 답변드린 부분과 같이
첫봉에서만 랜덤값을 계산하고 이후에 해당 조건이 만족할떄 나가게 해야 합니다.
매봉 수행하면 각봉에서는 if조건이 맞지 않아 당일 신호가 발생하지 않을 경우들이 생기게 됩니다.
var : 당일청산시간(0);
if Bdate != Bdate[1] Then
{
var1 = Floor(Random(1.99));#2미만의 값을 지정하여 0또는 1값만 나오게 함
당일청산시간 = 152100 + floor(random(4))*100 + floor(random(2))*20;
}
if DayIndex == var1 Then
Buy();
if sTime == 당일청산시간 Then
ExitLong();
즐거운 하루되세요
> 중박주식 님이 쓴 글입니다.
> 제목 : 간단한 질문입니다.
> 20초봉을 쓰고 있습니다.
dayindex == Floor(Random(2))-1 => 요 봉에서 진입하고 싶습니다.
위 식에 따르면, random에 의해 1 또는 2가 나오고, 거기에서 1을 빼면
0 또는 1이 됩니다.
그러므로 당일 첫 봉 혹은 두번째 봉에서 거래가 이루어져야 할 것 같은데,
거래 내역을 보면 죄다 2번째 봉에서만 거래가 이루어집니다.
즉, 9:00:40초로 찍힙니다.
마찬가지로 당일 청산도 다음과 같이 하고 싶습니다.
당일청산시간 = 152100 + floor(random(4))*100 + (floor(random(3))-1)*20;
3시 21분에서 1~4분을 더한 후, 20초, 40초, 혹은 0초를 더해주고 싶습니다.
그러면 청산 시각의 끝이, 0초 20초 40초 이렇게 골고루 나와야할 것 같은데.
죄다 40초로만 찍히고 아주 가끔 0초가 있습니다. 20초는 한건도 나오지가 않습니다.
혹시 원인을 알 수 있을런지요?
감사합니다.