커뮤니티

부탁합니다.

프로필 이미지
너무조아
2016-03-21 17:51:28
110
글번호 96471
답변완료
아래수식에서 중복진입이 허용되지 않도록 하려면 어떻게 하여야 하나요? var entry,T; function Main_OnStart() { T = 0; Main.MessageLog("시작"); OrderCode = Main.GetOrderCode(SP.code); entry = 0; } function CTP_OnRiseSignal(Signal) { Main.MessageLog("신호완성/"+Signal.signalKind); if (T <= 0 && Signal.signalKind == 1) { T = 1; entry = entry+1; Main.KillTimer(2); if (entry == 1) VV = 1; else VV = 2; Main.SetTimer(1, 180000); } if (T >= 0 && Signal.signalKind == 3) { T = -1; entry = entry+1; if (entry == 1) VV = 1; else VV = 2; Main.KillTimer(1); Main.SetTimer(2, 180000); } } function Main_OnTimer(nEventID) { if (nEventID == 1 && T == 1) { Main.KillTimer(1); A1.OrderBuy(SP.code, VV, SP.Ask(5),2); Main.MessageLog("매수진입"); } if (nEventID == 2 && T == -1) { Main.KillTimer(2); A1.OrderSell(SP.code, VV, SP.Bid(5),2); Main.MessageLog("매도진입"); } }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2016-03-21 18:27:49

안녕하세요 예스스탁입니다. 중복진입이 잔고의 포지션여부이신것같습니다. 현재 수식은 T가 처음에는 0이고 T가 0이나 -1일때만 매수신호가 발생시 매수주문을 실행합니다. 매수신호 발생후 T가 1로 변경이 되어 다시 차트에서 매수가 발생해도 주문을 하지 않습니다. 매도도 같은 개념으로 매수진입과 매도진입이 번갈아 가면서 주문되도록 되어 있습니다. 식 2개를 올려드립니다. 1번식은 최초 적용시 차트의 포지션 여부에 따라 반대부터 신호 발생하고 이후 매수와 매도 반복합니다. 2번식은 잔고체크해서 잔고포지션과 동일방향이 아닐때만 주문하게 됩니다. 1번 var entry,T; function Main_OnStart() { T = 0; if (CTP.GetOpenContracts() > 0) T = 1; if (CTP.GetOpenContracts() < 0) T = -1; Main.MessageLog("시작"); OrderCode = Main.GetOrderCode(SP.code); entry = 0; } function CTP_OnRiseSignal(Signal) { Main.MessageLog("신호완성/"+Signal.signalKind); if (T <= 0 && Signal.signalKind == 1) { T = 1; entry = entry+1; Main.KillTimer(2); if (entry == 1) VV = 1; else VV = 2; Main.SetTimer(1, 180000); } if (T >= 0 && Signal.signalKind == 3) { T = -1; entry = entry+1; if (entry == 1) VV = 1; else VV = 2; Main.KillTimer(1); Main.SetTimer(2, 180000); } } function Main_OnTimer(nEventID) { if (nEventID == 1 && T == 1) { Main.KillTimer(1); A1.OrderBuy(SP.code, VV, SP.Ask(5),2); Main.MessageLog("매수진입"); } if (nEventID == 2 && T == -1) { Main.KillTimer(2); A1.OrderSell(SP.code, VV, SP.Bid(5),2); Main.MessageLog("매도진입"); } } 2번 var entry,T; function Main_OnStart() { T = 0; Main.MessageLog("시작"); OrderCode = Main.GetOrderCode(SP.code); entry = 0; } function CTP_OnRiseSignal(Signal) { Main.MessageLog("신호완성/"+Signal.signalKind); A1.SetBalance(Main.GetOrderCode(Signal.code)) if (T <= 0 && (A1.Balance.position == 1 || A1.Balance.position == 0) && Signal.signalKind == 1) { T = 1; entry = entry+1; Main.KillTimer(2); if (entry == 1) VV = 1; else VV = 2; Main.SetTimer(1, 180000); } if (T >= 0 && (A1.Balance.position == 2 || A1.Balance.position == 0) && Signal.signalKind == 3) { T = -1; entry = entry+1; if (entry == 1) VV = 1; else VV = 2; Main.KillTimer(1); Main.SetTimer(2, 180000); } } function Main_OnTimer(nEventID) { if (nEventID == 1 && T == 1) { Main.KillTimer(1); A1.OrderBuy(SP.code, VV, SP.Ask(5),2); Main.MessageLog("매수진입"); } if (nEventID == 2 && T == -1) { Main.KillTimer(2); A1.OrderSell(SP.code, VV, SP.Bid(5),2); Main.MessageLog("매도진입"); } } 즐거운 하루되세요 > 너무조아 님이 쓴 글입니다. > 제목 : 부탁합니다. > 아래수식에서 중복진입이 허용되지 않도록 하려면 어떻게 하여야 하나요? var entry,T; function Main_OnStart() { T = 0; Main.MessageLog("시작"); OrderCode = Main.GetOrderCode(SP.code); entry = 0; } function CTP_OnRiseSignal(Signal) { Main.MessageLog("신호완성/"+Signal.signalKind); if (T <= 0 && Signal.signalKind == 1) { T = 1; entry = entry+1; Main.KillTimer(2); if (entry == 1) VV = 1; else VV = 2; Main.SetTimer(1, 180000); } if (T >= 0 && Signal.signalKind == 3) { T = -1; entry = entry+1; if (entry == 1) VV = 1; else VV = 2; Main.KillTimer(1); Main.SetTimer(2, 180000); } } function Main_OnTimer(nEventID) { if (nEventID == 1 && T == 1) { Main.KillTimer(1); A1.OrderBuy(SP.code, VV, SP.Ask(5),2); Main.MessageLog("매수진입"); } if (nEventID == 2 && T == -1) { Main.KillTimer(2); A1.OrderSell(SP.code, VV, SP.Bid(5),2); Main.MessageLog("매도진입"); } }