setstopendofday, 지정시각을 넣어주면 그 시간이 되면 거래를 끝내주는 좋은 함수죠. 잘 사용하고 있습니다.
그런데 setstopendofday를 사용하면, 시뮬레이션을 돌릴 때에 나오는 결과값과 실제 거래되는 값이 다릅니다.
함수에 오류는 없어서, 실제 거래는 딱 15시 되면 끝납니다.
하지만 시뮬레이션을 할 경우에는 15시 봉의 종가 값, 그러니까 15시 5분의 결과로 매매한 것으로 나오네요.
시뮬레이션 시에 145500으로 주고 실제 쓸 때에는 150000으로 사용한다면 미봉책이나마 사용할 수 있지만,
특히 종가에 가격변화가 큰 경우가 많아서 기존에 시뮬레이션을 통해 작성된 프로그램들의 전면적인 재검토가 필요해졌습니다.
버그 패치 부탁드리겠습니다.
답변 1
예스스탁
예스스탁 답변
2007-11-01 17:02:46
안녕하세요? 예스스탁입니다.
5분봉으로 15시에 청산하는 방법은 함수 작성방법상 두가지로 나누어 볼 수 있습니다.
하나는 당일청산함수(setstopendofday)를 이용하는 것이고 하나는 시간함수를 이용해서 청산하는 방법입니다.
당일청산함수를 이용한다면
setstopendofday(1500) 으로 작성하면 실제 청산이 15:00:00초 이후에 첫번째 시세데이타가 들어올때 청산 주문이 나갑니다. 그러나 시스템리포트 상으로는 이 봉의 마지막 가격으로 청산한 것으로 계산을 합니다. 데이타는 봉에서 시가, 고가, 저가, 종가 만을 저장하며 중간에 발생한 모든 틱데이타를 저장하지 않기 때문에 과거 데이타에 대한 특정시각의 가격을 알 수 없습니다.
setstopendofday를 이용할 경우 시간 셋팅을 setstopendofday(145959)로 셋팅해 놓으시면 14시59분59초 이후의 첫번째 체결데이타에 주문이 나가고, 매매리포트도 14시55분봉의 종가로 리포트를 내므로 거의 결과가 일치하게 될 것입니다.
시간함수를 이용할 경우라면 아래와 같이 작성하시면 14시 55분봉이 완성되는 시점(15시 봉의 첫번째 체결데이타가 들어오는 시점)에 주문이 나가며, 14시55분봉의 종가에 청산된 것으로 리포트를 내게 됩니다.
if stime == 145500 then {
exitlong();
exitshort();
}
감사합니다.