커뮤니티

수식 수정 및 질문

프로필 이미지
다낚아
2021-04-22 01:47:41
2652
글번호 225473
답변완료
아래수식을 게시판에서 받아서 모의로 실행하면 안돼는게 있어서 질문드립니다. 1. 관심종목등록이 안되네요. 2. 종목검색중 검색되다가 -1로 시간초과후 멈춤니다. 3. 매수주문은 들어가는데 체결이 안됩니다. 원인이 무엇인지 설명부탁드리며, 수식보완 부탁합니다. var 검색주기 = 60;//60초 var 종목수 = 50; var 매수금액 = 1000000; var ItemList = [],MK = [],HH = []; var HHMMSS,req; function Main_OnStart() { Main.SetTimer(1, 60000); Main.MessageList("start"); } function Main_OnTimer(nEventID) { var d = new Date(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //9시 이후에 2분간격으로 종목검색 50종목 이하 if (nEventID == 1 && HHMMSS >= 090100 && MK.length < 종목수) { Main.KillTimer(1); Main.MessageList("종목검색 요청"); Main.ReqPowerSearch("단타A"); } } // 검색종목 관심등록 function Main_OnRcvItemList(aItemList, nCount) { if (nCount > 0) { Main.SendInterests("관심단타A", aItemList, false); Main.MessageList("관심종목 등록"); } } function Main_OnRcvItemList(aItemList, nCount) { Main.MessageList("종목검색 완료 nCount : ",nCount,MK.length); Main.MessageList("종목검색 완료 aItemList : ",aItemList); if (nCount > 0) { ItemList = []; //첫검색일때 if (MK.length == 0) { ItemList = aItemList; } else //두번쨰 이후(차트가 만들어진 종목을 제외하고 새로운 종목만 집계) { for (var i = 0; i < nCount; i++ ) { var add = true; for (var x = 0; x < MK.length; x++ ) { if (aItemList[i] == MK[x].code) { add = false; } } if (add == true) { ItemList.push(aItemList[i]); } } } if (ItemList.length > 0 && MK.length < 종목수) { req = 0; Main.MessageList("종목객체요청 : ",ItemList[req]); Main.ReqMarketData(ItemList[req]); } else { if (MK.length < 종목수) { Main.SetTimer(1, 검색주기*1000); } } } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == ItemList[req]) { Main.MessageList("종목객체생성:",req,MarketData.code); MK.push(MarketData); HH.push(MK[req].current);//최고가 초기값은 현재가 Main.MessageList("매수주문:",MarketData.code); //매도5호가로 매수금액만큼 매수주문 Account1.OrderBuy(MarketData.code,Math.floor(매수금액/MarketData.Ask(5)),MarketData.Ask(5),0); req = req+1; if (req < ItemList.length && MK.length < 종목수) { Main.MessageList("종목객체요청 : ",ItemList[req]); Main.ReqMarketData(ItemList[req]); } else { Main.MessageList("종목객체생성완료"); if (MK.length < 50) { Main.SetTimer(1, 검색주기*1000); } } } } function Main_OnUp*ateMarket(sItemCode, lUp*ateID) { if (lUp*ateID == 20001) { for (var i = 0; i < MK.length; i++) { //업데이트된 종목을 찾아 if (MK[i].code == sItemCode && HH[i] > 0) { //현재가가 저장된 최고가 보다 크면 최고가를 현재가로 변경 if (MK[i].current > HH[i]) { HH[i] = MK[i].current; } //잔고셋팅 Account1.SetBalance(MK[i].code, 0); //최고가는 평단가 대비 20이상 크고 현재가가 평단가 대비 15% 이하로 내려오면 매수5호가로 전량 매도 if (HH[i] >= Account1.Balance.avgUnitCost*1.20 && MK[i].current <= Account1.Balance.avgUnitCost*1.10) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,MK[i].Bid(5),0); //HH[i]는 -1로 저장하여 이후 감시하지 않게 함 HH[i] = -1; Main.MessageList("종목객체삭제 : ",S); var S = Main.RemoveObject(MK[i]); MK.splice(i,1); } } } } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2021-05-17 16:44:55

안녕하세요 예스스탁입니다. 1 스팟은 동일이벤트는 한번만 사용해서 해당 이벤트안에 모든 내용을 넣으셔야 합니다. 현재 function Main_OnRcvItemList(aItemList, nCount)이벤트가 2번 사용되어 있습니다. 같은 이벤트가 2번이상 사용되면 수식상 아래쪽만 실행되게 됩니다. 하나로 내용을 합치셔야 합니다. 2 종목객체의 요청이 15초당 60회입니다. 종목객체 제한시간이 적용되면 재요청하는 내용이 없어 아래식에 추가했습니다. 3 현재 수식에서 매도5호가로 매수주문이 집행되게 되어 있습니다. 체결여부는 수식안에서 컨트롤이 되지 않습니다. 시장가등으로 변경해서 주문가격을 높여보실수 밖에 없습니다. 4 var 검색주기 = 60;//60초 var 종목수 = 50; var 매수금액 = 1000000; var ItemList = [],MK = [],HH = []; var HHMMSS,req; function Main_OnStart() { Main.SetTimer(1, 60000); Main.MessageList("start"); } function Main_OnTimer(nEventID) { var d = new Date(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //9시 이후에 2분간격으로 종목검색 50종목 이하 if (nEventID == 1 && HHMMSS >= 090100 && MK.length < 종목수) { Main.KillTimer(1); Main.MessageList("종목검색 요청"); Main.ReqPowerSearch("단타A"); } if (nEventID == 3 ) { //종료 Main.KillTimer(3); //다음종목 요청 Main.ReqMarketData(ItemList[req]); Main.MessageList(req,"종목객체재요청",ItemList[req]); } } function Main_OnRcvItemList(aItemList, nCount) { Main.MessageList("종목검색 완료 nCount : ",nCount,MK.length); Main.MessageList("종목검색 완료 aItemList : ",aItemList); if (nCount > 0) { Main.SendInterests("관심단타A", aItemList, false); Main.MessageList("관심종목 등록"); } if (nCount > 0) { ItemList = []; //첫검색일때 if (MK.length == 0) { ItemList = aItemList; } else //두번쨰 이후(차트가 만들어진 종목을 제외하고 새로운 종목만 집계) { for (var i = 0; i < nCount; i++ ) { var add = true; for (var x = 0; x < MK.length; x++ ) { if (aItemList[i] == MK[x].code) { add = false; } } if (add == true) { ItemList.push(aItemList[i]); } } } if (ItemList.length > 0 && MK.length < 종목수) { req = 0; Main.MessageList("종목객체요청 : ",ItemList[req]); Main.ReqMarketData(ItemList[req]); } else { if (MK.length < 종목수) { Main.SetTimer(1, 검색주기*1000); } } } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == ItemList[req]) { Main.MessageList("종목객체생성:",req,MarketData.code); MK.push(MarketData); HH.push(MK[req].current);//최고가 초기값은 현재가 Main.MessageList("매수주문:",MarketData.code); //매도5호가로 매수금액만큼 매수주문 Account1.OrderBuy(MarketData.code,Math.floor(매수금액/MarketData.Ask(5)),MarketData.Ask(5),0); req = req+1; if (req < ItemList.length && MK.length < 종목수) { Main.MessageList("종목객체요청 : ",ItemList[req]); var S = Main.ReqMarketData(ItemList[req]); if (S == -1) { //3번타이머 15초 셋팅 Main.SetTimer(3, 15000); } } else { Main.MessageList("종목객체생성완료"); if (MK.length < 50) { Main.SetTimer(1, 검색주기*1000); } } } } function Main_OnUp*ateMarket(sItemCode, lUp*ateID) { if (lUp*ateID == 20001) { for (var i = 0; i < MK.length; i++) { //업데이트된 종목을 찾아 if (MK[i].code == sItemCode && HH[i] > 0) { //현재가가 저장된 최고가 보다 크면 최고가를 현재가로 변경 if (MK[i].current > HH[i]) { HH[i] = MK[i].current; } //잔고셋팅 Account1.SetBalance(MK[i].code, 0); //최고가는 평단가 대비 20이상 크고 현재가가 평단가 대비 15% 이하로 내려오면 매수5호가로 전량 매도 if (HH[i] >= Account1.Balance.avgUnitCost*1.20 && MK[i].current <= Account1.Balance.avgUnitCost*1.10) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,MK[i].Bid(5),0); //HH[i]는 -1로 저장하여 이후 감시하지 않게 함 HH[i] = -1; Main.MessageList("종목객체삭제 : ",S); var S = Main.RemoveObject(MK[i]); MK.splice(i,1); } } } } } 즐거운 하루되세요 > 다낚아 님이 쓴 글입니다. > 제목 : 수식 수정 및 질문 > 아래수식을 게시판에서 받아서 모의로 실행하면 안돼는게 있어서 질문드립니다. 1. 관심종목등록이 안되네요. 2. 종목검색중 검색되다가 -1로 시간초과후 멈춤니다. 3. 매수주문은 들어가는데 체결이 안됩니다. 원인이 무엇인지 설명부탁드리며, 수식보완 부탁합니다. var 검색주기 = 60;//60초 var 종목수 = 50; var 매수금액 = 1000000; var ItemList = [],MK = [],HH = []; var HHMMSS,req; function Main_OnStart() { Main.SetTimer(1, 60000); Main.MessageList("start"); } function Main_OnTimer(nEventID) { var d = new Date(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //9시 이후에 2분간격으로 종목검색 50종목 이하 if (nEventID == 1 && HHMMSS >= 090100 && MK.length < 종목수) { Main.KillTimer(1); Main.MessageList("종목검색 요청"); Main.ReqPowerSearch("단타A"); } } // 검색종목 관심등록 function Main_OnRcvItemList(aItemList, nCount) { if (nCount > 0) { Main.SendInterests("관심단타A", aItemList, false); Main.MessageList("관심종목 등록"); } } function Main_OnRcvItemList(aItemList, nCount) { Main.MessageList("종목검색 완료 nCount : ",nCount,MK.length); Main.MessageList("종목검색 완료 aItemList : ",aItemList); if (nCount > 0) { ItemList = []; //첫검색일때 if (MK.length == 0) { ItemList = aItemList; } else //두번쨰 이후(차트가 만들어진 종목을 제외하고 새로운 종목만 집계) { for (var i = 0; i < nCount; i++ ) { var add = true; for (var x = 0; x < MK.length; x++ ) { if (aItemList[i] == MK[x].code) { add = false; } } if (add == true) { ItemList.push(aItemList[i]); } } } if (ItemList.length > 0 && MK.length < 종목수) { req = 0; Main.MessageList("종목객체요청 : ",ItemList[req]); Main.ReqMarketData(ItemList[req]); } else { if (MK.length < 종목수) { Main.SetTimer(1, 검색주기*1000); } } } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == ItemList[req]) { Main.MessageList("종목객체생성:",req,MarketData.code); MK.push(MarketData); HH.push(MK[req].current);//최고가 초기값은 현재가 Main.MessageList("매수주문:",MarketData.code); //매도5호가로 매수금액만큼 매수주문 Account1.OrderBuy(MarketData.code,Math.floor(매수금액/MarketData.Ask(5)),MarketData.Ask(5),0); req = req+1; if (req < ItemList.length && MK.length < 종목수) { Main.MessageList("종목객체요청 : ",ItemList[req]); Main.ReqMarketData(ItemList[req]); } else { Main.MessageList("종목객체생성완료"); if (MK.length < 50) { Main.SetTimer(1, 검색주기*1000); } } } } function Main_OnUp*ateMarket(sItemCode, lUp*ateID) { if (lUp*ateID == 20001) { for (var i = 0; i < MK.length; i++) { //업데이트된 종목을 찾아 if (MK[i].code == sItemCode && HH[i] > 0) { //현재가가 저장된 최고가 보다 크면 최고가를 현재가로 변경 if (MK[i].current > HH[i]) { HH[i] = MK[i].current; } //잔고셋팅 Account1.SetBalance(MK[i].code, 0); //최고가는 평단가 대비 20이상 크고 현재가가 평단가 대비 15% 이하로 내려오면 매수5호가로 전량 매도 if (HH[i] >= Account1.Balance.avgUnitCost*1.20 && MK[i].current <= Account1.Balance.avgUnitCost*1.10) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,MK[i].Bid(5),0); //HH[i]는 -1로 저장하여 이후 감시하지 않게 함 HH[i] = -1; Main.MessageList("종목객체삭제 : ",S); var S = Main.RemoveObject(MK[i]); MK.splice(i,1); } } } } }