커뮤니티

문의드립니다.

프로필 이미지
시온사랑
2025-06-09 13:53:39.0
153
글번호 226315
답변완료
9시10분에서20분까지 검색해서, 종목이 나오면 시장가 매수하고, 25분에 미체결이 있으면 취소하고, 30분에 잔고가 있으면 전량 시장가매도하는 건데... 잘 안됩니다... 어디가 문제일까요??? 프로그램이 문제일까...아님 뭐가 문제일까요??? 확인 부탁드립니다... 감사합니다...ㅎㅎㅎ var timer5 = 9; // 9초 간격 var OrderList = []; var MKList = []; var req; function Main_OnStart() { // 1번 타이머로 검색 시작 Main.SetTimer(1, timer5 * 1000); MKList = []; // 99번 타이머는 5초마다 09:30:00 여부 확인 Main.SetTimer(99, 5000); // 55번 타이머는 5초 간격으로 작동 Main.SetTimer(55, 5000); } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours() * 10000 + d.getMinutes() * 100 + d.getSeconds(); if (nEventID == 1 && HHMMSS >= 91000 && HHMMSS <= 92000) { Main.ReqPowerSearch("매수조건"); } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); } if (nEventID == 99 && HHMMSS >= 93000) { Main.KillTimer(99); // 한 번만 실행 var num = Account1.GetTheNumberOfBalances(); if (num > 0) { for (var i = 0; i < num; i++) { Account1.SetBalanceIndex(i); if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1); Main.MessageList(Account1.Balance.code + " 주식을 전량 시장가로 매도합니다."); } } } } if (nEventID == 55 && HHMMSS >= 92500) { Main.KillTimer(55); Main.MessageLog("취소"); num = Account1.GetTheNumberOfUnfills(); // 미체결주문 갯수 for (var i = 0; i < num; i++) { Account1.SetUnfillIndex(i); // i순번의 미체결객체 셋팅 if (Account1.Unfill.count > 0) { // 미체결객체의 수량이 0이상이면 Account1.OrderCancel(Account1.Unfill.orderNum); // 해당주문번호 취소주문 } } } } 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 && !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, 19, 0, 1); Main.MessageList(MarketData.code + " 주식을 19주 시장가로 매수합니다."); } 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; } } return false; }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-06-17 12:33:17.0

안녕하세요 예스스탁입니다. Add = true && !IsStockInAccount(aItemList[a]) 조건문에 같다라는 표현이 =로 처리된 부분이 있었습니다. ==로 변경하시면 됩니다. 수정한 식입니다. var timer5 = 9; // 9초 간격 var OrderList = []; var MKList = []; var req; function Main_OnStart() { // 1번 타이머로 검색 시작 Main.SetTimer(1, timer5 * 1000); MKList = []; // 99번 타이머는 5초마다 09:30:00 여부 확인 Main.SetTimer(99, 5000); // 55번 타이머는 5초 간격으로 작동 Main.SetTimer(55, 5000); } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours() * 10000 + d.getMinutes() * 100 + d.getSeconds(); if (nEventID == 1 && HHMMSS >= 91000 && HHMMSS <= 92000) { Main.MessageList("종목검색"); Main.ReqPowerSearch("매수조건"); } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); } if (nEventID == 99 && HHMMSS >= 93000) { Main.MessageList("전량매도"); Main.KillTimer(99); // 한 번만 실행 var num = Account1.GetTheNumberOfBalances(); if (num > 0) { for (var i = 0; i < num; i++) { Account1.SetBalanceIndex(i); if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1); Main.MessageList(Account1.Balance.code + " 주식을 전량 시장가로 매도합니다."); } } } } if (nEventID == 55 && HHMMSS >= 92500) { Main.KillTimer(55); Main.MessageLog("취소"); num = Account1.GetTheNumberOfUnfills(); // 미체결주문 갯수 for (var i = 0; i < num; i++) { Account1.SetUnfillIndex(i); // i순번의 미체결객체 셋팅 if (Account1.Unfill.count > 0) // 미체결객체의 수량이 0이상이면 { Account1.OrderCancel(Account1.Unfill.orderNum); // 해당주문번호 취소주문 } } } } 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 && !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, 19, 0, 1); Account1.OrderBuy(MarketData.code, 19, MarketData.current, 0); Main.MessageList(MarketData.code + " 주식을 19주 시장가로 매수합니다."); } 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; } } return false; } 즐거운 하루되세요 > 시온사랑 님이 쓴 글입니다. > 제목 : 문의드립니다. > 9시10분에서20분까지 검색해서, 종목이 나오면 시장가 매수하고, 25분에 미체결이 있으면 취소하고, 30분에 잔고가 있으면 전량 시장가매도하는 건데... 잘 안됩니다... 어디가 문제일까요??? 프로그램이 문제일까...아님 뭐가 문제일까요??? 확인 부탁드립니다... 감사합니다...ㅎㅎㅎ var timer5 = 9; // 9초 간격 var OrderList = []; var MKList = []; var req; function Main_OnStart() { // 1번 타이머로 검색 시작 Main.SetTimer(1, timer5 * 1000); MKList = []; // 99번 타이머는 5초마다 09:30:00 여부 확인 Main.SetTimer(99, 5000); // 55번 타이머는 5초 간격으로 작동 Main.SetTimer(55, 5000); } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours() * 10000 + d.getMinutes() * 100 + d.getSeconds(); if (nEventID == 1 && HHMMSS >= 91000 && HHMMSS <= 92000) { Main.ReqPowerSearch("매수조건"); } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); } if (nEventID == 99 && HHMMSS >= 93000) { Main.KillTimer(99); // 한 번만 실행 var num = Account1.GetTheNumberOfBalances(); if (num > 0) { for (var i = 0; i < num; i++) { Account1.SetBalanceIndex(i); if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1); Main.MessageList(Account1.Balance.code + " 주식을 전량 시장가로 매도합니다."); } } } } if (nEventID == 55 && HHMMSS >= 92500) { Main.KillTimer(55); Main.MessageLog("취소"); num = Account1.GetTheNumberOfUnfills(); // 미체결주문 갯수 for (var i = 0; i < num; i++) { Account1.SetUnfillIndex(i); // i순번의 미체결객체 셋팅 if (Account1.Unfill.count > 0) { // 미체결객체의 수량이 0이상이면 Account1.OrderCancel(Account1.Unfill.orderNum); // 해당주문번호 취소주문 } } } } 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 && !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, 19, 0, 1); Main.MessageList(MarketData.code + " 주식을 19주 시장가로 매수합니다."); } 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; } } return false; }