커뮤니티

수식 문의드립니다.

프로필 이미지
율담
2025-04-01 13:38:53.0
199
글번호 226257
답변완료
답변 미리 감사드립니다. 질문답변 대기가 오래걸리네요. 주문변경 구현이 안됩니다. 나스닥에서 매수진입시, 지정가(신호가) 진입 주문후, 3초후 미체결시 신호가-3틱, 3초후 미체결시 시장가로 부탁합니다. 예스스팟이 미체결물량을 인식하는지 궁금하네요. 최초 지정가 진입 주문시.. 어떠한이유로 주문이 안나갔을경우.. 3초후 신호가-3틱으로 지정가 주문이 다시 나가게 되는건가요. 지정가 주문후 이주문을 취소하고.. 다시 주문을 내는것인지.. 아님 주문변경 로직인지 궁금하네요.
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-04-07 15:34:25.0

안녕하세요 예스스탁입니다. 1 계좌함수 중에 주문번호등으로 미체결객체를 셋팅하는 함수가 있습니다. 주문후 주문응답이 들어오면 주문번호 저장해서 해당 주문번호로 3초뒤 미체결 확인해서 정정하거나 취소후 시장가로 주문내게 구현하시면 됩니다. 아래 가이드 수식내용 참고하시기 바랍니다. var S,OrderCode; var BEID,BENm,BECNT,BECID; var BXID,BXNm,BXCNT,BXCID; var SEID,SENm,SECNT,SECID; var SXID,SXNm,SXCNT,SXCID; function Main_OnStart() { Main.MessageList("Start"); OrderCode = Main.GetOrderCode(C1.GetCode(1)); } function C1_OnRiseSignal(Signal) { if (Signal.signalKind == 1) { BEID = Account1.OrderBuy(OrderCode,1,Signal.price,2); Main.SetTimer(1, 3000); BECNT = 0; Main.MessageList("매수진입주문"); } if ( Signal.signalKind == 2) { BXID = Account1.OrderSell(OrderCode,1,Signal.price,2); Main.SetTimer(2, 3000); BXCNT = 0; Main.MessageList("매수청산주문"); } if (Signal.signalKind == 3) { SEID = Account1.OrderSell(OrderCode,1,Signal.price,2); Main.SetTimer(3, 3000); SECNT = 0; Main.MessageList("매도진입주문"); } if ( Signal.signalKind == 4) { SXID = Account1.OrderBuy(OrderCode,1,Signal.price,2); Main.SetTimer(4, 3000); SXCNT = 0; Main.MessageList("매도청산주문"); } } function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BEID) { BENM = OrderResponse.orderNum; } if (OrderResponse.orderID == BXID) { BXNM = OrderResponse.orderNum; } if (OrderResponse.orderID == SEID) { SENM = OrderResponse.orderNum; } if (OrderResponse.orderID == SXID) { SXNM = OrderResponse.orderNum; } if (OrderResponse.orderID == BECID) { Account1.OrderBuy(OrderCode,1,0,1); Main.MessageList("매수진입 시장가주문"); } if (OrderResponse.orderID == BXCID) { Account1.OrderSell(OrderCode,1,0,1); Main.MessageList("매도청산 시장가주문"); } if (OrderResponse.orderID == SECID) { Account1.OrderSell(OrderCode,1,0,1); Main.MessageList("매도진입 시장가주문"); } if (OrderResponse.orderID == SXCID) { Account1.OrderBuy(OrderCode,1,0,1); Main.MessageList("매도청산 시장가주문"); } } function Main_OnTimer(nEventID) { if (nEventID == 1) { Account1.SetUnfillOrderNumber(BENM) BECNT = BECNT+1; if (BECNT == 1) { var RePrice = MarketData1.current - MarketData1.GetTickSize()*1; if (Account1.Unfill.count > 0) { if (RePrice != Account1.Unfill.price) { BEID = Account1.OrderReplacePrice(BENM,Account1.Unfill.count, RePrice); Main.MessageList("매수진입 정정주문"); } } else { Main.KillTimer(1); } } if (BECNT == 2) { if (Account1.Unfill.count > 0) { BECID = Account1.OrderCancel(BENM); Main.MessageList("매수진입 취소주문"); } Main.KillTimer(1); } } if (nEventID == 2) { Account1.SetUnfillOrderNumber(BXNM); BXCNT = BXCNT+1; if (BXCNT == 1) { var RePrice = MarketData1.current + MarketData1.GetTickSize()*1; if (Account1.Unfill.count > 0) { if (RePrice != Account1.Unfill.price) { BXID = Account1.OrderReplacePrice(BXNM,Account1.Unfill.count, RePrice); Main.MessageList("매수청산 정정주문"); } } else { Main.KillTimer(2); } } if (BXCNT == 2) { if (Account1.Unfill.count > 0) { BXCID = Account1.OrderCancel(BXNM); Main.MessageList("매수청산 취소주문"); } Main.KillTimer(2); } } if (nEventID == 3) { Account1.SetUnfillOrderNumber(SENM); SECNT = SECNT+1; if (SECNT == 1) { var RePrice = MarketData1.current + MarketData1.GetTickSize()*1; if (Account1.Unfill.count > 0) { if (RePrice != Account1.Unfill.price) { SEID = Account1.OrderReplacePrice(SENM,Account1.Unfill.count, RePrice); Main.MessageList("매도진입 정정주문"); } } else { Main.KillTimer(3); } } if (SECNT == 2) { if (Account1.Unfill.count > 0) { SECID = Account1.OrderCancel(SENM); Main.MessageList("매도진입 취소주문"); } Main.KillTimer(3); } } if (nEventID == 4) { Account1.SetUnfillOrderNumber(SXNM); SXCNT = SXCNT+1; if (SXCNT == 1) { var RePrice = MarketData1.current - MarketData1.GetTickSize()*1; if (Account1.Unfill.count > 0) { if (RePrice != Account1.Unfill.price) { SXID = Account1.OrderReplacePrice(SXNM,Account1.Unfill.count, RePrice); Main.MessageList("매수청산 정정주문"); } } else { Main.KillTimer(4); } } if (SXCNT == 2) { if (Account1.Unfill.count > 0) { SXCID = Account1.OrderCancel(SXNM); Main.MessageList("매도청산 취소주문"); } Main.KillTimer(4); } } } 2 지정가를 바로 시장가로 정정이 가능하지 않습니다. 취소후 시장가로 주문내게 작성하셔야 합니다. 즐거운 하루되세요 > 율담 님이 쓴 글입니다. > 제목 : 수식 문의드립니다. > 답변 미리 감사드립니다. 질문답변 대기가 오래걸리네요. 주문변경 구현이 안됩니다. 나스닥에서 매수진입시, 지정가(신호가) 진입 주문후, 3초후 미체결시 신호가-3틱, 3초후 미체결시 시장가로 부탁합니다. 예스스팟이 미체결물량을 인식하는지 궁금하네요. 최초 지정가 진입 주문시.. 어떠한이유로 주문이 안나갔을경우.. 3초후 신호가-3틱으로 지정가 주문이 다시 나가게 되는건가요. 지정가 주문후 이주문을 취소하고.. 다시 주문을 내는것인지.. 아님 주문변경 로직인지 궁금하네요.