커뮤니티

예스스팟 자동주문

프로필 이미지
ksks
2024-08-08 08:16:02.0
715
글번호 226071
답변완료
아래는 현재 제가 쓰고있는 예스스팟입니다. 현재는 같은종목은 매수치 않게 되어 있는데 이것을 계좌에 있더라도 중복매수되게 고치고 싶습니다. 수정부탁드립니다. ====================================================================== var timer5 = 2; //5초 var 매수금 = 100000; var OrderList = []; var MKList = []; var req; function Main_OnStart() { //1번 타이머, 1초 Main.SetTimer(1, timer5*1000); // 오늘 매수한 종목 관리 배열 초기화 MKList = []; Main.MessageList("START"); } 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 > 090000 && HHMMSS < 150000) { //종목검색 수행 Main.ReqPowerSearch("60분봉 급소2") } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvItemList(aItemList, nCount) { Main.KillTimer(1); Main.MessageList("Main_OnRcvItemList:",nCount); 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 && !IsStockInAccount(aItemList[a])) { OrderList.push(aItemList[a]); } } } } if (OrderList.length == 0) { Main.SetTimer(1, timer5*1000); } else { req = 0; Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == OrderList[req]) { MKList.push(MarketData); // 계좌에 같은 종목이 있는지 확인 if (!IsStockInAccount(MarketData.code)) { // 계좌에 없는 경우에만 매수 //Account1.OrderBuy(MarketData.code,1,0,1); Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(3)),0,1); // Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),MarketData.Ask(1),0); //지정가로 주문하고자 하시면 주문함수 내용을 위와 같이 변경하시면 됩니다. Main.MessageList(MarketData.code + " 주식을 매수합니다."); } else { Main.MessageList( MarketData.code + " 주식은 이미 계좌에 있으므로 매수하지 않습니다."); } req = req+1; if (req < OrderList.length) { var aa = Main.ReqMarketData(OrderList[req]); if (aa == -1) { Main.SetTimer(2, 15000); } } else { Main.SetTimer(1, timer5*1000); } } } function IsStockInAccount(stockCode) { // 계좌에 해당 종목이 있는지 확인하는 함수 var numberOfBalances = Account1.GetTheNumberOfBalances(); for (var i = 0; i < numberOfBalances; i++) { Account1.SetBalance(i); if (stockCode == Account1.Balance.code) { return true; // 계좌에 같은 종목이 있으면 true 반환 } } return false; // 계좌에 같은 종목이 없으면 false 반환 }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2024-08-22 15:14:37.0

> ksks 님이 쓴 글입니다. > 제목 : 예스스팟 자동주문 > 아래는 현재 제가 쓰고있는 예스스팟입니다. 현재는 같은종목은 매수치 않게 되어 있는데 이것을 계좌에 있더라도 중복매수되게 고치고 싶습니다. 수정부탁드립니다. ====================================================================== var timer5 = 2; //5초 var 매수금 = 100000; var OrderList = []; var MKList = []; var req; function Main_OnStart() { //1번 타이머, 1초 Main.SetTimer(1, timer5*1000); // 오늘 매수한 종목 관리 배열 초기화 MKList = []; Main.MessageList("START"); } 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 > 090000 && HHMMSS < 150000) { //종목검색 수행 Main.ReqPowerSearch("60분봉 급소2") } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvItemList(aItemList, nCount) { Main.KillTimer(1); Main.MessageList("Main_OnRcvItemList:",nCount); 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 && !IsStockInAccount(aItemList[a])) { OrderList.push(aItemList[a]); } } } } if (OrderList.length == 0) { Main.SetTimer(1, timer5*1000); } else { req = 0; Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == OrderList[req]) { MKList.push(MarketData); // 계좌에 같은 종목이 있는지 확인 if (!IsStockInAccount(MarketData.code)) { // 계좌에 없는 경우에만 매수 //Account1.OrderBuy(MarketData.code,1,0,1); Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(3)),0,1); // Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),MarketData.Ask(1),0); //지정가로 주문하고자 하시면 주문함수 내용을 위와 같이 변경하시면 됩니다. Main.MessageList(MarketData.code + " 주식을 매수합니다."); } else { Main.MessageList( MarketData.code + " 주식은 이미 계좌에 있으므로 매수하지 않습니다."); } req = req+1; if (req < OrderList.length) { var aa = Main.ReqMarketData(OrderList[req]); if (aa == -1) { Main.SetTimer(2, 15000); } } else { Main.SetTimer(1, timer5*1000); } } } function IsStockInAccount(stockCode) { // 계좌에 해당 종목이 있는지 확인하는 함수 var numberOfBalances = Account1.GetTheNumberOfBalances(); for (var i = 0; i < numberOfBalances; i++) { Account1.SetBalance(i); if (stockCode == Account1.Balance.code) { return true; // 계좌에 같은 종목이 있으면 true 반환 } } return false; // 계좌에 같은 종목이 없으면 false 반환 }