커뮤니티

Velocity Logic Event 발생시

프로필 이미지
산수유
2025-11-14 17:25:48
57
글번호 228046

미니나스닥선물을 운영하고 있습니다. 작년에 Velocity Logic Event 발생시 주문거부처리 되어 주문자체가 없는걸로 된 경우가 있어 적지않은 손실르 보았습니다. 예를들어 1.매도진입신호가 발생하여 시장가로 진입 주문이 나갔습니다. 그러나 cme에서 순간적으로 시세가 급변하면서 Velocity Logic Event라는 게 발생해서 시장가 주문을 아예없는 걸로 처리했습니다.하지만 시스템상으로는 매도진입된걸로 나옵니다. 하지만 주문이 없어져서 무포지션 상태입니다. 2.청산신호가 발생하여 매도청산 진입 주문이 나갑니다. 이때는 정상적으로 주문이 나가 매수체결되었습니다. 무포지션이 아니라 매수포지션이 되어버림 3.전략에서는 종가에 청산하라고 되어있는데 시스템상 무포지션이기 때문에 종가청산 주문이 안나감. 매수오버상태가 되어버림 4.다음날 장 시장이 갭하락으로 시작하여 손실 더 커짐. 그래서 작년에 문의드렸을 경우 대비책이 없다고 하셨는데 현재는 이런 상황 발생시 대비책이 있는지 궁금합니다.위에서는 간단한 사례를 예로 들었지만 더 복잡한 경우도 있었습니다.더 큰손실도 있었구요. 어느분은 지정가 주문으로 변경하면 방어할 수가 있다고 하시던데 .. 1년중 3-4번 있는 상황때문에 지정가로 한다는건 지정한 가격에 도달하지 않아 수많은 수익기회를 날리는 경우가 많을거 같아서 안맞는 대책같습니다.지정가도 같은 문제가 발생할 수 있다고 봅니다. 문의 드리고 싶은거는 1번 같은 상태에서 매도진입주문이 없는 상태가 되어서 매도진입 체결이 안되었다면 30초 (특정기간)후에 재매도 주문을 다시 들어가게 식을 만들수 있는지요(예스트레이더에서 체결내역에 어느 가격에 체결 아니면 미체결 내역 팝업창이 뜹니다.) 2. 1번신호에 매도진입체결이 안되었다면 매도청산 주문이 안 나가게 설정할 수 있는지요? 3.시스템상으로는 무포지션인데 체결내역에 보유포지션이 있다면 종가등 특정시간에 청산을 하게끔 식이 가능한지요?
전략식을 잘 만든다면 너무나도 좋은 시스템 트레이딩인데 1년에 몇번 발생하는 주문거부로 치명적인 손실을 입는다면 너무 큰 손해일 겁니다. 답변 좀 부탁드립니다.

시스템
답변 3
프로필 이미지

예스스탁 예스스탁 답변

2025-11-17 12:28:17

안녕하세요 예스스탁입니다. 올려주신 내용은 시스템식에서 해결이 불가능하고 예스스팟으로 해결해 보셔야 합니다 시스템은 차트의 데이터만 이용이 가능하고 조건만족시 주문만 집행합니다. 주문 이후 주문거부나 체결/미체결을 알지 못합니다. 스팟에서 차트객체를 이용해서 주문을 집행하게 하시면 됩니다. 스팟에서 주문이 집행되므로 차트의 시스템은 시험적용으로 적용하셔야 합니다. 아래식은 차트에서 매수진입신호가 발생하면 시장가 매수주문 차트에서 매수청산신호가 발생하면 시장가 매도주문 차트에서 매도진입신호가 발생하면 시장가 매도주문 차트에서 매도청산신호가 발생하면 시장가 매수주문하고 진입신호 주문이 정상접수가 아니면 청산신호시 주문을 집행하지 않습니다. 정상접수라도 미체결되거나 하면 진입주문 미체결은 취소하고 체결된 수량만큼만 청산주문을 집행합니다. 스크립트 객체화면 설정 차트객체 추가 -> 속성에서 객체명 Chart1, 신호발생하는 차트와 동일아이디 부여 계좌객체 추가 -> 속성에서 객체명 Acccount1, 주문계좌 지정 var OC,pst; var BID, SID, BNUM, SNUM; function Main_OnStart() { Main.MessageList("Start"); //차트종목 종목코드 OC = Main.GetOrderCode(Chart1.GetCode(1)); pst = 0; } function Chart1_OnRiseSignal(Signal) { //매수진입신호 발생 if (Signal.signalKind == 1) { //포지션은 1 pst = 1; //신호수량 저장 BV = Signal.count; //매수주문 집행(신호수량, 시장가) BID = Account1.OrderBuy(OC,BV,0,1); Main.MessageList("매수진입신호:",BV); } //스팟에서 매수진입 이후에 매수청산 신호 발생 if (pst == 1 && Signal.signalKind == 2) { //진입매수주문 미체결 객체 셋팅 Account1.SetUnfillOrderNumber(BNUM); //미체결이 있으면 if ( Account1.Unfill.count > 0 ) { //진입수량에서 미체결수량 차감 BV = BV-Account1.Unfill.count; //미체결 주문 취소 Account1.OrderCancel(BNUM); } Main.MessageList("매수청산:",BV); //매수진입수량에서 미체결수량 차감후 0이 아니면(진입전량 체결이나 일부체결) if (BV > 0) { //청산을 위해 매도주문 집행(수량은 BV, 시장가) Account1.OrderSell(OC, BV,0,1); } } //매도진입신호 발생 if (Signal.signalKind == 3) { //신호수량 저장 SV = Signal.count; //매도주문 집행(신호수량, 시장가) SID = Account1.OrderSell(OC, SV,0,1); //포지션은 -1 pst = -1; Main.MessageList("매도진입신호:",SV); } //스팟에서 매도진입 이후에 매도청산 신호 발생 if (pst == -1 && Signal.signalKind == 4) { //진입매도주문 미체결 객체 셋팅 Account1.SetUnfillOrderNumber(SNUM); //미체결이 있으면 if ( Account1.Unfill.count > 0 ) { //진입수량에서 미체결수량 차감 SV = SV-Account1.Unfill.count; //미체결 주문 취소 Account1.OrderCancel(SNUM); } Main.MessageList("매도청산:",SV); //매도진입수량에서 미체결수량 차감후 0이 아니면(진입전량 체결이나 일부체결) if (SV > 0) { //청산을 위해 매수주문 집행(수량은 SV,시장가) Account1.OrderBuy(OC, SV,0,1); } } } //주문응답 function Main_OnOrderResponse(OrderResponse) { //매수진입주문에 대한 응답 if (OrderResponse.orderID == BID) { //정상접수 if (OrderResponse.isNormal == true) { //주문번호 저장 BNUM = OrderResponse.orderNum; } else //주문거부면 pst를 11로 변경하여 매수청산신호시 주문하지 않음 pst = 11; } //매도진입주문에 대한 응답이 오면 if (OrderResponse.orderID == SID) { //정상접수 if (OrderResponse.isNormal == true) { //주문번호 저장 SNUM = OrderResponse.orderNum; } else //주문거부면 pst를 -11로 변경하여 매도청산신호시 주문하지 않음 pst = -11; } } 즐거운 하루되세요
프로필 이미지

산수유

2025-11-17 14:04:43

일부 밖에 이해가 안되지만 방법이 있긴 하는가 봅니다. 그런데 여기서는 시장가 주문시 주문거부로 미체결되면 청산신호시에 청산주문 안 나가게 하는 식인데...혹시 진입신호에 주문거부로 미체결 시에 일정신간 후에 다시 재진입주문 을 한번 더 하는 식으로 변경가능 한지요?(예 20초,1분 후)만약 재진입도 거부되면 마지막으로 몇초후 다시 재진입...... 여기서 체결되면 청산신호에 청산한다. 만약 여기서도 체결이 안되면 (그럴 가능성은 낮을 것 같습니다.) 위에서 말씀하신 것처럼 청산신호가 나와도 청산주문을 하지 않는다....... 그리고 위의 문제들을 해결하기 위해서 스팟을 사용한다면 시스템의 진입식 전부를 사용을 않고 스팟으로 변경해서 사용해야 하는가요?
프로필 이미지

산수유

2025-11-17 14:04:57

산수유 님에 의해 삭제된 답변입니다.