커뮤니티

주문취소 오류

프로필 이미지
yes랭귀지
2019-10-11 15:31:41
3654
글번호 225038
답변완료
아래와 같이 특정 조건에서 미체결된 매수와 매도 주문을 취소하기 위해서 수식을 작성했습니다. 참고로 BNum와 SNum은 접수 완료 후 리턴 받은 주문의 접수번호가 저장되어 있습니다. 그런데 미체결된 주문이 없는데 if문에 진입하여 orderCancel 주문에서 주문번호를 찾을 수 없다는 메시지가 표시되네요. 주문수량을 조회하는 방법이 잘 못 된 것인가요? A1.SetUnfill(BNum); if (A1.Unfill.count > 0) { Main.MessageLog(C1.GetSTime(1,0)+":"+"매수취소"); A1.OrderCancel(BNum); } A1.SetUnfill(SNum); if (A1.Unfill.count > 0) { Main.MessageLog(C1.GetSTime(1,0)+":"+"매도취소"); A1.OrderCancel(SNum); }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2019-10-25 10:30:40

안녕하세요 예스스탁입니다. 올려주신 내용만으로는 상황파악이 어렵습니다. 수식내용에 자체에는 문제가 있지는 않습니다. 미체결객체를 셋팅하고 수량이 있는 것을 확인후 취소주문을 내는 경우이므로 아마 2가지 상황 중 하나일것 같습니다. 첫번째 경우는 주문후 스크립트를 읽고 주문이 전송되어 거래소에 도착하는 중간에 체결이 발생하거나 하면 시차 문제로 해당 메세지가 발생할수는 있습니다. 두번째 경우는 체결응답이 수신되지 않은 경우입니다. 계좌 객체는 가원장을 사용합니다. 최초 스팟 실행시에 지정한 계좌의 가원장을 만들고 이후에 주문응답이나 체결응답을 이용해 갱신을 하게 됩니다. 거래소에서 체결은 되었지만 체결응답이 오지 않으면 해당 내용이 발생할 수 있습니다. 국내 거래소는 이에 해당되는 경우가 거의 없지만 해외선물과 같은 경우에 주문 후 주문응답이나 체결응답이 수신도지 않는 경우가 간혹 접수되고 있습니다.체결응답이 없으면 프로그램의 가원장에는 미체결로 남아있고 실제 원장에는 미체결이 없게 됩니다. 계좌객체에 Refresh()라는 함수가 있습니다. 가원장을 다시 실제원장과 동일하게 셋팅해 주는 함수입니다. 수식에서 주문을 내기 전에 해당 함수롤 동작시켜 동기화를 해주시면 됩니다. Refresh를 하면 계좌변동 이벤트의 lUp*dateID가 30000이 수신됩니다. Refresh 후에 해당 이벤트에서 반드시 30000이 수신되는 것을 확인후에 주문이 집행되게 하셔야 합니다. 원장의 속도가 빠르지 않아 동기화에 시간이 소모됩니다. function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID) { if (lUp*dateID == 30000) { } } 즐거운 하루되세요 > yes랭귀지 님이 쓴 글입니다. > 제목 : 주문취소 오류 > 아래와 같이 특정 조건에서 미체결된 매수와 매도 주문을 취소하기 위해서 수식을 작성했습니다. 참고로 BNum와 SNum은 접수 완료 후 리턴 받은 주문의 접수번호가 저장되어 있습니다. 그런데 미체결된 주문이 없는데 if문에 진입하여 orderCancel 주문에서 주문번호를 찾을 수 없다는 메시지가 표시되네요. 주문수량을 조회하는 방법이 잘 못 된 것인가요? A1.SetUnfill(BNum); if (A1.Unfill.count > 0) { Main.MessageLog(C1.GetSTime(1,0)+":"+"매수취소"); A1.OrderCancel(BNum); } A1.SetUnfill(SNum); if (A1.Unfill.count > 0) { Main.MessageLog(C1.GetSTime(1,0)+":"+"매도취소"); A1.OrderCancel(SNum); }