커뮤니티

보완 부탁드립니다...^^

프로필 이미지
비밀통로
2024-04-16 11:53:43.0
562
글번호 225987
답변완료
다음 조건에 보유종목 수를 원하는 대로 수정하여 사용 할 수 있게 보완하여 주십시요? 예를 들어 10개로 제한할 경우, 10개 종목이 매수되어 잔고로 남아 있을 경우에는 더 이상 매수되지 않게 하고, 만약 2종목이 매도되어 8종목 남아 있다면, 2종목이 추가로 매수되어 10종목을 유지할 수 있게 할 수 있을까요? 가능하다면 보완 부탁드립니다. 감사합니다... -다음- var 타이머간격 = 5; // 5초 var 매수금 = 100000 var OrderList = []; var MKList = []; var req; function Main_OnStart() { // 1번 타이머, 5초 Main.SetTimer(1, 타이머간격*1000); } function Main_OnTimer(nEventID) { var d = new Date(); YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && HHMMSS >= 90000 && HHMMSS < 151500) { // 종목검색 실행 Main.ReqPowerSearch("00. 예스스팟_Rsi 다이버전스"); } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvItemList(aItemList, nCount) { Main.KillTimer(1); OrderList = []; if (nCount >= 1) { if (MKList.length == 0) { OrderList = aItemList; } else { for (var a = 0; a < nCount; a++) { var Add = true; for (var b = 0; b < MKList.length; b++) { if (aItemList[a] == MKList[b].code) { Add = false; } } if (Add == true) { OrderList.push(aItemList[a]); } } } } if (OrderList.length == 0) { Main.SetTimer(1, 타이머간격*1000); } else { req = 0; Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == OrderList[req]) { MKList.push(MarketData); Account1.OrderBuy(MarketData.code,1,0,1); // 1주를 시장가 주문 // Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),0,1); // 10만원 시장가 주문 // Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),MarketData.Ask(1),0); // 10만원 지정가 주문 // 지정가로 주문하고자 하시면 주문함수 내용을 위와 같이 변경하시면 됩니다. req = req+1; if (req < OrderList.length) { var aa = Main.ReqMarketData(OrderList[req]); if (aa == -1) { Main.SetTimer(2, 15000); } } else { Main.SetTimer(1, 타이머간격*1000); } } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2024-04-30 17:16:09.0

안녕하세요 예스스탁입니다. 1 아래식 참고하시기 바랍니다. 해당수식에서 종목검색으로 검색된 종목에 대해 최대보유종목수까지만 매수하게 수정해 드립니다. 매수한 종목이 매도가 되어 최대보유종목수 이하이면 추가로 검색후 매수하게 됩니다. 영문 업데이트가 게시판 금칙어라 수식안에 Up*date와 같이 중간에 *이 삽입되어 있습니다. 삭제하시고 사용하셔야 합니다. 2 var 최대보유종목수 = 10; var 타이머간격 = 5; // 5초 var 매수금 = 100000 var OrderList = []; var BuyList = []; var MKList = []; var req; function Main_OnStart() { // 1번 타이머, 5초 Main.SetTimer(1, 타이머간격*1000); } function Main_OnTimer(nEventID) { var d = new Date(); YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && HHMMSS >= 90000 && HHMMSS < 151500) { // 종목검색 실행 if (MKList.length < 최대보유종목수) { Main.ReqPowerSearch("00. 예스스팟_Rsi 다이버전스"); } else { Main.SetTimer(1, 타이머간격*1000); } } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvItemList(aItemList, nCount) { Main.KillTimer(1); OrderList = []; if (nCount >= 1) { if (BuyList.length == 0) { OrderList = aItemList; } else { for (var a = 0; a < nCount; a++) { var Add = true; for (var b = 0; b < BuyList.length; b++) { if (aItemList[a] == BuyList[b]) { Add = false; } } if (Add == true) { OrderList.push(aItemList[a]); } } } } if (OrderList.length == 0) { Main.SetTimer(1, 타이머간격*1000); } else { req = 0; Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == OrderList[req]) { MKList.push(MarketData); BuyList.push(MarketData.code); Account1.OrderBuy(MarketData.code,1,0,1); // 1주를 시장가 주문 // Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),0,1); // 10만원 시장가 주문 // Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),MarketData.Ask(1),0); // 10만원 지정가 주문 // 지정가로 주문하고자 하시면 주문함수 내용을 위와 같이 변경하시면 됩니다. req = req+1; if (req < OrderList.length && MKList.length < 최대보유종목수) { var aa = Main.ReqMarketData(OrderList[req]); if (aa == -1) { Main.SetTimer(2, 15000); } } else { Main.SetTimer(1, 타이머간격*1000); } } } //계좌이벤트 function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID)//*삭제 { //종목삭제(청산) if (MKList.length > 0 && sAccntNum == Account1.number && lUp*dateID == 30002)//*삭제 { for (var i = 0; i < MKList.length; i++) { if (MKList[i].code == sItemCode) { Main.RemoveObject(MKList[i]) MKList.splice(i,1); } } } } 즐거운 하루되세요 > 비밀통로 님이 쓴 글입니다. > 제목 : 보완 부탁드립니다...^^ > 다음 조건에 보유종목 수를 원하는 대로 수정하여 사용 할 수 있게 보완하여 주십시요? 예를 들어 10개로 제한할 경우, 10개 종목이 매수되어 잔고로 남아 있을 경우에는 더 이상 매수되지 않게 하고, 만약 2종목이 매도되어 8종목 남아 있다면, 2종목이 추가로 매수되어 10종목을 유지할 수 있게 할 수 있을까요? 가능하다면 보완 부탁드립니다. 감사합니다... -다음- var 타이머간격 = 5; // 5초 var 매수금 = 100000 var OrderList = []; var MKList = []; var req; function Main_OnStart() { // 1번 타이머, 5초 Main.SetTimer(1, 타이머간격*1000); } function Main_OnTimer(nEventID) { var d = new Date(); YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && HHMMSS >= 90000 && HHMMSS < 151500) { // 종목검색 실행 Main.ReqPowerSearch("00. 예스스팟_Rsi 다이버전스"); } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvItemList(aItemList, nCount) { Main.KillTimer(1); OrderList = []; if (nCount >= 1) { if (MKList.length == 0) { OrderList = aItemList; } else { for (var a = 0; a < nCount; a++) { var Add = true; for (var b = 0; b < MKList.length; b++) { if (aItemList[a] == MKList[b].code) { Add = false; } } if (Add == true) { OrderList.push(aItemList[a]); } } } } if (OrderList.length == 0) { Main.SetTimer(1, 타이머간격*1000); } else { req = 0; Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == OrderList[req]) { MKList.push(MarketData); Account1.OrderBuy(MarketData.code,1,0,1); // 1주를 시장가 주문 // Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),0,1); // 10만원 시장가 주문 // Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),MarketData.Ask(1),0); // 10만원 지정가 주문 // 지정가로 주문하고자 하시면 주문함수 내용을 위와 같이 변경하시면 됩니다. req = req+1; if (req < OrderList.length) { var aa = Main.ReqMarketData(OrderList[req]); if (aa == -1) { Main.SetTimer(2, 15000); } } else { Main.SetTimer(1, 타이머간격*1000); } } }