커뮤니티

문의 합니다...

프로필 이미지
서민순
2026-01-02 19:13:37
59
글번호 229542
답변완료

26년 병오년 새해 복 많이 받으세요....^^*

한가지 문의 사항이 있어서 질의 합니다..

예스스팟에서 종목이 검색되어서 자동매매가 이루어지는데, 종목이 검출되면 전략실행차트와 종목이 연동이 되는 방법이 었는지요?

답변 1
프로필 이미지

예스스탁 예스스탁 답변

2026-01-13 10:59:41

안녕하세요 예스스탁입니다. Main.ReqChartEx(ReqChartItem, SystemInfo, IndicatorInfo, ReqRefItem) 스팟의 함수 중에 차트를 생성하는 함수가 있습니다. 종목이 검색되면 검색된 종목의 차트를 생성해 사용하시면 됩니다. 아래 수식 참고하시기 바랍니다. 종목검색 후 검색된 종목에 대해 종목객체를 생성하고 차트객체에 시스템을 적용후 생성해서 차트에서 신호가 발생하면 주문이 집행되는 수식입니다. var MKList = []; //종목검색 후 종목객체 요청할 종목의 종목코드를 리스트할 배열변수 var MK = []; //종목객체를 저장할 배열변수 var CT = []; //차트객체를 저장할 배열변수 var req; //종목객체 요청 횟수를 저장할 변수 var 최대매수종목수 = 20; //매수할 최대 종목수 var 매수금 = 1000000; //종목당 매수금 //스팟 시작 function Main_OnStart() { //1번 타이머, 60초 Main.SetTimer(1, 5000); } //타이머 동작 function Main_OnTimer(nEventID) { //자바스크립트 날짜시간 객체에서 값을 가져와 HHMMSS형식으로 시간 계산 var d = new Date(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //1번 타이머 동작하고 9시~15시 사이이면 if (nEventID == 1 && HHMMSS >= 90000 && HHMMSS <= 150000) { //타이머 종료 Main.KillTimer(1); //지정한 이름의 사용자조건검색을 실행 Main.ReqPowerSearch("test"); } 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++) { Account1.SetBalance(aItemList[a],0); if (Account1.Balance.count == 0 && MKList.length < 최대매수종목수) { MKList.push(aItemList[a]); } } } else { //1종목이상 검색이 된 이후에는 if (MK.length < 최대매수종목수) { for (var a = 0; a < nCount; a++) { //종목객체가 만들어진 종목은 제외 var Add = true; for (var b = 0; b < MK.length; b++) { if (aItemList[a] == MK[b].code) { Add = false; } } //계좌 잔고에 보유중인 종목 제외 Account1.SetBalance(aItemList[a],0); if (Account1.Balance.count > 0) Add = false; //종목객체로 만들어 지지 않았고 잔고에 없는 종목으로 선정하여 //요청리스트에 저장 if (Add == true && MKList.length < 최대매수종목수-MK.length) { MKList.push(aItemList[a]); } } } } Main.MessageList("주문할 종목수:",MKList.length); //요청할 종목이 없고 if (MKList.length == 0) { //종목객체가 최대매수종목수 미만이면 1번 타이머 재셋팅 if (MK.length < 최대매수종목수) { //1번 타이머, 60초 Main.SetTimer(1, 6000); } else { //종목객체가 최대매수종목수와 같으면 메세지 출력하고 종료 Main.MessageList("최대종목수 도달 검색종료"); } } 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); //기본종목셋팅(종목코드지정, 5분 5000개, 갭보정안함, 수정주가처리 안함) var ChartSet = new ReqChartItem(MKList[req],1,CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //시스템 셋팅(시스템명 지정) var SysSet = new SystemInfo("#test"); //지정한 차트셋팅과 시스템 셋티응로 차트 요청 Main.ReqChartEx(ChartSet, SysSet); } } function Main_OnRcvChartEx(ChartEx) { if (ChartEx.GetCode(1) == MKList[req]) { CT.push(ChartEx); //요청횟수 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,"종목객체생성끝"); //최대매수종목수에 도달하지 않았으면 종목검색을 위해 타이머 재셋팅 if (MK.length < 최대매수종목수) { Main.SetTimer(1,6000); } else { //최대매수종목수를 채웠으면 검색 종료 Main.MessageList("최대종목수 도달 검색종료"); } } } } function Main_OnRiseSignal(ChartEx, Signal) { for (var i = 0; i < CT.length; i++) { if (ChartEx.GetCode(1) == CT[i].GetCode(1)) { if (Signal.signalKind == 1) { //매수주문가격 var OP = MK[i].Ask(1); //수량 var OV = Math.floor(매수금/OP); Account1.OrderBuy(MK[i].code,OV,OP,0); Main.MessageList(req,"매수주문",MK[i].code,OV,OP); } if (Signal.signalKind == 2) { Account1.SetBalance(MK[i].code,0); if (Account1.Balance.count > 0) { //매수주문가격 var XP = MK[i].Bid(1); //수량 var XV = Account1.Balance.count; Account1.OrderSell(MK[i].code,XV,XP,0); Main.MessageList("매도주문",MK[i].code,XV,XP); } } } } } 즐거운 하루 되세요