커뮤니티

관심종목만 검색

프로필 이미지
아미고
2026-07-01 11:19:02
137
글번호 232637
답변완료

장전 08:50에 관심그룹을 한번 검색하고 그룹안에 있는 종목만 예스랭귀지에서 만들어 놓은 조건에 맞으면 매수하는 조건식 부탁드립니다.


감사합니다.

답변 1
프로필 이미지

예스스탁 예스스탁 답변

2026-07-09 15:59:36

안녕하세요 예스스탁입니다. 아래식 참고하시기 바랍니다. 검색된 종목이 지정한 관심그룹내에 있는 종목만을 매수하는 식입니다. var iName = "관심그룹명"; var iCheck, iList = []; var userSearchName = "사용자조건검색명"; var 검색주기 = 10; //10초 var MKList = []; //종목검색 후 종목객체 요청할 종목의 종목코드를 리스트할 배열변수 var MK = []; //종목객체를 저장할 배열변수 var req; //종목객체 요청 횟수를 저장할 변수 var 매수금 = 1000000; //종목당 매수금 //스팟 시작 function Main_OnStart() { //1번 타이머, 60초 Main.SetTimer(1, 검색주기*1000); iCheck = false; } //타이머 동작 function Main_OnTimer(nEventID) { //자바스크립트 날짜시간 객체에서 값을 가져와 HHMMSS형식으로 시간 계산 var d = new Date(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && iCheck == false && HHMMSS >= 85000) { var num = Main.GetItemCountOfInterest(iName); if (num > 0) { iCheck = true; for (var i = 0; i < num; i++) { iList.push(Main.GetItemCodeInInterest(iName, i)); } Main.MessageList("iList",iList) } else { Main.MessageList("지정한 관심그룹이 없거나 포함된 종목이 없습니다.") } } //1번 타이머 동작하고 9시~15시 사이이면 if (nEventID == 1 && iCheck == true && HHMMSS >= 90000 && HHMMSS <= 170000) { //타이머 종료 Main.KillTimer(1); //지정한 이름의 사용자조건검색을 실행 Main.ReqPowerSearch(userSearchName); } if (nEventID == 2) { Main.KillTimer(2); //재요청 Main.ReqMarketData(MKList[req]); } } //종목검색완료 function Main_OnRcvItemList(aItemList, nCount, aValues) { Main.MessageList("검색된종목수",nCount); //검색된 종목이 한종목 이상 if (nCount >= 1) { //종목객체 요청리스트를 초기화 MKList = []; //처음 종목이 검색이 될 떄는 if (MK.length == 0) { //검색된 종목 중 잔고에 없는 종목으로 최대20개만 MKList에 저장 for (var a = 0; a < nCount; a++) { var add = false; for (var b = 0; b < iList.length; b++) { if (aItemList[a] == iList[b]) { add = true; } } Account1.SetBalance(aItemList[a],0); if (add == true && Account1.Balance.count == 0) { MKList.push(aItemList[a]); } } } else { for (var a = 0; a < nCount; a++) { var add = false; for (var b = 0; b < iList.length; b++) { if (aItemList[a] == iList[b]) { add = true; } } for (var c = 0; c < MK.length; c++) { if (aItemList[c] == MK[c].code) { Add = false; } } //계좌 잔고에 보유중인 종목 제외 Account1.SetBalance(aItemList[a],0); if (Account1.Balance.count > 0) Add = false; //요청리스트에 저장 if (Add == true) { MKList.push(aItemList[a]); } } } Main.MessageList("주문할 종목수:",MKList.length); //요청할 종목이 없고 if (MKList.length == 0) { Main.SetTimer(1, 검색주기*1000); } else //요청할 종목이 있으면 { //요청리스트의 첫종목 부터 종목객체 요청(배열이므로 종목코드가 0번방 부터 존재) req = 0; Main.MessageList(req,"종목객체요청",MKList[req]); Main.ReqMarketData(MKList[req]); } } } //요청한 종목객체가 만들어 지먼 function Main_OnRcvMarketData(MarketData) { //직전 요청한 종목이 맞는지 확인후에 if (MarketData.code == MKList[req]) { Main.MessageList(req,"종목객체생성",MarketData.code); //종목객체는 MK에 추가하고 MK.push(MarketData); //매수주문가격 var OP = MarketData.Ask(1); //수량 var OV = Math.floor(매수금/OP); //지정한 가격, 지정한 수량으로 매수주문 Account1.OrderBuy(MarketData.code,OV,OP,0); Main.MessageList(req,"매수주문",MarketData.code,OV,OP); //요청횟수 1증가 req = req+1; //요청횟수가 요청할 종목갯수보다 작으면 다음 종목객체 요청 if (req < MKList.length) { Main.MessageList(req,"종목객체요청",MKList[req]); var XX = Main.ReqMarketData(MKList[req]); //종목객체 생성제한 if (XX == -1) { //2번 타이머 15초 Main.SetTimer(2,15000); } } else //요청횟수가 요청할 종목갯수에 도달했으면 종목객체 생성 종료 { Main.MessageList(req,"종목객체생성끝"); Main.SetTimer(1,검색주기*1000); } } } 즐거운 하루되세요