커뮤니티

설정시간 신호유지

프로필 이미지
너무조아
2019-01-02 16:57:28
3126
글번호 224700
답변완료
아래의 수식에서 미완성신호가 발생 후 계속하여 미완성신호가 유지되고 있는 동안만 타이머가 작동하도록 하고자 하나, 타이머 설정시간보다 아주짧게 미완성신호가 발생 한다음 소멸하여도 타이머는 계속 작동하여 주문이 접수체결 됩니다. 이를 타이머가 설정 된 시간동안 미완성신호가 계속유지되고 있을 때에만 주문이 접수체결 되도록 아래의 수식을 변경하여 주시면 감사 하겠습니다. 즉, 타임어 설정시간이 5초인경우 1. 5초 미만 미완성신호 발생 후 소멸시 -------> 주문접수/체결 발생하지 않음. 2. 5초간 미완성신호가 계속유지되고 있을때 만 --------> 주문접수 / 체결 됨 var T; function Main_OnStart() { T = 0; Main.MessageLog("시작"); OrderCode = Main.GetOrderCode(KP.code); } function C1_OnRiseIncompleteSignal(IncompleteSignal) { Main.MessageLog("미완성신호/"+IncompleteSignal.signalKind); A1.SetBalance(Main.GetOrderCode(IncompleteSignal.code)) if (T <= 0 && (A1.Balance.position == 1 || A1.Balance.position == 0) && IncompleteSignal.signalKind == 1) { T = 1; if(A1.Balance.position == 0) VV = 1; else VV = 2; Main.SetTimer(1,5000); } if (T >= 0 && A1.Balance.position == 1 && IncompleteSignal.signalKind == 3) { T = 0; Main.KillTimer(1); Main.SetTimer(2,5000); } if (T >= 0 && (A1.Balance.position == 2 || A1.Balance.position == 0) && IncompleteSignal.signalKind == 3) { T = -1; if(A1.Balance.position == 0) VV = 1; else VV = 2; Main.SetTimer(2,5000); } if (T <= 0 && A1.Balance.position == 2 && IncompleteSignal.signalKind == 1) { T = 0; Main.KillTimer(2); Main.SetTimer(1,5000); } } function Main_OnTimer(nEventID) { //마지막봉 미완성 신호정보 셋팅 var Incom = C1.GetIncompleteSignal(); if (nEventID == 1 && T == 1) { Main.KillTimer(1); A1.OrderBuy(KP.code, VV, KP.Ask(2),2); Main.MessageLog("매수진입"); } if (nEventID == 1 && T == 0) { Main.KillTimer(1); Main.MessageLog("중복매수진입금지"); } if (nEventID == 2 && T == -1) { Main.KillTimer(2); A1.OrderSell(KP.code, VV, KP.Bid(2),2); Main.MessageLog("매도진입"); } if (nEventID == 2 && T == 0) { Main.KillTimer(2); Main.MessageLog("중복매도진입금지"); } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2019-01-28 16:18:45

안녕하세요 예스스탁입니다. var Incom = C1.GetIncompleteSignal(); 올려주신 수식에 현재 미완성 정보를 가져오는 함수가 셋팅디어 있습니다. 해당함수는 미완성 신호가 여러개 일수 있으므로 배열로 값을 전달합니다. 첫번째 배열방의 값으로 신호가 유지중인지 판단하시면 됩니다. var T; function Main_OnStart() { T = 0; Main.MessageLog("시작"); OrderCode = Main.GetOrderCode(KP.code); } function C1_OnRiseIncompleteSignal(IncompleteSignal) { Main.MessageLog("미완성신호/"+IncompleteSignal.signalKind); A1.SetBalance(Main.GetOrderCode(IncompleteSignal.code)) if (T <= 0 && (A1.Balance.position == 1 || A1.Balance.position == 0) && IncompleteSignal.signalKind == 1) { T = 1; if(A1.Balance.position == 0) VV = 1; else VV = 2; Main.SetTimer(1,5000); } if (T >= 0 && A1.Balance.position == 1 && IncompleteSignal.signalKind == 3) { T = 0; Main.KillTimer(1); Main.SetTimer(2,5000); } if (T >= 0 && (A1.Balance.position == 2 || A1.Balance.position == 0) && IncompleteSignal.signalKind == 3) { T = -1; if(A1.Balance.position == 0) VV = 1; else VV = 2; Main.SetTimer(2,5000); } if (T <= 0 && A1.Balance.position == 2 && IncompleteSignal.signalKind == 1) { T = 0; Main.KillTimer(2); Main.SetTimer(1,5000); } } function Main_OnTimer(nEventID) { //마지막봉 미완성 신호정보 셋팅 var Incom = C1.GetIncompleteSignal(); if (nEventID == 1 && T == 1 && Incom[0] == 1) { Main.KillTimer(1); A1.OrderBuy(KP.code, VV, KP.Ask(2),2); Main.MessageLog("매수진입"); } if (nEventID == 1 && T == 0 ) { Main.KillTimer(1); Main.MessageLog("중복매수진입금지"); } if (nEventID == 2 && T == -1 && && Incom[0] == 3) { Main.KillTimer(2); A1.OrderSell(KP.code, VV, KP.Bid(2),2); Main.MessageLog("매도진입"); } if (nEventID == 2 && T == 0) { Main.KillTimer(2); Main.MessageLog("중복매도진입금지"); } } 즐거운 하루되세요 > 너무조아 님이 쓴 글입니다. > 제목 : 설정시간 신호유지 > 아래의 수식에서 미완성신호가 발생 후 계속하여 미완성신호가 유지되고 있는 동안만 타이머가 작동하도록 하고자 하나, 타이머 설정시간보다 아주짧게 미완성신호가 발생 한다음 소멸하여도 타이머는 계속 작동하여 주문이 접수체결 됩니다. 이를 타이머가 설정 된 시간동안 미완성신호가 계속유지되고 있을 때에만 주문이 접수체결 되도록 아래의 수식을 변경하여 주시면 감사 하겠습니다. 즉, 타임어 설정시간이 5초인경우 1. 5초 미만 미완성신호 발생 후 소멸시 -------> 주문접수/체결 발생하지 않음. 2. 5초간 미완성신호가 계속유지되고 있을때 만 --------> 주문접수 / 체결 됨 var T; function Main_OnStart() { T = 0; Main.MessageLog("시작"); OrderCode = Main.GetOrderCode(KP.code); } function C1_OnRiseIncompleteSignal(IncompleteSignal) { Main.MessageLog("미완성신호/"+IncompleteSignal.signalKind); A1.SetBalance(Main.GetOrderCode(IncompleteSignal.code)) if (T <= 0 && (A1.Balance.position == 1 || A1.Balance.position == 0) && IncompleteSignal.signalKind == 1) { T = 1; if(A1.Balance.position == 0) VV = 1; else VV = 2; Main.SetTimer(1,5000); } if (T >= 0 && A1.Balance.position == 1 && IncompleteSignal.signalKind == 3) { T = 0; Main.KillTimer(1); Main.SetTimer(2,5000); } if (T >= 0 && (A1.Balance.position == 2 || A1.Balance.position == 0) && IncompleteSignal.signalKind == 3) { T = -1; if(A1.Balance.position == 0) VV = 1; else VV = 2; Main.SetTimer(2,5000); } if (T <= 0 && A1.Balance.position == 2 && IncompleteSignal.signalKind == 1) { T = 0; Main.KillTimer(2); Main.SetTimer(1,5000); } } function Main_OnTimer(nEventID) { //마지막봉 미완성 신호정보 셋팅 var Incom = C1.GetIncompleteSignal(); if (nEventID == 1 && T == 1) { Main.KillTimer(1); A1.OrderBuy(KP.code, VV, KP.Ask(2),2); Main.MessageLog("매수진입"); } if (nEventID == 1 && T == 0) { Main.KillTimer(1); Main.MessageLog("중복매수진입금지"); } if (nEventID == 2 && T == -1) { Main.KillTimer(2); A1.OrderSell(KP.code, VV, KP.Bid(2),2); Main.MessageLog("매도진입"); } if (nEventID == 2 && T == 0) { Main.KillTimer(2); Main.MessageLog("중복매도진입금지"); } }