커뮤니티

수식 오류 확인 부탁드립니다.

프로필 이미지
삼룡이
2020-04-17 10:19:38
3527
글번호 225198
답변완료
다음 수식으로 차트와 연결하여 사용하려고 하는데 주문이 나갈때도 있고 안나갈때도 있습니다. 무엇이 잘 못되었는지 검증 부탁드립니다. var T,YYYYMMDD,daycount; var d = new Date(); var T1 = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); function Main_OnStart() { Main.MessageList("Start"); T = 0; var d = new Date(); YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); Main.SetTimer(1, 5000); if (Main.GetUserValue(YYYYMMDD) == "20200611") { daycount = true; } else { daycount = false; } } function Chart1_OnRiseSignal(Signal) { if (T1>=90400 && Signal.signalKind == 1) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Signal.count, MarketData1.Ask(5), 0); } if (T1>=90400 && Signal.signalKind == 2) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Signal.count, 0, 1); } if (T1>=90400 && Signal.signalKind == 3) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Signal.count, MarketData1.Bid(5), 0); } if (T1>=90400 && Signal.signalKind == 4) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Signal.count, 0, 1); } } function Main_OnTimer(nEventID) { var d = new Date(); var T1 = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && daycount == true && T1>=152100) { Main.KillTimer(1); Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); } if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } if (nEventID == 1 && daycount == false && T1>=153600) { Main.KillTimer(1); Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); } if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2020-05-20 16:52:36

안녕하세요 예스스탁입니다. 1 올려주신 수식을 국내선물에 테스트 해 보았지만 별도의 큰 문제가 없습니다. Main.GetUserValue(YYYYMMDD) == "20200611" 부분은 내부파일의 값을 가져오는 부분이 의미가 없어 YYYYMMDD == "20200611" 로 처리했고 이벤트 밖에서 처리한 시간계산을 이벤트 안에서 처리하게 했습니다. 2 주문이 나갈경우와 안나갈경우가 있으므로 주문 가격과 관련된 내용이 아닌지 확인해 보셔야 할것 같습니다. 종목에 따라서는 매수5호가나 매도5호가가 없는 경우도 있는데 해당 가격으로 주문집행하면 주분가격이 0으로 발생해서 주문거부가 됩니다. 아래식에 매수진입은 매도1~5호가중 가장 높은값 매도진입은 매수1~5호가중 가장 낮은값으로 주문이 집행되게 작성했습니다. 아래식으로 사용해 보시고 문제가 있으면 02-3453-1060으로 전화주시기 바랍니다. 3 var T,YYYYMMDD,daycount; function Main_OnStart() { Main.MessageList("Start"); T = 0; var d = new Date(); YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); Main.SetTimer(1, 5000); if (YYYYMMDD == "20200611") { daycount = true; } else { daycount = false; } } function Chart1_OnRiseSignal(Signal) { var d = new Date(); var T1 = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (T1>=90400 && Signal.signalKind == 1) { var PP = MarketData1.current; for (var i = 1; i <= 5;i++) { if (MarketData1.Ask(i) > PP) { PP = MarketData1.Ask(i) } } Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Signal.count, PP, 0); } if (T1>=90400 && Signal.signalKind == 2) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Signal.count, 0, 1); } if (T1>=90400 && Signal.signalKind == 3) { var PP = MarketData1.current; for (var i = 1; i <= 5;i++) { if (MarketData1.Bid(i) < PP) { PP = MarketData1.Bid(i) } } Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Signal.count, PP, 0); } if (T1>=90400 && Signal.signalKind == 4) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Signal.count, 0, 1); } } function Main_OnTimer(nEventID) { var d = new Date(); var T1 = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && daycount == true && T1>=152100) { Main.KillTimer(1); Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); } if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } if (nEventID == 1 && daycount == false && T1>=153600) { Main.KillTimer(1); Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); } if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } } 즐거운 하루되세요 > 삼룡이 님이 쓴 글입니다. > 제목 : 수식 오류 확인 부탁드립니다. > 다음 수식으로 차트와 연결하여 사용하려고 하는데 주문이 나갈때도 있고 안나갈때도 있습니다. 무엇이 잘 못되었는지 검증 부탁드립니다. var T,YYYYMMDD,daycount; var d = new Date(); var T1 = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); function Main_OnStart() { Main.MessageList("Start"); T = 0; var d = new Date(); YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); Main.SetTimer(1, 5000); if (Main.GetUserValue(YYYYMMDD) == "20200611") { daycount = true; } else { daycount = false; } } function Chart1_OnRiseSignal(Signal) { if (T1>=90400 && Signal.signalKind == 1) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Signal.count, MarketData1.Ask(5), 0); } if (T1>=90400 && Signal.signalKind == 2) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Signal.count, 0, 1); } if (T1>=90400 && Signal.signalKind == 3) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Signal.count, MarketData1.Bid(5), 0); } if (T1>=90400 && Signal.signalKind == 4) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Signal.count, 0, 1); } } function Main_OnTimer(nEventID) { var d = new Date(); var T1 = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && daycount == true && T1>=152100) { Main.KillTimer(1); Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); } if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } if (nEventID == 1 && daycount == false && T1>=153600) { Main.KillTimer(1); Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); } if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } }