커뮤니티
예스스팟 Q&A
답변완료
문의드립니다.
매수 조건주가가 20이평선을 아래서 위로 돌파 하고 난 후에 (주가가 20이평선을 닿아 있을 때는 적용 되지 않습니다. 꼭 20이평선 위에 있을 때)TRIX 14 9 기준선0 아래 부분에서 TRIX선이 시그널선을 골든크로스 할 때 매수청산 또는 손절은 주가가 20이평선을 아래로 깨고 이탈 할 때 매도 청산완료-----------------------------------------------------------------------------매도 조건주가가 20이평선을 위에서 아래로 돌파 하고 난 후에 (주가가 20이평선을 닿아 있을 때는 적용 되지 않습니다.꼭 20이평선 아래에 있을 때)TRIX 14 9 기준선0 위 부분에서 TRIX선이 시그널선을 데드크로스 할 때 매도청산 또는 손절은 주가가 20이평선을 위로 돌파 할 때 매수 청산완료그리고 수량을 입력할 수 있도록 추가 부탁드립니다.감사합니다^.^
2026-02-25
934
글번호 230788
답변완료
안녕하세요. 문의 드립니다.
안녕하세요, 예스스팟 스크립트에서 삼성전자 수급(매수잔량-매도잔량)을 가져오려고 합니다.MarketData1 객체에 삼성전자(005930)를 연결하고수급데이터 '사용'으로 설정했는데MarketData1.BidQtyMarketData1.AskQty두 프로퍼티가 모두 undefined로 나옵니다.질문1) MarketData1에서 매수잔량, 매도잔량을 가져오는 정확한 프로퍼티명이 무엇인가요?질문2) MarketData1_OnReceive() 이벤트 함수를 작성했는데 호출이 안 됩니다. 예스스팟에서 실시간 수급 이벤트 함수명이 무엇인가요?사용 환경: 예스스팟, 스크립트 JavaScript
2026-02-25
90
글번호 230773
답변완료
야간옵션 모의투자
글번호 229548 답변 수식으로 2월20일 금요일밤에 위클리월요일만기 상품을 테스트 해보았습니다.야간선물 거래시간에 모의투자로 돌려보았는데 옵션 양매수 주문이 나가지 않았습니다.모의투자라 주문이 안나간 건지.매수주문 시 매도5호가 주문인데 매도호가 간격이 주간장처럼 조밀하지 않고 듬성듬성 있어선지.거래시간이 금일야간에서 다음날 오전에 걸쳐있어서 날짜변경에 오류가 있어선지 .무슨 이유인지 모르겠습니다.수정 전 수식은 주간 거래시 양매수 주문과 청산이 정상적으로 작동하는 코딩입니다.야간옵션 양매수는 금일 오후와 다음날 오전까지 이틀에 걸친 거래이므로날짜가 바뀌는 것과 거래시간 설정에서 오류가 있을 것 같습니다.항상 고맙습니다.
2026-02-21
174
글번호 230673
shining9 님에 의해서 삭제되었습니다.
2026-02-21
101
글번호 230671
답변완료
문의드립니다
아래와 같이 이용중인데요하루 매수 하는 종목수를 3개이하로 제한하려면 뭘 추가해야 할까요?var DailyMaxStocks = 3;를 추가 했는데 안되서 문의드립니다var timer5 = 2; // 2초var 매수금 =100000;var OrderList = [];var MKList = [];var req;function Main_OnStart() {// 1번 타이머, 1초Main.SetTimer(1, timer5 * 1000);// 오늘 매수한 종목 관리 배열 초기화MKList = [];}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 > 090000 && HHMMSS < 100000) {// 종목검색 수행Main.ReqPowerSearch("전략명");}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.slice(0, 종목제한수); // 한정된 수만 가져오기} 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]);// 제한 수를 넘는 경우 breakif (OrderList.length >= 종목제한수) {break;}}}}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 반환}
2026-02-20
158
글번호 230644
답변완료
예스스팟 옵션 챠트 자동 갱신 및 데이터 추출 관련 문의 입니다.
앞전에 주신 소스 입니다.var ATM변경 = 2; //2행사가 변경var OP,ATM,CT;var F;var C1,C2,C3,C4,C5;var P1,P2,P3,P4,P5;function Main_OnStart(){ var D1 = Option1.GetRemainDays(0, 0); var D2 = Option2.GetRemainDays(0, 0); var D3 = Option3.GetRemainDays(0, 0); Main.MessageList("Month",D1); Main.MessageList("Week월",D2); Main.MessageList("Week목",D3); OP = 1; if (D2 < D1) OP = 2; if (D3 < D1) OP = 3; ATM = 0; Main.MessageList("OP",OP); Main.SetTimer(1,5000);}function Main_OnTimer(nEventID){ if (nEventID == 1) { var Change = false; if (OP == 1) { curATM = Option1.GetExercisePrice(0,2); if (curATM >= ATM+(2.5*ATM변경) || curATM <= ATM-(2.5*ATM변경)) { Main.MessageList("ATM변경",curATM,ATM); ATM = curATM; Change = true; F = "00000000"; C1 = Option1.GetCodeByExercisePrice(0,ATM); C2 = Option1.GetCodeByExercisePrice(0,ATM+2.5); C3 = Option1.GetCodeByExercisePrice(0,ATM+5.0); C4 = Option1.GetCodeByExercisePrice(0,ATM+7.5); C5 = Option1.GetCodeByExercisePrice(0,ATM+10.0); P1 = Option1.GetCodeByExercisePrice(1,ATM); P2 = Option1.GetCodeByExercisePrice(1,ATM-2.5); P3 = Option1.GetCodeByExercisePrice(1,ATM-5.0); P4 = Option1.GetCodeByExercisePrice(1,ATM-7.5); P5 = Option1.GetCodeByExercisePrice(1,ATM-10.0); Main.MessageList("OP1",C1,C2,C3,C4,C5); Main.MessageList("OP1",P1,P2,P3,P4,P5); } } if (OP == 2) { curATM = Option2.GetExercisePrice(0,2); if (curATM >= ATM+(2.5*ATM변경) || curATM <= ATM-(2.5*ATM변경)) { Main.MessageList("ATM변경",curATM,ATM,ATM+2.5,ATM+5.0,ATM+7.5); ATM = curATM; Change = true; F = "00000000"; C1 = Option2.GetCodeByExercisePrice(0,ATM); C2 = Option2.GetCodeByExercisePrice(0,ATM+2.5); C3 = Option2.GetCodeByExercisePrice(0,ATM+5.0); C4 = Option2.GetCodeByExercisePrice(0,ATM+7.5); C5 = Option2.GetCodeByExercisePrice(0,ATM+10.0); P1 = Option2.GetCodeByExercisePrice(1,ATM); P2 = Option2.GetCodeByExercisePrice(1,ATM-2.5); P3 = Option2.GetCodeByExercisePrice(1,ATM-5.0); P4 = Option2.GetCodeByExercisePrice(1,ATM-7.5); P5 = Option2.GetCodeByExercisePrice(1,ATM-10.0); Main.MessageList("OP2",C1,C2,C3,C4,C5); Main.MessageList("OP2",P1,P2,P3,P4,P5); } } if (OP == 3) { curATM = Option3.GetExercisePrice(0,2); if (curATM >= ATM+(2.5*ATM변경) || curATM <= ATM-(2.5*ATM변경)) { Main.MessageList("ATM변경",curATM,ATM); ATM = curATM; Change = true; F = "00000000"; C1 = Option3.GetCodeByExercisePrice(0,ATM); C2 = Option3.GetCodeByExercisePrice(0,ATM+2.5); C3 = Option3.GetCodeByExercisePrice(0,ATM+5.0); C4 = Option3.GetCodeByExercisePrice(0,ATM+7.5); C5 = Option3.GetCodeByExercisePrice(0,ATM+10.0); P1 = Option3.GetCodeByExercisePrice(1,ATM); P2 = Option3.GetCodeByExercisePrice(1,ATM-2.5); P3 = Option3.GetCodeByExercisePrice(1,ATM-5.0); P4 = Option3.GetCodeByExercisePrice(1,ATM-7.5); P5 = Option3.GetCodeByExercisePrice(1,ATM-10.0); Main.MessageList("OP3",C1,C2,C3,C4,C5); Main.MessageList("OP3",P1,P2,P3,P4,P5); } } if (Change == true) { if (CT != null) { var a = Main.RemoveObject(CT); Main.MessageList("차트삭제:",a); } Main.MessageList(C1,C2,C3,C4,C5); Main.MessageList(P1,P2,P3,P4,P5); //기본종목셋팅(연결선물 주간장,5분 5000개, 갭보정안함, 수정주가처리 안함) var data1 = new ReqChartItem(F,5,CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //참조데이터 셋팅(ReqChartItem를 이용해 종목과 주기등지정) //data2종목 var Data2 = new ReqChartItem(C1,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data3종목 var Data3 = new ReqChartItem(C2,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data3종목 var Data4 = new ReqChartItem(C3,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data4종목 var Data5 = new ReqChartItem(C4,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data5종목 var Data6 = new ReqChartItem(C5,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data6종목 var Data7 = new ReqChartItem(P1,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data7종목 var Data8 = new ReqChartItem(P2,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data8종목 var Data9 = new ReqChartItem(P3,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data9종목 var Data10 = new ReqChartItem(P4,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data10종목 var Data11 = new ReqChartItem(P5,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //참조 데이터는 복수로 지정이 가능하므로 Array에 담아 지정 var RefSet = new Array(Data2,Data3,Data4,Data5,Data6,Data7,Data8,Data9,Data10,Data11); //차트 셋팅 제외하고 시스템,자표, 참조데이터는 생략가능, 생략하면 null로 지정 var A = Main.ReqChartEx(data1, null, null, RefSet); Main.MessageList("차트재생성",A); } }}function Main_OnRcvChartEx(ChartEx){ CT = ChartEx;}안녕하세요, 공유해 주신 소스 코드를 공부하고 있는 사용자입니다. 올려주신 로직이 매우 훌륭하여 제 시스템에 적용해 보려는데, 몇 가지 기술적인 확신을 얻고 싶어 질문을 남깁니다.1. 선물 및 옵션 차트의 독립적 운용 가능 여부현재 소스에서 ReqChartEx를 통해 하나의 확장 차트에 선물과 옵션 10종목을 모두 담고 있습니다. 제가 필요한 것은 선물 차트와 옵션 차트를 각각 별도로(또는 특정 목적에 맞게) 활용하는 것인데, 이 소스 구조 내에서 옵션 종목이 교체될 때 각각의 차트 데이터가 독립적으로 갱신되도록 제어하는 것이 가능한가요?2. 차트 갱신 시 기존 데이터 유지 문제등가격(ATM)이 변경되어 Main.RemoveObject(CT)로 기존 차트를 삭제하고 ReqChartEx로 새로 만들 때, 이전 차트에서 수집하던 실시간 데이터나 지표 값들이 초기화되지 않고 연속성을 가질 수 있는 방법이 소스 내에 고려되어 있는지 궁금합니다.3. 시세 업데이트(OnUpdateTick) 활용차트가 자동으로 변경된 이후, Main_OnUpdateTick 같은 핸들러를 통해 새로 교체된 옵션 종목들의 시세 데이터를 실시간으로 가로채서 외부 파일로 저장하거나 계산에 활용하는 데 최적화된 구조인지 조언 부탁드립니다.
2026-02-19
82
글번호 230617
답변완료
문의드립니다.
아래 식에서 추가하고자 합니다.MACD 12 26 9 기준선0 위에 있고 기준선0 아래서 TRSX선이 시그널선을 골든크로스 할 때 매수(피라미딩으로 연속 매수)청산은 MACD 12 26 9 기준선0을 이탈 할 때 전체 매도 청산매수 수량을 입력할 수 있게 추가해 주세요.부탁드립니다.Input : Period(14), sigPeriod(9);var : TRIXv(0),TRIXs(0);TRIXv = TRIX(Period);TRIXs = ema(TRIXv,sigPeriod);if CrossUp(TRIXv,TRIXs) and TRIXv < 0 ThenBuy("B",OnClose,def);
2026-02-19
80
글번호 230596
답변완료
메뉴얼 내용이 틀린 것을 발견하였습니다
nPlotNum에서 0부터가 아니라 1부터였습니다.0을 넣을땐 range를 벗어났다고 에러가 나와서 1부터로 바꿔넣었더니 에러가 사라졌고, 읽어온 값을 실제로 조회해 봤더니 정상적인 값으로 조회되었습니다. plot1의 값을 읽기 위해선 0이 아니라 1로 넣어야 했습니다.메뉴얼 수정 부탁드립니다.-----https://help.yesstock.com/25ad121b-e719-81a7-ae3c-c92cf748bd8e#25ad121b-e719-81a7-ae3c-c92cf748bd8eGetIndicatorData(sIndicatorName, nPlotNum, nPlotIndex)설명 : 차트에 적용된 지표식 값을 반환합니다.반환값 : 실수매개변수sIndicatorName – 문자열, 차트에 적용된 지표 이름nPlotNum – 정수, plot번호 0부터nPlotIndex – 정수, 이전값 참조(0:현재봉, 1: 1봉전, 2: 2봉전, 3: 3봉전,……..)
2026-02-19
77
글번호 230595
답변완료
도움 부탁드립니다.
현재 연결선물 나스닥 5분봉 차트에 많은 지표 수식들이 있습니다.이 차트에서 나타난 지표 수식들과 1~2초 단위 캔들의 시고저종 값들을 엑셀(.csv)에 자동 저장되게 할 수 있을까요?
2026-02-17
66
글번호 230583
답변완료
예스트레이더 재실행시 예스스팟 경고 문구 문의
예스트레이더 재실행을 하면 하루 한번씩 아래와 같은 경고문구가 뜹니다.'다음부터 열지않기'를 체크하고 확인을 클릭하면예스트레이더 재실행을 해도 하루동안은 경고문구가 뜨지않다가하루 지나서 재실행을 하면 또 경고문구가 뜹니다.경고문구 뜨지 않게 할수있는 방법이 있을까요?넥스트증권 예스트레이더 사용중입니다.
2026-02-16
96
글번호 230578