커뮤니티

문의 드립니다

프로필 이미지
미래테크
2025-10-20 18:57:07
117
글번호 227072
답변완료

예스스팟에서 수식 부탁합니다
파워종목검색으로 실시간 검색으로 일봉에서 5이평이 20이평 돌파시 매수하는 파워검색식 (예: 이평돌파) 으로 종목을 매수하는 경우에 특정시간대(9시30분~ 12시) 에만 매수할 수 있는 예스스팟 수식 부탁합니다.
이평 돌파가 9시 10분대 20분대에도 발생할 수 있는데 일봉으로 종목 매수하여 시작타임을 9시30분으로 하면, 그 이전 시간에 20이평 돌파가 발생된 종목도 같이 시작하자마자 매수가 되어서, 특정시간대에만 지정된 파워검색식으로 검색된 종목이 매수 될 수 있도록 수식 부탁합니다.

답변 2
프로필 이미지

예스스탁 예스스탁 답변

2025-10-29 14:07:54

안녕하세요 예스스탁입니다. 문의하신 내용은 스팟으로 처리를 할 수 없습니다. 스팟에서 종목검색을 요청하면 검색된 결과만 받습니다. 스팟에서 특정시간(9시30분) 이후에 종목검색을 요청해도 단지 지정한 이후에 검색된 결과만 받을 뿐입니다. 몇시이후에 실제 조건이 충족된 종목인지 인지할 방법이 없습니다. 문의하신 내용은 종목검색식 자체를 수정해 보셔야 합니다. var1 = ma(C,5); var2 = ma(C,20); if CrossUp(Var1,var2) Then Find(1); 위와 같은 내용으로 종목검색을 일봉에서 수행하게 되면 전일에는 5이평이 20이평 작은데 오늘 5이평이 20이평보다 큰 종목이 검색됩니다. 오늘 어느시간이후에 5이평이 20이평보다 커졌는지 알수가 없습니다. 그러므로 당일어느시점에 골드가 발생하기 시작했는지 알기 위해서는 분봉에서 일봉조건인 위 내용을 구현하여 파악해야 합니다. 아래식은 1분봉에서 일간 5이평-20이평 골드가 된 종목을 찾는 수식이고 9시 30분 이후에 골드가 발생한 종목만 검색하게 됩니다. 해당 내용은 단순이평과 같이 간단한 식이 아니면 내용에 따라 구현이 불가할수도 있습니다. input : P1(5),P2(20); var : cnt(0),tt(0); var : sum1(0),sum2(0),sum11(0),sum21(0); var : mav1(Nan),mav2(Nan),mav11(Nan),mav21(Nan); sum1 = 0; sum11 = 0; sum2 = 0; sum21 = 0; For cnt = 0 to P2-1 { if cnt < P1 Then { sum1 = sum1+DayClose(cnt); sum11 = sum11+DayClose(cnt+1); } sum2 = sum2+DayClose(cnt); sum21 = sum21+DayClose(cnt+1); } mav1 = sum1/P1;#현재 일봉5이평 mav11 = sum11/P1; #전일 일봉5이평 mav2 = sum2/P2;#현재 일봉20이평 mav21 = sum21/P2;#전일 일봉20이평 if sDate != sDate[1] Then tt = 0; IF mav1 > mav2 and mav1[1] < mav2[1] Then tt = sTime; if tt >= 93000 and mav11 <= mav21 and mav1 > mav2 Then Find(1); 즐거운 하루되세요
프로필 이미지

예스스탁 예스스탁 답변

2025-10-29 14:09:20

안녕하세요 예스스탁입니다. 아래는 스팟수식입니다. 9시30~12사이에 검색하고 최대 지정한 종목수까지만 매수하며 종목당 매수금은 1000000입니다. 수식 내용 참고하시기 바랍니다. var MKList = []; //종목검색 후 종목객체 요청할 종목의 종목코드를 리스트할 배열변수 var MK = []; //종목객체를 저장할 배열변수 var req; //종목객체 요청 횟수를 저장할 변수 var 최대매수종목수 = 20; //매수할 최대 종목수 var 매수금 = 1000000; //종목당 매수금 //스팟 시작 function Main_OnStart() { //1번 타이머, 60초 Main.SetTimer(1, 60000); } //타이머 동작 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 >= 93000 && HHMMSS <= 120000) { //타이머 종료 Main.KillTimer(1); //지정한 이름의 사용자조건검색을 실행 Main.ReqPowerSearch("사용자검색조건명"); } 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); //매수주문가격 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,"종목객체생성끝"); //최대매수종목수에 도달하지 않았으면 종목검색을 위해 타이머 재셋팅 if (MK.length < 최대매수종목수) { Main.SetTimer(1,6000); } else { //최대매수종목수를 채웠으면 검색 종료 Main.MessageList("최대종목수 도달 검색종료"); } } } } 즐거운 하루되세요