커뮤니티

예스스팟 자동매수 시 주문가격 0원 증상 문의 드립니다.

프로필 이미지
deeparc
2025-04-03 13:48:06
330
글번호 189827
답변완료

첨부 이미지

감사합니다. 추가적으로 질문을 드리고 싶습니다. 제가 서적을 참조해서 작성해놓은 예스스팟식으로 자동 매수 매도 주문을 해놓으니까 캡쳐된 사진처럼 주문가격이 '0원'인데 혹시 이게 왜 이럴까요?ㅠㅠ 아래 코드 보시고 검토가 가능하실지 문의 드립니다. 시험 매매 돌려놓은 것입니다. 저는 일단 1주씩 '매수조건'으로 검색이 되는 즉시 시장가 매수 이후 '매도조건'일 경우 자동 매도가 되게 구현을 하고 싶습니다. 초보적인 질문을 계속 드려서 죄송합니다. var timer5 = 2; // 2초 var 매수금 = 100000; var OrderList = []; var MKList = []; var req; var 종목제한수 = 10; var Search; function Main_OnStart() { Main.SetTimer(1, timer5 * 1000); MKList = []; Search = 1; } 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 < 151800) { Main.MessageList(Search); if (Search == 1) { Main.ReqPowerSearch("매수조건"); } else { Main.ReqPowerSearch("매도조건"); } Main.KillTimer(1); } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); Main.KillTimer(2); } } function Main_OnRcvItemList(aItemList, nCount) { Main.MessageList(nCount); OrderList = []; if (Search == 1) { if (nCount >= 1) { if (MKList.length == 0) { OrderList = aItemList.slice(0, 종목제한수); } 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 >= 종목제한수) { break; } } } } if (OrderList.length == 0) { Main.SetTimer(1, timer5 * 1000); } else { req = 0; Main.ReqMarketData(OrderList[req]); } } Search = -1; } else { if (nCount >= 1) { for (var a = 0; a < aItemList.Length; a++) { for (var b = 0; b < MKList.length; b++) { if (aItemList[a] == MKList[b].code) { Account1.SetBalance(aItemList[a], 0); if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.countc,0,1); } } } } } Main.SetTimer(1, timer5 * 1000); Search = 1; } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == OrderList[req]) { MKList.push(MarketData); if (!IsStockInAccount(MarketData.code)) { Account1.OrderBuy(MarketData.code, 1, 0, 1); 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; } } return false; }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-04-03 14:15:50

안녕하세요 예스스탁입니다. 1 시장가 주문시 주문가격이 0으로 표시되는 것은 정상입니다. 시장가는 주문가격을 지정하는 주문유형이 아니므로 주문가격은 0으로 표시되고 체결이 되면 체결가격란에 가격이 적혀지게 됩니다. 2 모의투자는 시장가 주문을 지원하지 않으므로 모의투자에 테스트 하실 경우 지정가로 로직 점검하시고 실제 운영시 시장가로 변경해 사용하시면 됩니다. 즐거운 하루되세요 > deeparc 님이 쓴 글입니다. > 제목 : 예스스팟 자동매수 시 주문가격 0원 증상 문의 드립니다. > 감사합니다. 추가적으로 질문을 드리고 싶습니다. 제가 서적을 참조해서 작성해놓은 예스스팟식으로 자동 매수 매도 주문을 해놓으니까 캡쳐된 사진처럼 주문가격이 '0원'인데 혹시 이게 왜 이럴까요?ㅠㅠ 아래 코드 보시고 검토가 가능하실지 문의 드립니다. 시험 매매 돌려놓은 것입니다. 저는 일단 1주씩 '매수조건'으로 검색이 되는 즉시 시장가 매수 이후 '매도조건'일 경우 자동 매도가 되게 구현을 하고 싶습니다. 초보적인 질문을 계속 드려서 죄송합니다. var timer5 = 2; // 2초 var 매수금 = 100000; var OrderList = []; var MKList = []; var req; var 종목제한수 = 10; var Search; function Main_OnStart() { Main.SetTimer(1, timer5 * 1000); MKList = []; Search = 1; } 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 < 151800) { Main.MessageList(Search); if (Search == 1) { Main.ReqPowerSearch("매수조건"); } else { Main.ReqPowerSearch("매도조건"); } Main.KillTimer(1); } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); Main.KillTimer(2); } } function Main_OnRcvItemList(aItemList, nCount) { Main.MessageList(nCount); OrderList = []; if (Search == 1) { if (nCount >= 1) { if (MKList.length == 0) { OrderList = aItemList.slice(0, 종목제한수); } 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 >= 종목제한수) { break; } } } } if (OrderList.length == 0) { Main.SetTimer(1, timer5 * 1000); } else { req = 0; Main.ReqMarketData(OrderList[req]); } } Search = -1; } else { if (nCount >= 1) { for (var a = 0; a < aItemList.Length; a++) { for (var b = 0; b < MKList.length; b++) { if (aItemList[a] == MKList[b].code) { Account1.SetBalance(aItemList[a], 0); if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.countc,0,1); } } } } } Main.SetTimer(1, timer5 * 1000); Search = 1; } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == OrderList[req]) { MKList.push(MarketData); if (!IsStockInAccount(MarketData.code)) { Account1.OrderBuy(MarketData.code, 1, 0, 1); 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; } } return false; }