커뮤니티

미완성 신호 주문 문의

프로필 이미지
탄젠트80
2016-08-22 23:19:48
1956
글번호 223966
답변완료

첨부 이미지

안녕하세요 항상 답변 잘 사용하고 있습니다. 완성신호 스팟전략을 미완성신호 스팟전략으로 바꾸어 테스트해봤는데 주문이 일부 누락되는거 같습니다. 미완성신호는 같은봉에서 여러번 발생하지 않도록 첫번째꺼만 취하도록 했는데 진입횟수가 완성신호랑 미완성신호가 틀립니다. 한번 살펴봐 주시면 감사하겠습니다. === 당초 완성신호 스팟 전략 ================== function Main_OnStart() { Main.MessageList("선물to스팟_시작"); T = 0; } function Chart1_OnRiseSignal(Signal) { if (Signal.signalKind == 1) { Main.MessageList("Buy_Signal"); T = 1; Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Ask(5), 0); } if (T == 1 && Signal.signalKind == 2) { Main.MessageList("ExitLong_Signal"); Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Bid(5), 0); } if (Signal.signalKind == 3) { Main.MessageList("Sell_Signal"); T = -1; Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Bid(5), 0); } if (T == -1 && Signal.signalKind == 4) { Main.MessageList("ExitShort_Signal"); Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Ask(5), 0); } } ====== 미완성 주문 스팟 전략 ==================== var T; var Bcnt,Bxcnt,Scnt,Sxcnt; function Main_OnStart() { Main.MessageList("선물신호_선물미완성 스팟시작"); T = 0; } function Chart1_OnBarAppended(nData) { Bcnt = 0; Bxcnt = 0; Scnt = 0; Sxcnt = 0; } function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { Main.MessageList("신호완성/",IncompleteSignal.signalKind); if (Bcnt == 0 && IncompleteSignal.signalKind == 1) { Bcnt = Bcnt+1; Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Ask(5), 0); Main.MessageList("Buy_Signal"); T = 1; } if (T == 1 && Bxcnt == 0 && IncompleteSignal.signalKind == 2) { Bxcnt = Bxcnt+1; Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Bid(5), 0); Main.MessageList("ExitLong_Signal"); } if (Scnt == 0 && IncompleteSignal.signalKind == 3) { Scnt = Scnt+1; Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Bid(5), 0); Main.MessageList("Sell_Signal"); T = -1; } if (T == -1 && Sxcnt == 0 && IncompleteSignal.signalKind == 4) { Sxcnt = Sxcnt+1; Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Ask(5), 0); Main.MessageList("ExitShort_Signal"); } } =============== 로직 끝 ==== 첨부는 테스트로 해봤던 주문내역입니다. 답변 미리 감사드립니다. 수고하세요
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2016-08-31 17:54:52

안녕하세요 예스스탁입니다. 현재 차트에 적용된 시스템이 buy/sell로 리버스가 가능한 식 같습니다. if 매수조건 Then buy(); if 매도조건 Then sell(); 리버셜 신호가 발생하면 완성신호(Signal.signalKind )는 4번/1번, 2번/3번이 같이 발생하는데 미완성신호(IncompleteSignal.signalKind)는 1번과 3번 뿐이 발생하지 않습니다. buy와 sell은 진입함수인데 완성 신호가 발생할때 반대포지션 상태이면 반대포지션 청산신호도 같이 발생하게 되어 있어 완성신호 이벤트에서는 1,2,3,4가 모두 오지만 미완성 신호상으로는 1번,3번만 발생하게 됩니다. 첨부하신 완성신호와 미완성신호 비교해 보시면 리버셜신호에 안성신호에서는 매수가 두번이나 매도가 두번 발생하는데 미완성신호에서는 모두 1번만 발생했습니다. 그러므로 미완성신호 1발생해서 매수진입이후에 Sell미완성 신호가 발생할때는 청산과 진입을 겸해서 주문이 나갈수 있게 내용을 추가하셔야 합니다. 아래수식에는 buy미완성신호가 발생할때 차트가 매도포지션이면 매수주문을 한번더 발생하게 하고 sell미완성신호가 발생할때 차트가 매수포지션이면 매도주문을 한번더 발생하게 하게 내용을 추가했습니다. var T; var Bcnt,Bxcnt,Scnt,Sxcnt; function Main_OnStart() { Main.MessageList("선물신호_선물미완성 스팟시작"); T = 0; } function Chart1_OnBarAppended(nData) { Bcnt = 0; Bxcnt = 0; Scnt = 0; Sxcnt = 0; } function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { Main.MessageList("미완성신호발생 : ",Chart1.GetOpenContracts(),IncompleteSignal.signalKind); if (Bcnt == 0 && IncompleteSignal.signalKind == 1) { T = 1; Bcnt = Bcnt+1; Main.MessageList("Buy_Signal"); Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Ask(5), 0); //차트가 매도포지션 상태이면 if (Chart1.GetOpenContracts() < 0) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Ask(5), 0); } } if (T == 1 && Bxcnt == 0 && IncompleteSignal.signalKind == 2) { T = 0; Bxcnt = Bxcnt+1; Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Bid(5), 0); Main.MessageList("ExitLong_Signal"); } if (Scnt == 0 && IncompleteSignal.signalKind == 3) { T = -1; Scnt = Scnt+1; Main.MessageList("Sell_Signal"); Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Bid(5), 0); //차트가 매수포지션 상태이면 if (Chart1.GetOpenContracts() > 0) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Bid(5), 0); } } if (T == -1 && Sxcnt == 0 && IncompleteSignal.signalKind == 4) { Sxcnt = Sxcnt+1; Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Ask(5), 0); Main.MessageList("ExitShort_Signal"); } } 즐거운 하루되세요 > 탄젠트80 님이 쓴 글입니다. > 제목 : 미완성 신호 주문 문의 > 안녕하세요 항상 답변 잘 사용하고 있습니다. 완성신호 스팟전략을 미완성신호 스팟전략으로 바꾸어 테스트해봤는데 주문이 일부 누락되는거 같습니다. 미완성신호는 같은봉에서 여러번 발생하지 않도록 첫번째꺼만 취하도록 했는데 진입횟수가 완성신호랑 미완성신호가 틀립니다. 한번 살펴봐 주시면 감사하겠습니다. === 당초 완성신호 스팟 전략 ================== function Main_OnStart() { Main.MessageList("선물to스팟_시작"); T = 0; } function Chart1_OnRiseSignal(Signal) { if (Signal.signalKind == 1) { Main.MessageList("Buy_Signal"); T = 1; Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Ask(5), 0); } if (T == 1 && Signal.signalKind == 2) { Main.MessageList("ExitLong_Signal"); Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Bid(5), 0); } if (Signal.signalKind == 3) { Main.MessageList("Sell_Signal"); T = -1; Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Bid(5), 0); } if (T == -1 && Signal.signalKind == 4) { Main.MessageList("ExitShort_Signal"); Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Ask(5), 0); } } ====== 미완성 주문 스팟 전략 ==================== var T; var Bcnt,Bxcnt,Scnt,Sxcnt; function Main_OnStart() { Main.MessageList("선물신호_선물미완성 스팟시작"); T = 0; } function Chart1_OnBarAppended(nData) { Bcnt = 0; Bxcnt = 0; Scnt = 0; Sxcnt = 0; } function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { Main.MessageList("신호완성/",IncompleteSignal.signalKind); if (Bcnt == 0 && IncompleteSignal.signalKind == 1) { Bcnt = Bcnt+1; Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Ask(5), 0); Main.MessageList("Buy_Signal"); T = 1; } if (T == 1 && Bxcnt == 0 && IncompleteSignal.signalKind == 2) { Bxcnt = Bxcnt+1; Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Bid(5), 0); Main.MessageList("ExitLong_Signal"); } if (Scnt == 0 && IncompleteSignal.signalKind == 3) { Scnt = Scnt+1; Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Bid(5), 0); Main.MessageList("Sell_Signal"); T = -1; } if (T == -1 && Sxcnt == 0 && IncompleteSignal.signalKind == 4) { Sxcnt = Sxcnt+1; Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Vol, MarketData1.Ask(5), 0); Main.MessageList("ExitShort_Signal"); } } =============== 로직 끝 ==== 첨부는 테스트로 해봤던 주문내역입니다. 답변 미리 감사드립니다. 수고하세요