커뮤니티

수식 수정 부탁합니다.

프로필 이미지
팡팡
2022-04-25 22:08:38.0
1448
글번호 225653
답변완료
안녕하세요! 많은도움 받고 있습니다. 아래식은 정해진 시간에 한개식 매도하고 청산 시간에 한개식 메수하는 식인데 진입 매도는 잘되나 청산은 안되고 있으며 진입 매도 후 예스스팟 실행을 한번 종료 후 다시 실행시키면 한개씩 청산이 잘됩니다. 다시 실행하지 않아도 될 수 있게 수정 부탁합니다. var EntryTime = 094000; var ExitTime = 132000; var MaxEnryVol = 3; var Entry,Exit,CurrentVol; var CSV,PSV,CSX,PSX; var CallOrderCode,PutOrderCode; function Main_OnStart() { var d = new Date(); var YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); Main.MessageList(HHMMSS,"Start"); Entry = true; if (HHMMSS >= EntryTime) { Entry = false; } Exit = true; if (HHMMSS >= ExitTime) { Exit = false; } if (Entry == true || Exit == true) { Main.MessageList(HHMMSS,"1번 타이머동작"); Main.SetTimer(1, 5000); } } function Main_OnTimer(nEventID) { var d = new Date(); var YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1) { if (Entry == true && HHMMSS >= EntryTime) { Main.MessageList(HHMMSS,"진입시작"); -------------------------------- 중략 --------------------------------------------- //종목을 찾았으면 Main.SetUserValue("SellDate",YYYYMMDD); Main.SetUserValue("CallOrderCode",CallOrderCode); Main.SetUserValue("PutOrderCode",PutOrderCode); Entry = false; if (ExitTime > EntryTime) Main.KillTimer(1); A1.OrderSell(CallOrderCode, 1, Option.GetBid(CallOrderCode, 2), 0); A1.OrderSell(PutOrderCode, 1, Option.GetBid(PutOrderCode, 2), 0); CurrentVol = 1; Main.SetTimer(2, 2000); } if (Exit == true && HHMMSS >= ExitTime) { Exit = false; if (ExitTime > EntryTime) Main.KillTimer(1); var SellDate = Main.GetUserValue("SellDate") if (YYYYMMDD == SellDate) { CallOrderCode = Main.GetUserValue("CallOrderCode"); PutOrderCode = Main.GetUserValue("PutOrderCode"); if (CallOrderCode != "") { A1.SetBalance(CallOrderCode, 0); if (A1.Balance.count > 0 && A1.Balance.position == 1) CSV = A1.Balance.count; else CSV = 0; if (PSV > 0) { Main.SetTimer(3, 2000); CSX = 1; A1.OrderBuy(CallOrderCode, 1, Option.GetAsk(CallOrderCode, 2),0); } } if (PutOrderCode != "") { A1.SetBalance(PutOrderCode, 0); if (A1.Balance.count > 0 && A1.Balance.position == 1) PSV = A1.Balance.count; else PSV = 0; if (PSV > 0) { Main.SetTimer(4, 2000); PSX = 1; A1.OrderBuy(PutOrderCode, 1, Option.GetAsk(PutOrderCode, 2),0); } } } } } if (nEventID == 2) { CurrentVol = CurrentVol+1; if (CurrentVol <= MaxEnryVol) { A1.OrderSell(CallOrderCode, 1, Option.GetBid(CallOrderCode, 2),0); A1.OrderSell(PutOrderCode, 1, Option.GetBid(PutOrderCode, 2), 0); } else { Main.KillTimer(2); } } if (nEventID == 3) { CSX = CSX+1; if (CSX <= CSV) { A1.OrderBuy(CallOrderCode, 1, Option.GetAsk(CallOrderCode, 2),0); A1.OrderBuy(PutOrderCode, 1, Option.GetAsk(PutOrderCode, 2),0); } else { Main.KillTimer(3); } } if (nEventID == 4) { PSX = PSX+1; if (PSX <= PSV) { A1.OrderBuy(CallOrderCode, 1, Option.GetAsk(CallOrderCode, 2),0); A1.OrderBuy(PutOrderCode, 1, Option.GetAsk(PutOrderCode, 2),0); } else { Main.KillTimer(4); } } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2022-05-24 16:43:40.0

안녕하세요 예스스탁입니다. 죄송하지만 해당 부분은 사용자분이 체크하시면서 수정해 보셔야 합니다. 스팟은 자바스크립트로 코딩가능한 분들이 사용한다는 전제에 저희는 간단한 가이드 정도만 답변을 드립니다. 이후 부분은 사용자분이 수정보완해 완성하셔야 합니다. 즐거운 하루되세요 > 팡팡 님이 쓴 글입니다. > 제목 : 수식 수정 부탁합니다. > 안녕하세요! 많은도움 받고 있습니다. 아래식은 정해진 시간에 한개식 매도하고 청산 시간에 한개식 메수하는 식인데 진입 매도는 잘되나 청산은 안되고 있으며 진입 매도 후 예스스팟 실행을 한번 종료 후 다시 실행시키면 한개씩 청산이 잘됩니다. 다시 실행하지 않아도 될 수 있게 수정 부탁합니다. var EntryTime = 094000; var ExitTime = 132000; var MaxEnryVol = 3; var Entry,Exit,CurrentVol; var CSV,PSV,CSX,PSX; var CallOrderCode,PutOrderCode; function Main_OnStart() { var d = new Date(); var YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); Main.MessageList(HHMMSS,"Start"); Entry = true; if (HHMMSS >= EntryTime) { Entry = false; } Exit = true; if (HHMMSS >= ExitTime) { Exit = false; } if (Entry == true || Exit == true) { Main.MessageList(HHMMSS,"1번 타이머동작"); Main.SetTimer(1, 5000); } } function Main_OnTimer(nEventID) { var d = new Date(); var YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1) { if (Entry == true && HHMMSS >= EntryTime) { Main.MessageList(HHMMSS,"진입시작"); -------------------------------- 중략 --------------------------------------------- //종목을 찾았으면 Main.SetUserValue("SellDate",YYYYMMDD); Main.SetUserValue("CallOrderCode",CallOrderCode); Main.SetUserValue("PutOrderCode",PutOrderCode); Entry = false; if (ExitTime > EntryTime) Main.KillTimer(1); A1.OrderSell(CallOrderCode, 1, Option.GetBid(CallOrderCode, 2), 0); A1.OrderSell(PutOrderCode, 1, Option.GetBid(PutOrderCode, 2), 0); CurrentVol = 1; Main.SetTimer(2, 2000); } if (Exit == true && HHMMSS >= ExitTime) { Exit = false; if (ExitTime > EntryTime) Main.KillTimer(1); var SellDate = Main.GetUserValue("SellDate") if (YYYYMMDD == SellDate) { CallOrderCode = Main.GetUserValue("CallOrderCode"); PutOrderCode = Main.GetUserValue("PutOrderCode"); if (CallOrderCode != "") { A1.SetBalance(CallOrderCode, 0); if (A1.Balance.count > 0 && A1.Balance.position == 1) CSV = A1.Balance.count; else CSV = 0; if (PSV > 0) { Main.SetTimer(3, 2000); CSX = 1; A1.OrderBuy(CallOrderCode, 1, Option.GetAsk(CallOrderCode, 2),0); } } if (PutOrderCode != "") { A1.SetBalance(PutOrderCode, 0); if (A1.Balance.count > 0 && A1.Balance.position == 1) PSV = A1.Balance.count; else PSV = 0; if (PSV > 0) { Main.SetTimer(4, 2000); PSX = 1; A1.OrderBuy(PutOrderCode, 1, Option.GetAsk(PutOrderCode, 2),0); } } } } } if (nEventID == 2) { CurrentVol = CurrentVol+1; if (CurrentVol <= MaxEnryVol) { A1.OrderSell(CallOrderCode, 1, Option.GetBid(CallOrderCode, 2),0); A1.OrderSell(PutOrderCode, 1, Option.GetBid(PutOrderCode, 2), 0); } else { Main.KillTimer(2); } } if (nEventID == 3) { CSX = CSX+1; if (CSX <= CSV) { A1.OrderBuy(CallOrderCode, 1, Option.GetAsk(CallOrderCode, 2),0); A1.OrderBuy(PutOrderCode, 1, Option.GetAsk(PutOrderCode, 2),0); } else { Main.KillTimer(3); } } if (nEventID == 4) { PSX = PSX+1; if (PSX <= PSV) { A1.OrderBuy(CallOrderCode, 1, Option.GetAsk(CallOrderCode, 2),0); A1.OrderBuy(PutOrderCode, 1, Option.GetAsk(PutOrderCode, 2),0); } else { Main.KillTimer(4); } } }