커뮤니티

스팟 공부중 문의 드립니다.

프로필 이미지
느와르
2020-02-26 09:52:12
3858
글번호 225156
답변완료
예스스팟에서 A. 장시작후 사용자 종목검색"gumsek" B. 검색된 종목중 전일 종가 대비 -5% ~ +10% 사이의 종목중에서 전일대비 오름차순으로 10개만 선별한다. C. 계좌에 보유종목과 선별 10개의 종목을 비교하여 중첩(미보유)없는 종목을 확장차트 1분봉 800바 차트에(거래없는구간 봉그리기 체크) 시스템식"lotto"를 적용한다. C. 위 과정을 14시까지, 4분 간격으로 반복하고, B에서 미검색된 종목과 계좌를 비교하여 신규 종목(미보유)만 확장차트 생성 및 시스템을 추가적으로 적용한다. 총 시스템적용은 20개로 제한 참고로 가능하다면 종목검색중, 확장차트 적용중, 당일 검색되었던 종목들 리스트(중첩은 제외) 표기가 되었으면 합니다. 그럼 좋은 하루 되세요~ Ps. 답변 대기중에 공부하면서 질문을 수정하였습니다. 혹 기존 질문과 차이가 있을수 있으니 확인 요망 드립니다.
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2020-03-20 16:53:27

안녕하세요 예스스탁입니다. 답변이 늦어 죄송합니다. 1 스팟에서 차트의 거래없는 구간 봉그리기 설정은 가능하지 않습니다. 2 스팟 수식답변은 식작성의 흐름정도를 알려드리기 위한 가이드이므로 동작 중에 오류가 있을수 있습니다. 아래수식의 식내용과 주석을 참고하셔서 수정보완해 사용하시기 바랍니다. var CH = [],CHcnt,reqSymbol = []; var Slist = [],nCnt; var req; function Main_OnStart() { Main.SetTimer(1,5000);//1번 타이머, 5초 } 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(); //9시 이후이면 1번 타이머 종료 //2번 타이머 4번 설정 if (nEventID == 1 && HHMMSS >= 90000) { Main.KillTimer(1); Main.MessageList("종목검색요청"); Main.ReqPowerSearch("gumsek"); Main.SetTimer(2, 240*1000);//2번 타이머, 240초(4분) } if (nEventID == 2) { Main.MessageList("종목검색요청"); Main.ReqPowerSearch("gumsek"); } if (nEventID == 3) { Main.KillTimer(1); Main.ReqMarketData(Slist[req][1],1,0); } } //종목검색완료 function Main_OnRcvItemList(aItemList, nCount) { Main.MessageList("종목검색완료"); //검색된 종목의 종목코드를 Slist에 배열에 추가 Slist = []; if (nCount >= 1) { for (var i = 0; i < nCount; i++) { //2중 배열과 같이 i번방[0]은 등락률(초기값 -999), [1]은 종목코드를 저장 Slist[i] = new Array(-999,aItemList[i]); } //순차적으로 종모객체 요청 req = 0; Main.MessageList("종목객체요청",Slist[req][1]); Main.ReqMarketData(Slist[req][1],1,0); } } //종목객체 생성완료 function Main_OnRcvMarketData(MarketData) { //방금 요청한 종목코드와 같은지 확인해서 같으면 if (MarketData.code == Slist[req][1]) { //배열 [0]에 계산값 할당 var R = (MarketData.current - MarketData.GetPrevClose(1))/MarketData.GetPrevClose(1); //+10~-5 사이이면 배열에 저장 아니면 9999로 저장 if (10 >= R && R >= -5) { Slist[req][0] = R; } else { Slist[req][0] = 9999; } //종목객체 삭제 Main.RemoveMarketData(MarketData); //req 1씩증가 req = req+1; //req과 요청할 종목수보다 작으면 다음순번 종목 요청 if (req < Slist.length) { var S = Main.ReqMarketData(Slist[req][1],1,0); //종목객체요청제한에 걸리면 15초 뒤에 다시 요청 if (S == -1) { Main.SetTimer(3, 15000); } } else { Main.MessageList("전종목계산완료"); Main.MessageList("오름차순 정렬전",Slist); Slist.sort(CompareForSort); Main.MessageList("내림차순 정렬후",Slist); if (Slist.length > 0) { //오름차순으로 정렬완료 후에 10종목에 대하 잔고보유종목과 이미 차트를 생성한 종목은 제외하고 //리스트를 세로 만듬 reqSymbol = []; for (var i = 0; i < Math.min(10,Slist.length);i++) { var add = true; Account1.SetBalance(Slist[req][1], nPosition); if (Account1.Balance.count > 0) { add = false; } if (CH.length > 0) { for (var x = 0; x < CH.length;i++) { if (CH[x].GetCode(1) == Slist[req][1]) { add = false; } } } if (add == true) { reqSymbol.push(Slist[req][1]); } } //새로 리스트 만든 후에 차트객체 생성시작 if (reqSymbol.length > 0) { req = 0; Main.MessageList("차트객체요청시작 : "); var CTSet = new ReqChartItem(reqSymbol[req],1,CHART_PERIOD_MINUTE,800,CHART_REQCOUNT_BAR,false,false); var STSet = new SystemInfo("lotto"); Main.ReqChartEx(CTSet, STSet); } } } } } function Main_OnRcvChartEx(ChartEx) { if (ChartEx.GetCode(1) == reqSymbol[req]) { //차트객체 저장 CH[req] = ChartEx; //스팟 실행 후 생성된 차트갯수 카운트 CHcnt = CHcnt+1; //요청 카운트 증가 req = req+1; } //생성된 차트가 20개 미만이면 다음종목 요청하고 아니면 종료 if (req < Slist.length && CHcnt < 20) { var CTSet = new ReqChartItem(reqSymbol[req],1,CHART_PERIOD_MINUTE,800,CHART_REQCOUNT_BAR,false,false); var STSet = new SystemInfo("lotto"); Main.ReqChartEx(CTSet, STSet); } else { Main.MessageList("차트객체생성끝 : "); //차트객체가 20개를 달성하면 종목검색 타이머도 종료 if (CHcnt >= 20) { Main.KillTimer(2); } } } function CompareForSort(a, b) { //내림차순 //return( a[0] < b[0] ? 1 : a[0] > b[0] ? -1 : 0 ); 오름차순 return( a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0 ); } //차트에서 신호 발생하면 주문 function Main_OnRiseSignal(ChartEx, Signal) { if (Signal.signalKind == 1) { Account1.OrderBuy(Signal.code,Signal.count,0,1); } if (Signal.signalKind == 2) { Account1.OrderSell(Signal.code,Signal.count,0,1); } } 즐거운 하루되세요 > 느와르 님이 쓴 글입니다. > 제목 : 스팟 공부중 문의 드립니다. > 예스스팟에서 A. 장시작후 사용자 종목검색"gumsek" B. 검색된 종목중 전일 종가 대비 -5% ~ +10% 사이의 종목중에서 전일대비 오름차순으로 10개만 선별한다. C. 계좌에 보유종목과 선별 10개의 종목을 비교하여 중첩(미보유)없는 종목을 확장차트 1분봉 800바 차트에(거래없는구간 봉그리기 체크) 시스템식"lotto"를 적용한다. C. 위 과정을 14시까지, 4분 간격으로 반복하고, B에서 미검색된 종목과 계좌를 비교하여 신규 종목(미보유)만 확장차트 생성 및 시스템을 추가적으로 적용한다. 총 시스템적용은 20개로 제한 참고로 가능하다면 종목검색중, 확장차트 적용중, 당일 검색되었던 종목들 리스트(중첩은 제외) 표기가 되었으면 합니다. 그럼 좋은 하루 되세요~ Ps. 답변 대기중에 공부하면서 질문을 수정하였습니다. 혹 기존 질문과 차이가 있을수 있으니 확인 요망 드립니다.