커뮤니티

수식에 오류가 발생했습니다. 수정 부탁합니다.

프로필 이미지
택군아
2018-07-09 20:27:44
2357
글번호 224509
답변완료

첨부 이미지

안녕하세요. 고생이 많습니다. 문의번호 1722번 문의 관련입니다. 보내주신 수식을 예스트레이드로 돌려보니 아래와 같은 에러가 발생되네요. 수정부탁 드립니다. <에러발생내역> 1. 줄번호 193 ReferenceError: count5 is not defined ->첨부파일1 2. 종목1(코스닥150인버스)첫매도시간을 외부변수에 지정된 시간(15:00시)에 매도가 되어야 하는데 매도가 되지않고 매수가됨 -> 첨부파일 2 3. 분활매수 횟수 및 매도횟수는 외부변로 지정하여 초기값이 3회분할매수 및 분할매도 하게끔되어 있으나 1또는 2회만 분할 매수 및 분할매도가 실행됨 -> 첨부파일2, 3 4. 첨부파일4는 보내주신 스팟코딩 자료입니다. 수정부탁합니다 <전략> 1. 장시작과 동시에 코덱스코스닥150선물 인버스 매수(251340) --> 인버스매수시간 외부변수로 지정, 인버스 분할매수횟수 외부변수로 지정 2. 매수한 코스닥150선물인버스를 15:00 에 매도 -> 매도시간 외부변수로 지정, 매도시 분할매도횟수 외부변수로 지정 3. 코덱스코스닥150레버리지(233740) 15:01에 매수 -> 코덱스코스닥150레버리지 매수시간 외부 변수로 지정, 분할매수횟수 외부변수로 지정 4. 매수한 코스닥150 레버리지 익일 시가에 매도 -> 매도시간 외부변수로 지정, 분할매도횟수 외부변수로 지정 5. 주식계좌에서 etf 매매비중(%)을 외부변수로 지정-> 예) 주식계좌에 1000만원 있을 때 500만원만 etf로 매매시의 비중
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2018-07-26 14:35:07

안녕하세요 예스스탁입니다. 일부 잘못된 부분이 있어 수정했습니다. 참고하셔서 수정보완해 사용하시기 바랍니다. var HHMMSS,HHMMSS1; var count1, count2, count3, count4, count5; var M1; function Main_OnStart() { //1번 타이머 5초간격, 지정한 간격으로 시간체크하기 위한 용도 Main.SetTimer(1, 5000); } function Main_OnTimer(nEventID) { var d = new Date(); HHMMSS1 = HHMMSS; HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //종목1(MarketData1) // 첫매수 if (nEventID == 1 && HHMMSS >= 매수시간1 && HHMMSS1 < 매수시간1) { //지정한 금액만큼 매도3호가로 매수주문 var BuyPrice1 = MarketData1.Ask(3); var Bvol1 = Math.floor(매수금액1/BuyPrice1); Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Bvol1,BuyPrice1,0); if (분할매수횟수1 >= 2) { //2번 타이머(종목1 추가매수 간격) Main.SetTimer(2, 분할매수시간간격1*1000); count2 = 1; } } //2번타이머 동작 //종목1(MarketData1) 추가매수(첫매수 후 N초 단위로) if (nEventID == 2) { //지정한 분할횟수보다 작으면 if (count2 < 분할매수횟수1) { //타이머 동작횟수 카운트 count2 = count2+1; //추가 매수 실행 var BuyPrice1 = MarketData1.Ask(3); var Bvol1 = Math.floor(매수금액1/BuyPrice1); Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Bvol1,BuyPrice1,0); } //지정한 분할횟수에 도달하면 if (count2 == 분할매수횟수1) { //2번 타이머 종료 Main.KillTimer(2); } } //종목1(MarketData1) 첫매도 if (nEventID == 1 && HHMMSS >= 매도시간1 && HHMMSS1 < 매도시간1) { //종목1에 대한 매수 미체결 모두 취소 var num1 = Account1.GetTheNumberOfUnfills() for(var i = 1 ; i < num1 ; i++) { Account1.SetUnfill(i); if (Account1.Unfill.orderKind == 2 && Account1.Unfill.count > 0 && Account1.Unfill.code == MarketData1.code) { Account1.OrderCancel(Account1.Unfill.orderNum); } } //종목1 잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); //잔고수량 Xvol1 = Account1.Balance.count; if (분할매도횟수1 >= 2) { var V1 = Math.floor(Xvol1/분할매도횟수1); Xvol11 = Xvol1 - V1*(분할매도횟수1-1); Xvol12 = V1; } else { Xvol11 = Xvol1; } var SellPrice1 = MarketData1.Bid(3); Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Xvol11,SellPrice1,0); if (분할매도횟수1 >= 2) { //3번 타이머,10초 타이머(분할매도 간격) Main.SetTimer(3, 10000); count3 = 1; } } //종목1(MarketData1) 추가매수(첫매수 후 N초 단위로) if (nEventID == 3) { if (count3 < 분할매도횟수1) { count3 = count3+1; var SellPrice = MarketData1.Bid(3); Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Xvol12,SellPrice,0); } if (count3 == 분할매도횟수1) { Main.KillTimer(2); } } //종목2(MarketData2) // 첫매수 if (nEventID == 1 && HHMMSS >= 매수시간2 && HHMMSS1 < 매수시간2) { //지정한 금액만큼 매도3호가로 매수주문 var BuyPrice2 = MarketData2.Ask(3); var Bvol2 = Math.floor(매수금액2/BuyPrice2); Account1.OrderBuy(Main.GetOrderCode(MarketData2.code),Bvol2,BuyPrice2,0); if (분할매수횟수2 >= 2) { //2번 타이머(종목1 추가매수 간격) Main.SetTimer(4, 분할매수시간간격2*1000); count4 = 1; } } //2번타이머 동작 //종목2(MarketData2) 추가매수(첫매수 후 N초 단위로) if (nEventID == 4) { //카운트 값이 지정한 분할횟수 미만이면 if (count4 < 분할매수횟수2) { //타이머 동작횟수 카운트 count4 = count4+1; //추가 매수 실행 var BuyPrice2 = MarketData2.Ask(3); var Bvol2 = Math.floor(매수금액2/BuyPrice2); Account1.OrderBuy(Main.GetOrderCode(MarketData2.code),Bvol2,BuyPrice2,0); } //지정한 분할횟수에 도달하면 if (count4 == 분할매수횟수1) { //4번 타이머 종료 Main.KillTimer(4); } } //종목2(MarketData2) 첫매도 if (nEventID == 1 && HHMMSS >= 매도시간2 && HHMMSS1 < 매도시간2) { //종목2에 대한 매수 미체결 모두 취소 var num1 = Account1.GetTheNumberOfUnfills() for(var i = 1 ; i < num1 ; i++) { Account1.SetUnfill(i); if (Account1.Unfill.orderKind == 2 && Account1.Unfill.count > 0 && Account1.Unfill.code == MarketData2.code) { Account1.OrderCancel(Account1.Unfill.orderNum); } } //종목2 잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData2.code), 0); //잔고수량 Xvol2 = Account1.Balance.count; //분할매도횟수가 2이상일때 if (분할매도횟수2 >= 2) { //잔고수량을 지정한 횟수로 나누어 1회 주문할 수량 계산 var V2 = Math.floor(Xvol2/분할매도횟수2); Xvol21 = Xvol2 - V2*(분할매도횟수2-1); Xvol22 = V2; } else { Xvol21 = Xvol2; } var SellPrice2 = MarketData2.Bid(3); Account1.OrderSell(Main.GetOrderCode(MarketData2.code),Xvol21,SellPrice2,0); if (분할매도횟수2 >= 2) { //3번 타이머,10초 타이머(분할매도 간격) Main.SetTimer(5, 10000); //횟수 카운트 변수는 초기값 1 count5 = 1; } } //종목1(MarketData2) 추가매수(첫매수 후 N초 단위로) if (nEventID == 5) { //카운트 값이 분할매도횟수2 미만이면 if (count5 < 분할매도횟수2) { //타이저 동작할때 마다 1씩 증가 count5 = count5+1; //추가매도 실행 var SellPrice2 = MarketData2.Bid(3); Account1.OrderSell(Main.GetOrderCode(MarketData2.code),Xvol22,SellPrice2,0); } //카운트 값이 분할매도횟수와 같이면 if (count5 == 분할매도횟수2) { //5번타이머 종 Main.KillTimer(5); } } } 즐거운 하루되세요 > 택군아 님이 쓴 글입니다. > 제목 : 수식에 오류가 발생했습니다. 수정 부탁합니다. > 안녕하세요. 고생이 많습니다. 문의번호 1722번 문의 관련입니다. 보내주신 수식을 예스트레이드로 돌려보니 아래와 같은 에러가 발생되네요. 수정부탁 드립니다. <에러발생내역> 1. 줄번호 193 ReferenceError: count5 is not defined ->첨부파일1 2. 종목1(코스닥150인버스)첫매도시간을 외부변수에 지정된 시간(15:00시)에 매도가 되어야 하는데 매도가 되지않고 매수가됨 -> 첨부파일 2 3. 분활매수 횟수 및 매도횟수는 외부변로 지정하여 초기값이 3회분할매수 및 분할매도 하게끔되어 있으나 1또는 2회만 분할 매수 및 분할매도가 실행됨 -> 첨부파일2, 3 4. 첨부파일4는 보내주신 스팟코딩 자료입니다. 수정부탁합니다 <전략> 1. 장시작과 동시에 코덱스코스닥150선물 인버스 매수(251340) --> 인버스매수시간 외부변수로 지정, 인버스 분할매수횟수 외부변수로 지정 2. 매수한 코스닥150선물인버스를 15:00 에 매도 -> 매도시간 외부변수로 지정, 매도시 분할매도횟수 외부변수로 지정 3. 코덱스코스닥150레버리지(233740) 15:01에 매수 -> 코덱스코스닥150레버리지 매수시간 외부 변수로 지정, 분할매수횟수 외부변수로 지정 4. 매수한 코스닥150 레버리지 익일 시가에 매도 -> 매도시간 외부변수로 지정, 분할매도횟수 외부변수로 지정 5. 주식계좌에서 etf 매매비중(%)을 외부변수로 지정-> 예) 주식계좌에 1000만원 있을 때 500만원만 etf로 매매시의 비중