커뮤니티

[선물] 청산 확인 후 진입

프로필 이미지
마테홀릭
2026-02-08 02:37:29
82
글번호 230432
답변완료

YesSpot을 이용하여 선물 자동매매를 구현하고 있습니다.

선물 매매 시 Buy/Sell 시그널 발생하기 바로 직전에 ExitShort/ExitLong 시그널이 발생하면 청산 주문을 내는데, 청산주문 후에 따르는 OnOrderResponse/OnNotifyFill이 발생하기 전에 빠르게 Buy/Sell 시그널이 발생하여 청산주문과 같은 포지션으로 진입주문을 내게되는데 이전 청산주문의 OnNotifyFill을 확인하고 진입주문할 수 있는 방법이 있을까요? 어떤 방법으로 청산 완료를 확인하고 재진입할 수 있는지 조언 부탁드립니다. 감사합니다.

답변 1
프로필 이미지

예스스탁 예스스탁 답변

2026-02-20 13:27:41

안녕하세요 예스스탁입니다. 아래 내용을 참고하시기 바랍니다. 진입주문시 반대포지션 청산 주문이 체결이 안되어 있으면 대기하다가 청산주문 전량체결이 되면 주문이 집행됩니다. var OC,MK; var BID,BXID,SID,SXID; var BXnum,SXnum,BXfill,SXfill; var BV,SV,BuyWait,SellWait; function Main_OnStart() { OC = Main.GetOrderCode(Chart1.GetCode(1)); Main.ReqMarketData(OC); //스팟 시작시는 직전 청산주문이 없으므로 // 체결여부 체크변수는 true BXfill = true; SXfill = true; } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == OC) { MK = MarketData; } } function Chart1_OnRiseSignal(Signal) { if (Signal.signalKind == 1) { BV = Signal.count; //매도청산주문 체결상태이면 바로 주문 if (SXfill == true) { BID = Account1.OrderBuy(OC, BV, MK.Ask(3),0); BuyWait = false; } else { //미체결상태이면 대기 BuyWait = true; } } if (Signal.signalKind == 2) { BXID = Account1.OrderSell(OC, 1, MK.Bid(3),0); BXfill = false; } if (Signal.signalKind == 3) { SV = Signal.count; //매수청산주문 체결상태 if (BXfill == true) { SID = Account1.OrderSell(OC, SV, MK.Bid(3),0); SellWait = false;
} else { //미체결상태이면 대기 SellWait = true; }
} if (Signal.signalKind == 4) { SXID = Account1.OrderBuy(OC, 1, MK.Ask(3),0); SXfill = false; } } function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BXID) { BXnum = OrderResponse.orderNum; } if (OrderResponse.orderID == SXID) { SXnum = OrderResponse.orderNum; } } function Main_OnNotifyFill(NotifyFill) { if (NotifyFill.orderNum == BXnum) { Account1.SetUnfill(BXnum); if (Account1.Unfill.count == 0) { BXfill = true; if (SellWait == true) { SID = Account1.OrderSell(OC, SV, MK.Bid(3),0); SellWait = false; } } } if (NotifyFill.orderNum == SXnum) { Account1.SetUnfill(SXnum); if (Account1.Unfill.count == 0) { SXfill = true; if (BuyWait == true) { BID = Account1.OrderBuy(OC, BV, MK.Ask(3),0); BuyWait = false; } } } } 즐거운 하루되세요