커뮤니티

setstopendofday 시뮬레이션에 심각한 버그 발견...

프로필 이미지
********
2007-11-01 15:34:03
1432
글번호 200713
답변완료
setstopendofday, 지정시각을 넣어주면 그 시간이 되면 거래를 끝내주는 좋은 함수죠. 잘 사용하고 있습니다. 그런데 setstopendofday를 사용하면, 시뮬레이션을 돌릴 때에 나오는 결과값과 실제 거래되는 값이 다릅니다. 함수에 오류는 없어서, 실제 거래는 딱 15시 되면 끝납니다. 하지만 시뮬레이션을 할 경우에는 15시 봉의 종가 값, 그러니까 15시 5분의 결과로 매매한 것으로 나오네요. 시뮬레이션 시에 145500으로 주고 실제 쓸 때에는 150000으로 사용한다면 미봉책이나마 사용할 수 있지만, 특히 종가에 가격변화가 큰 경우가 많아서 기존에 시뮬레이션을 통해 작성된 프로그램들의 전면적인 재검토가 필요해졌습니다. 버그 패치 부탁드리겠습니다.
예스트레이더 (iM증권)
답변 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(); } 감사합니다.