커뮤니티

예스스팟 Q&A

다시 한번 검토해 주시면 감사하겠습니다.

항상 노고에 머리숙여 감사드립니다.1.글번호 229848수식어 사용해 보니 다음날 분할매수가 되지 않터라구요그래서 챗-지피티을 이용해서 작성해 보았습니다.이게 맞는지 점검해 주시면 감사하겠습니다.위 조건이 힘드시면 2번 해당하는 수식어 부탁 드립니다.2.당일 분할매수 조건 말고, 보유종목들중에 마이너스 조건에 맞게 다음날 부터 분할매수 할수 있게끔 부탁드립니다.var timer5 = 2; var 매수금 = 500000; var OrderList = [];var MKList = [];var B = [], P = [], S = []; var SC = 1, req = 0;function Main_OnStart(){// 이전 상태 복원if (Main.GetUserValue("XB") != ""){B = JSON.parse(Main.GetUserValue("XB"));P = JSON.parse(Main.GetUserValue("XP"));S = JSON.parse(Main.GetUserValue("XS"));}OrderList = [];if (S.length > 0){OrderList = S;SC = 0;req = 0;Main.ReqMarketData(OrderList[req]);}else{SC = 1;Main.SetTimer(1, timer5 * 1000);Main.SetTimer(3, 1000);}}function Main_OnTimer(nEventID){var d = new Date();var HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds();if (nEventID == 1 && HHMMSS > 090300 && HHMMSS < 151500){Main.ReqPowerSearch("test");}if (nEventID == 3 && MKList.length > 0){for (var i = 0; i < MKList.length; i++){Account1.SetBalance(MKList[i].code, 0);if (Account1.Balance.count <= 0) continue;var avg = Account1.Balance.avgUnitCost;var cur = MKList[i].current;if ((B[i] == 1 && cur <= avg * 0.97) ||(B[i] == 2 && cur <= avg * 0.95) ||(B[i] == 3 && cur <= avg * 0.92)){Account1.OrderBuy(MKList[i].code,Math.floor(매수금 / MKList[i].Ask(5)),MKList[i].Ask(5),0);B[i]++;Main.MessageList(MKList[i].code, "분할매수", B[i] - 1, "차");continue;}if (B[i] >= 4 && cur <= avg * 0.85){B[i] = -1;Account1.OrderSell(MKList[i].code,Account1.Balance.count,MKList[i].Bid(5),0);Main.MessageList(MKList[i].code, "분할완료 후 손절 -15%");continue;}if (cur >= avg * 1.11){B[i] = -1;Account1.OrderSell(MKList[i].code,Account1.Balance.count,MKList[i].Bid(5),0);Main.MessageList(MKList[i].code, "익절");continue;}}}}function Main_OnRcvItemList(altemList, nCount){Main.KillTimer(1);OrderList = [];for (var i = 0; i < nCount; i++){if (!IsStockInAccount(altemList[i]) && S.indexOf(altemList[i]) == -1){OrderList.push(altemList[i]);}}if (OrderList.length > 0){req = 0;Main.ReqMarketData(OrderList[req]);}else{Main.SetTimer(1, timer5 * 1000);}}/* ======================= MarketData 수신======================= */function Main_OnRcvMarketData(MarketData){for (var i = 0; i < MKList.length; i++){if (MKList[i].code == MarketData.code){MKList[i] = MarketData;return;}}MKList.push(MarketData);if (!IsStockInAccount(MarketData.code)){Account1.OrderBuy(MarketData.code,Math.floor(매수금 / MarketData.Ask(5)),MarketData.Ask(5),0);B.push(1);P.push(MarketData.current);S.push(MarketData.code);Main.MessageList(MarketData.code, "신규매수");}}function IsStockInAccount(stockCode){var cnt = Account1.GetTheNumberOfBalances();for (var i = 0; i < cnt; i++){Account1.SetBalance(i);if (Account1.Balance.code == stockCode)return true;}return false;}/* ======================= 스팟 종료======================= */function Main_OnClose(){for (var i = B.length - 1; i >= 0; i--){if (B[i] == -1){B.splice(i, 1);P.splice(i, 1);S.splice(i, 1);}}Main.SetUserValue("XB", JSON.stringify(B));Main.SetUserValue("XP", JSON.stringify(P));Main.SetUserValue("XS", JSON.stringify(S));}
프로필 이미지
치치야
2026-02-03
16
글번호 230297

지나리 님에 의해서 삭제되었습니다.

프로필 이미지
지나리
2026-02-02
5
글번호 230264

예스스탁 과 조검 검색식 문의

안녕하세요. 예스스탁에서 익절 셋팅과 파위종목에 조건식 문의 드립니다.1. var 익절 = 0.95 (이렇게 하면 5% 익절로 알고 있습니다.) - 익절 10 % 이익보존 5% 이렇게 셋팅 가능 한가요 ? - 수익 10%에서 - 3% 빠지면 익절 이렇게도 셋팅이 가능 한가요 ? 2. 파워종목에서 조건식 - 분봉 기준 pivt 1 차 저항 위 와 2 차 저항 위 조건식은 어땋게 작성해야 하나요 ?미리 감사 인사 전합니다.늘 좋은 하루 보내세요.감사합니다.
프로필 이미지
victor
2026-02-01
21
글번호 230231

스톰82 님에 의해서 삭제되었습니다.

프로필 이미지
스톰82
2026-01-29
23
글번호 230195

수식변경 부탁드립니다

var timer5 = 5; //5초var 매수금 = 10000;var 손절 = 0.05;var 익절 = 1.05;var OrderList = [];var MKList = [];var req;function Main_OnStart(){ //1번 타이머, 5초 Main.SetTimer(1, timer5*1000); // 오늘 매수한 종목 관리 배열 초기화 MKList = []; //스팟 시작시 잔고평가금액 V1 = Account1.GetBalanceETCinfo(100); }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(); if (nEventID == 1 && HHMMSS >= 90000 && HHMMSS < 151500) { //종목검색 수행 Main.ReqPowerSearch("v-갭상에이격종합(1분)") } if (nEventID == 1) { //계좌보유종수 var num = Account1.GetTheNumberOfBalances(); //9시~15시 15분 사이 if (HHMMSS >= 90000 && HHMMSS < 150000) { //보유종목이 1개 이상 if (num >= 1) { //계좌평가금액이 스팟시작시 평가금액대비 5% 이상이면 전종목 전량매도 if (Account1.GetBalanceETCinfo(100) >= V1*1.06) { //1번 타이머 종료 Main.KillTimer(1); //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account1.SetBalance(i); //수량이 있고 5%수익이거나 5% 손실이면 시장가 매도 if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } } else //아니면 개별종목 5%익절, -5%손절 체크 { //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account1.SetBalance(i); //수량이 있고 5%수익이거나 5% 손실이면 시장가 매도 if (Account1.Balance.count > 0 && (Account1.Balance.current >= Account1.Balance.avgUnitCost*익절 || Account1.Balance.current <= Account1.Balance.avgUnitCost*손절)) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } } } } //15시 15분이후이면 if (HHMMSS >= 150100) { //1번 타이머 종료 Main.KillTimer(1); //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account1.SetBalance(i); //수량이 있고 5%수익이거나 5% 손실이면 시장가 매도 if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } } } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); }}function Main_OnRcvItemList(aItemList, nCount){ Main.KillTimer(1); OrderList = []; if (nCount >= 1) { if (MKList.length == 0) { OrderList = aItemList; } else { for (var a = 0; a < nCount; a++) { var Add = true; for (var b = 0; b < MKList.length; b++) { if (aItemList[a] == MKList[b].code) { Add = false; } } if (Add == true && !IsStockInAccount(aItemList[a])) { OrderList.push(aItemList[a]); } } } } if (OrderList.length == 0) { Main.SetTimer(1, timer5*1000); } else { req = 0; Main.ReqMarketData(OrderList[req]); }}function Main_OnRcvMarketData(MarketData){ if (MarketData.code == OrderList[req]) { MKList.push(MarketData); // 계좌에 같은 종목이 있는지 확인 if (!IsStockInAccount(MarketData.code)) { // 계좌에 없는 경우에만 매수 Account1.OrderBuy(MarketData.code,1,0,1); // Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),0,1); // Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),MarketData.Ask(1),0); //지정가로 주문하고자 하시면 주문함수 내용을 위와 같이 변경하시면 됩니다. Main.MessageList(MarketData.code + " 주식을 매수합니다."); } else { Main.MessageList( MarketData.code + " 주식은 이미 계좌에 있으므로 매수하지 않습니다."); } req = req+1; if (req < OrderList.length) { var aa = Main.ReqMarketData(OrderList[req]); if (aa == -1) { Main.SetTimer(2, 15000); } } else { Main.SetTimer(1, timer5*1000); } }}function IsStockInAccount(stockCode) { // 계좌에 해당 종목이 있는지 확인하는 함수 var numberOfBalances = Account1.GetTheNumberOfBalances(); for (var i = 0; i < numberOfBalances; i++) { Account1.SetBalance(i); if (stockCode == Account1.Balance.code) { return true; // 계좌에 같은 종목이 있으면 true 반환 } } return false; // 계좌에 같은 종목이 없으면 false 반환}* 위 수식에 이익보존 3% 수식 추가 부탁드립니다.
프로필 이미지
만경
2026-01-29
38
글번호 230188

차트시그널로 진입시 두번째 이상의 거래를 할 수 있는 수식

아래 수식은 차트 신호로 진입하고 청산하는 수식입니다.차트가 1회 진입, 1회 청산할 때는 문제가 없는데...최근 차트신호를 2회 이상의 진입과 청산으로 바꾼 후 사용해보니2회차부터는 진입하지 않습니다.차트신호에 따라 두번째 이상의 거래를 할 수 있게 수정해 주십시요.차트 진입명칭은 아래처럼 사용합니다. 1회차 진입명 "b1" 2회차부터 진입명 "b2"1회차 b1 진입, 2회차 이상은 b2 가 반복해서 진입합니다. ex) 5회 거래면 진입명이 b1,b2,b2,b2,b2 입니다.청산은 진입명과 연계되어 청산하고 있습니다.항상 고맙습니다.************************************************************************************************************************************************var UNum; var LNum;var CallCode; var CallPrice;var CC;var CallOrderCode;var CallExit;function Main_OnStart(){ CallExit = false; Main.SetTimer(1, 5000);}//차트에서 신호가 발생하면function Chart1_OnRiseSignal(Signal){ //해당 신호가 매수신호이면 if (Signal.signalKind == 1) { Main.MessageList("--------------------------------------------"); Main.MessageList("매수신호 발생"); //0.12 이하 중 가장 큰 가격을 가지는 종목을 찾음 //ATM위 행사가 갯수 UNum = Option1.uppersATM; //ATM아래 행사가 갯수 LNum = Option1.lowersATM; //각 행사가의 콜종목의 종목코드를 저장할 변수를 배열변수로 선언 CallCode = new Array(UNum+LNum+1); //각 행사가의 콜종목의 현재가를 저장할 변수를 배열변수로 선언 CallPrice = new Array(UNum+LNum+1); //콜종목 찾기 //콜옵션은 ATM기준 위행사가 +단계, 아래가 -단계이므로 //for문에서 LNum의 역수부터 시작해서 UNum까지 1씩 증가하면서 수행하도록 함 for (var i = -LNum; i <= UNum; i++) { //값이 0.12 이하이면 if (Option1.GetCurrent(0, i) <= 0.12) { //해당종목의 현재가를 배열변수 CallPrice의 방번호 i+LNum에 저장 CallPrice[i+LNum] = Option1.GetCurrent(0, i); //해당종목의 종목코드를 배열변수 CallCode의 방번호 i+LNum에 저장 CallCode[i+LNum] = Option1.GetATMCallRecent(i); //주의 //배열변수의 방(공간)번호은 -가 없으므로 최하단 행사가를 0번방부터 //저장하도록 작성해야 함 } else//0.12 보다 크면 { //배열변수 CallPrice의 방번호 i+LNum에 -1 저장 CallPrice[i+LNum] = -1; //배열변수 CallCode의 방번호 i+LNum에 -1 저장 CallCode[i+LNum] = -1; } } //배열변수 CallPrice의 각 배열방의 값중 가장 큰값을 찾아 CC에 저장하고 //CallCode의 동일 방번호의 값을 CallOrderCode에 저장 CC = -1; CallOrderCode = -1; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] > CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum] } } Main.MessageList("--------------------------------------------"); Main.MessageList("콜종목코드:",CallOrderCode,"/콜현재가 :",CC); //콜옵션종목 매수 if (CallExit == false) { //지정가 Account1.OrderBuy(CallOrderCode, 1, Option1.GetAskByCode(CallOrderCode, 5), 0); //시장가 //Account1.OrderBuy(CallOrderCode, 1, 0, 1); } }//해당 신호가 청산신호면if (Signal.signalKind == 2){Account1.OrderSell(CallOrderCode, 1, Option1.GetBidByCode(CallOrderCode, 5), 0);}}
프로필 이미지
좌오비우오비
2026-01-26
47
글번호 230097

s1017051 님에 의해서 삭제되었습니다.

프로필 이미지
s1017051
2026-01-24
7
글번호 230046
답변완료

키움신호검색 예스검색식

CC=CCi(20);M=Macd(12,26);Ms=eavg(M,9);S=SuperTrend(60,2);R=RSI(14);bs_C=Barssince(CC<-100);bs_M=Barssince(M<0 && CrossUp(M,Ms));bs_S=Barssince(CrossUp(C,S));bs_R=Barssince(R<30);조건=bs_C=최소 && bs_C <=봉C &&bs_M=최소 && bs_M <=봉M &&bs_S=최소 && bs_S <=봉S &&bs_R=최소 && bs_R <=봉R;조건 && !조건(1)----------------------------------------------지표변수 봉c 10, 봉m 10, 봉s 10, 봉r 10 , 최소 5
프로필 이미지
navy
2026-01-24
60
글번호 230045
답변완료

예스스팟 스크립트에서 차트 객체의 종목을 변경하는 명령어가 무엇인가요?

안녕하세요. 예스스팟에서 스크립트 객체로 '차트'를 추가했습니다. 스크립트 상에서 특정 조건이 되면 이 차트의 종목을 다른 옵션 종목으로 변경하고 싶은데, ChangeCode나 SetCode를 써보니 has no method 에러가 발생합니다. 현재 제가 사용하는 버전의 차트 객체에서 종목 코드를 강제로 변경하는 메서드 명칭이 무엇인지 알고 싶습니다. (참고로 메서드 목록에 GetCode는 보이는데 변경 관련 명령어는 찾기가 어렵네요.)
프로필 이미지
강심장
2026-01-22
58
글번호 229985
답변완료

문의드립니다.

시스템 성능 보고서 상에있는..진입후 최대수익과 최대 손실을 리턴하고 싶은데요..방법이 없을까요.리턴이 불가하다면, 예스스팟에서 계산할수있는 방법이 궁금합니다.MaxProfitPrice 이함수를 사용할수있는지..예스스팟으로 진입과 청산이 이루어지면.. 최대 손실과 수익을 로그로 나타내줬으면 합니다.
프로필 이미지
율담
2026-01-22
51
글번호 229978