커뮤니티

문의드립니다

프로필 이미지
동동스나
2025-07-17 21:54:18.0
134
글번호 226342
답변완료
항상 노고에 감사드립니다 스팟실행시 1.프로그램 실행시 처음에 잔고를 불러와 각각의 종목들이 7%이상인 종목들만 시장가 매도하기를 구하고싶습니다 2.미체결에 같은 종목이있으면 중복으로 매수하지않게하고싶습니다. (이미 같은 종목이라는 에러가 나온후 그대로 스탑일때가 종종있습니다) 3.당일 매수한종목과 매도한 종목은 당일 재매수 하지않게 만들고싶습니다 4.종목코드를 불러와서 종목명으로 변환해주는 함수를 알고싶습니다 (숫자코드가 아니고 한글의 종목명을 활용하고 싶습니다) 5.마지막으로 혹시 대체거래소의 종목은 필터링할수있는 방법은 있는지 만약 있다면 추가하고 싶습니다. var timerInterval = 5; // 5초 타이머 var 매수금 = 1000000; var MKList = []; // 종목코드 및 가격을 담는 배열 [{code, price}] var MK = []; var req; function Main_OnStart() { var d = new Date(); HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); Main.MessageList(HHMMSS,"|Start"); Main.SetTimer(1, timerInterval*1000); } function Main_OnTimer(nEventID) { var d = new Date(); HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); if (nEventID == 1 ) { Main.MessageList(HHMMSS,"|종목검색요청"); Main.ReqPowerSearch("www"); } if (nEventID == 2) { Main.KillTimer(2); Main.MessageList(HHMMSS,"|종목객체재요청"); Main.ReqMarketData(MKList[req].code); } } function Main_OnRcvItemList(aItemList, nCount, aValues) { var d = new Date(); HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); Main.KillTimer(1); Main.MessageList(HHMMSS,"|종목검색완료|검색된종목수:", nCount); MKList = []; if (nCount > 0) { for (var i = 0; i < nCount; i++) { var code = aItemList[i]; var price = parseFloat(aValues[i]); var isExist = false; for (var j = 0; j < MK.length; j++) { if (code == MK[j].code) isExist = true; } if (!isExist) { MKList.push({code: code, price: price}); Main.MessageList(HHMMSS, "|대상종목:", code, "|기준가격:", price); } } } if (MKList.length == 0) { Main.SetTimer(1, timerInterval*1000); } else { req = 0; Main.ReqMarketData(MKList[req].code); } } function Main_OnRcvMarketData(MarketData) { var d = new Date(); var HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); if (MarketData.code == MKList[req].code) { var entryPrice = MKList[req].price; Account1.OrderBuy(MarketData.code, 1, entryPrice, 0); Main.MessageList(HHMMSS,"|매수주문:", MarketData.code, "|가격:", entryPrice); MK.push(MarketData); req = req + 1; if (req < MKList.length) { var S = Main.ReqMarketData(MKList[req].code); if (S == -1) { Main.MessageList(HHMMSS,"|요청제한 15초대기"); Main.SetTimer(2, 15000); } } else { Main.MessageList(HHMMSS,"|모든종목처리완료"); Main.SetTimer(1, timerInterval*1000); } } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-07-18 16:37:01.0

안녕하세요 예스스탁입니다. 4번,5번은 가능하지 않습니다. 종목코드를 종목명으로 변환해 주는 함수가 없습니다. 대체거래소 거래 종목을 별도로 구별하지 못합니다. 스팟 시작시 보유 종목중 7%이상 수익인 종목은 시장가 매도를 하고 한번 매도되거나 매수한 종목이거나 검색시 미체결에 있는 종목은 매수하지 않게 수정해 드립니다. var timerInterval = 5; // 5초 타이머 var 매수금 = 1000000; var AllList = []; var MKList = []; // 종목코드 및 가격을 담는 배열 [{code, price}] var MK = []; var req; function Main_OnStart() { var d = new Date(); HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); //시작시 보유종목 중 7%이상 수익인 종목은 시장가 매도 var num = Account1.GetTheNumberOfBalances(); if (num > 0) { for (var i = 0; i < num; i++) { Account1.SetBalance(i); if (Account1.Balance.current >= Account1.Balance.avgUnitCost*1.07) { AllList.push(Account1.Balance.code); Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); } } } Main.MessageList(HHMMSS,"|Start"); Main.SetTimer(1, timerInterval*1000); } function Main_OnTimer(nEventID) { var d = new Date(); HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); if (nEventID == 1 ) { Main.MessageList(HHMMSS,"|종목검색요청"); Main.ReqPowerSearch("www"); } if (nEventID == 2) { Main.KillTimer(2); Main.MessageList(HHMMSS,"|종목객체재요청"); Main.ReqMarketData(MKList[req].code); } } function Main_OnRcvItemList(aItemList, nCount, aValues) { var d = new Date(); HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); Main.KillTimer(1); Main.MessageList(HHMMSS,"|종목검색완료|검색된종목수:", nCount); MKList = []; if (nCount > 0) { for (var i = 0; i < nCount; i++) { var code = aItemList[i]; var price = parseFloat(aValues[i]); var isExist = false; for (var j = 0; j < AllList.length; j++) { if (code == AllList[j]) { isExist = true; } } var unfnum = Account1.GetTheNumberOfUnfills(); if (isExist == false && unfnum > 0) { for (var x = 0; x < unfnum; x++) { Account1.SetUnfill(x) if (Account1.Unfill.count > 0 && Account1.Unfill.code == code) { isExist = true; } } } if (isExist == false) { MKList.push({code: code, price: price}); AllList.push(code); Main.MessageList(HHMMSS, "|대상종목:", code, "|기준가격:", price); } } } if (MKList.length == 0) { Main.SetTimer(1, timerInterval*1000); } else { req = 0; Main.ReqMarketData(MKList[req].code); } } function Main_OnRcvMarketData(MarketData) { var d = new Date(); var HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); if (MarketData.code == MKList[req].code) { var entryPrice = MKList[req].price; Account1.OrderBuy(MarketData.code, 1, entryPrice, 0); Main.MessageList(HHMMSS,"|매수주문:", MarketData.code, "|가격:", entryPrice); MK.push(MarketData); req = req + 1; if (req < MKList.length) { var S = Main.ReqMarketData(MKList[req].code); if (S == -1) { Main.MessageList(HHMMSS,"|요청제한 15초대기"); Main.SetTimer(2, 15000); } } else { Main.MessageList(HHMMSS,"|모든종목처리완료"); Main.SetTimer(1, timerInterval*1000); } } } 즐거운 하루되세요 > 동동스나 님이 쓴 글입니다. > 제목 : 문의드립니다 > 항상 노고에 감사드립니다 스팟실행시 1.프로그램 실행시 처음에 잔고를 불러와 각각의 종목들이 7%이상인 종목들만 시장가 매도하기를 구하고싶습니다 2.미체결에 같은 종목이있으면 중복으로 매수하지않게하고싶습니다. (이미 같은 종목이라는 에러가 나온후 그대로 스탑일때가 종종있습니다) 3.당일 매수한종목과 매도한 종목은 당일 재매수 하지않게 만들고싶습니다 4.종목코드를 불러와서 종목명으로 변환해주는 함수를 알고싶습니다 (숫자코드가 아니고 한글의 종목명을 활용하고 싶습니다) 5.마지막으로 혹시 대체거래소의 종목은 필터링할수있는 방법은 있는지 만약 있다면 추가하고 싶습니다. var timerInterval = 5; // 5초 타이머 var 매수금 = 1000000; var MKList = []; // 종목코드 및 가격을 담는 배열 [{code, price}] var MK = []; var req; function Main_OnStart() { var d = new Date(); HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); Main.MessageList(HHMMSS,"|Start"); Main.SetTimer(1, timerInterval*1000); } function Main_OnTimer(nEventID) { var d = new Date(); HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); if (nEventID == 1 ) { Main.MessageList(HHMMSS,"|종목검색요청"); Main.ReqPowerSearch("www"); } if (nEventID == 2) { Main.KillTimer(2); Main.MessageList(HHMMSS,"|종목객체재요청"); Main.ReqMarketData(MKList[req].code); } } function Main_OnRcvItemList(aItemList, nCount, aValues) { var d = new Date(); HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); Main.KillTimer(1); Main.MessageList(HHMMSS,"|종목검색완료|검색된종목수:", nCount); MKList = []; if (nCount > 0) { for (var i = 0; i < nCount; i++) { var code = aItemList[i]; var price = parseFloat(aValues[i]); var isExist = false; for (var j = 0; j < MK.length; j++) { if (code == MK[j].code) isExist = true; } if (!isExist) { MKList.push({code: code, price: price}); Main.MessageList(HHMMSS, "|대상종목:", code, "|기준가격:", price); } } } if (MKList.length == 0) { Main.SetTimer(1, timerInterval*1000); } else { req = 0; Main.ReqMarketData(MKList[req].code); } } function Main_OnRcvMarketData(MarketData) { var d = new Date(); var HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); if (MarketData.code == MKList[req].code) { var entryPrice = MKList[req].price; Account1.OrderBuy(MarketData.code, 1, entryPrice, 0); Main.MessageList(HHMMSS,"|매수주문:", MarketData.code, "|가격:", entryPrice); MK.push(MarketData); req = req + 1; if (req < MKList.length) { var S = Main.ReqMarketData(MKList[req].code); if (S == -1) { Main.MessageList(HHMMSS,"|요청제한 15초대기"); Main.SetTimer(2, 15000); } } else { Main.MessageList(HHMMSS,"|모든종목처리완료"); Main.SetTimer(1, timerInterval*1000); } } }