커뮤니티

예스스팟 Q&A

답변완료

문의드립니다.

아래 식에서 추가하고자 합니다.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
54
글번호 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
55
글번호 230595
답변완료

도움 부탁드립니다.

현재 연결선물 나스닥 5분봉 차트에 많은 지표 수식들이 있습니다.이 차트에서 나타난 지표 수식들과 1~2초 단위 캔들의 시고저종 값들을 엑셀(.csv)에 자동 저장되게 할 수 있을까요?
프로필 이미지
길게가자
2026-02-17
47
글번호 230583
답변완료

예스트레이더 재실행시 예스스팟 경고 문구 문의

예스트레이더 재실행을 하면 하루 한번씩 아래와 같은 경고문구가 뜹니다.'다음부터 열지않기'를 체크하고 확인을 클릭하면예스트레이더 재실행을 해도 하루동안은 경고문구가 뜨지않다가하루 지나서 재실행을 하면 또 경고문구가 뜹니다.경고문구 뜨지 않게 할수있는 방법이 있을까요?넥스트증권 예스트레이더 사용중입니다.
프로필 이미지
dons
2026-02-16
78
글번호 230578

강심장 님에 의해서 삭제되었습니다.

프로필 이미지
강심장
2026-02-15
36
글번호 230573

열심히하는 님에 의해서 삭제되었습니다.

프로필 이미지
열심히하는
2026-02-13
55
글번호 230549
답변완료

진입이 안됩니다. 설정확인부탁

예스스팟을 위와같이 설정햇는데 진입신호에 진입이 안되는데 설정확인 부탁드립니다.
프로필 이미지
산수유
2026-02-12
61
글번호 230537

관리자에 의해 예스랭귀지 QnA로 이동되었습니다.

프로필 이미지
요타
2026-02-12
11
글번호 230530
0
답변완료

파워종목검색 오류

아무리 코드를 짜도 저장된 파워종목검색을 찾지 못하는지 파일 이름도 맞게 되었고 파워종목검색에서 저장 하였는데 해당 검색식을 찾지 못하네요 혹시 예스랭규ㅣ지로 만든 검색식을 파워종목에서 불러와서 저장해서 안될까요?코드가 잘못되엇는지 봐주세요/* [예스스팟 통합: 터틀 전략 - 검색식 tur 전용] */// =========================================================// 1. 설정 변수// =========================================================var SearchName = "tur"; // 파워종목검색 이름var RiskPercent = 0.01; // 자산의 1% 리스크var EntryPeriod = 55; // 55일 신고가var ExitPeriod = 20; // 20일 신저가var ATRLen = 20; var LongFilter = 200; var MaxUnits = 4; var SearchTimerID = 1; // 검색 타이머var CalcTimerID = 2; // 매매 감시 타이머var ItemState = {}; var ChartList = []; var IsSearching = false; // 현재 검색 중인지 확인function Main_OnStart() { Main.MessageLog("=========================================="); Main.MessageLog("▶ [1단계] 시스템 가동 시작 (검색식: " + SearchName + ")"); // 계좌 잔고 확인 var money = Account1.GetBalanceETCinfo(0); Main.MessageLog("▶ 현재 계좌 잔고: " + money.toLocaleString() + "원"); // 시작 2초 후 첫 검색 실행 Main.SetTimer(SearchTimerID, 2000); // 5초마다 매매 로직 감시 Main.SetTimer(CalcTimerID, 5000);}// [2] 타이머 이벤트function Main_OnTimer(nEventID) { if (nEventID == SearchTimerID) { // 응답을 받을 때까지 10초마다 계속 요청 (응답 없으면 무한 재시도) Main.MessageLog("▶ [2단계] 서버에 '" + SearchName + "' 검색 요청 전송"); Main.ReqPowerSearch(SearchName); IsSearching = true; // 검색 주기를 10초로 짧게 설정 (응답 받으면 OnRcvSearchResult에서 60초로 늘림) Main.KillTimer(SearchTimerID); Main.SetTimer(SearchTimerID, 10000); } if (nEventID == CalcTimerID) { if (ChartList.length > 0) { for (var i = 0; i < ChartList.length; i++) { RunTurtleLogic(ChartList[i]); } } }}// [3] 검색 결과 수신 (서버 대답)function Main_OnRcvSearchResult(nCount) { IsSearching = false; // 응답을 받았으므로 다음 검색 주기를 정상(60초)으로 변경 Main.KillTimer(SearchTimerID); Main.SetTimer(SearchTimerID, 60000); Main.MessageLog("▶ [3단계] 서버 응답 도착! 발견 종목: " + nCount + "개"); if (nCount > 0) { for (var i = 0; i < nCount; i++) { var sCode = Main.GetSearchResult(i); // 이미 감시 중인 종목인지 확인 var isExist = false; for (var j = 0; j < ChartList.length; j++) { if (ChartList[j].GetCode() == sCode) isExist = true; } if (!isExist) { Main.MessageLog(" >> 신규 종목 [" + sCode + "] 차트 생성 요청"); var chartSet = new ReqChartItem(sCode, 1, CHART_PERIOD_DAILY, 500, CHART_REQCOUNT_BAR, false, false); Main.ReqChartEx(chartSet); } } } else { Main.MessageLog(" ?? 현재 조건에 맞는 종목이 0개입니다."); }}// [4] 차트 객체 생성 완료function Main_OnRcvChartEx(oChart) { var sCode = oChart.GetCode(); ChartList.push(oChart); if (!ItemState[sCode]) { ItemState[sCode] = { unitCount: 0, lastPrice: 0 }; } Main.MessageLog("▶ [4단계] 종목 [" + sCode + "] 감시 시작");}// [5] 터틀 매매 로직function RunTurtleLogic(sChartEx) { var sCode = sChartEx.GetCode(); if (sChartEx.GetBarCount() < LongFilter) return; var curMoney = Account1.GetBalanceETCinfo(0); var vN = Cal_ATR(sChartEx, ATRLen); var vHighEntry = Cal_Highest(sChartEx, 1, EntryPeriod); var vLowExit = Cal_Lowest(sChartEx, 1, ExitPeriod); var vMaLong = Cal_SMA(sChartEx, LongFilter); var curClose = sChartEx.GetClose(0); var curHigh = sChartEx.GetHigh(0); // 1유닛 수량 var vPosSize = 0; if (vN > 0) { vPosSize = Math.floor((curMoney * RiskPercent) / (vN * 2)); } Account1.SetBalanceItem(sCode, 0); var currentQty = Account1.Balance.count; // 매수 및 피라미딩 if (currentQty == 0 && vPosSize > 0) { if (curHigh > vHighEntry && curClose > vMaLong) { Account1.OrderBuy(sCode, vPosSize, 0, 1); ItemState[sCode].unitCount = 1; ItemState[sCode].lastPrice = curClose; Main.MessageLog("[" + sCode + "] Unit 1 진입 시도"); } } else if (currentQty > 0 && ItemState[sCode].unitCount < MaxUnits) { var nextEntry = ItemState[sCode].lastPrice + (vN * 0.5); if (curHigh >= nextEntry) { Account1.OrderBuy(sCode, vPosSize, 0, 1); ItemState[sCode].unitCount++; ItemState[sCode].lastPrice = curClose; Main.MessageLog("[" + sCode + "] Unit " + ItemState[sCode].unitCount + " 추가매수"); } } // 청산 if (currentQty > 0) { var stopPrice = ItemState[sCode].lastPrice - (vN * 2); if (curClose <= stopPrice || curClose < vLowExit || curClose < vMaLong) { Account1.OrderSell(sCode, currentQty, 0, 1); ItemState[sCode] = { unitCount: 0, lastPrice: 0 }; Main.MessageLog("[" + sCode + "] 전량 청산 로직 가동"); } }}// 보조 지표 함수function Cal_SMA(c, p) { var s=0; for(var i=0; i<p; i++) s+=c.GetClose(i); return s/p; }function Cal_Highest(c, s, p) { var m=0; for(var i=s; i<s+p; i++) m=Math.max(m, c.GetHigh(i)); return m; }function Cal_Lowest(c, s, p) { var m=9e9; for(var i=s; i<s+p; i++) m=Math.min(m, c.GetLow(i)); return m; }function Cal_ATR(c, p) { var st=0; for(var i=0; i<p; i++) { var t = Math.max(c.GetHigh(i)-c.GetLow(i), Math.abs(c.GetHigh(i)-c.GetClose(i+1)), Math.abs(c.GetLow(i)-c.GetClose(i+1))); st += t; } return st/p;}
프로필 이미지
3프로
2026-02-09
78
글번호 230466
답변완료

[선물] 청산 확인 후 진입

YesSpot을 이용하여 선물 자동매매를 구현하고 있습니다.선물 매매 시 Buy/Sell 시그널 발생하기 바로 직전에 ExitShort/ExitLong 시그널이 발생하면 청산 주문을 내는데, 청산주문 후에 따르는 OnOrderResponse/OnNotifyFill이 발생하기 전에 빠르게 Buy/Sell 시그널이 발생하여 청산주문과 같은 포지션으로 진입주문을 내게되는데 이전 청산주문의 OnNotifyFill을 확인하고 진입주문할 수 있는 방법이 있을까요? 어떤 방법으로 청산 완료를 확인하고 재진입할 수 있는지 조언 부탁드립니다. 감사합니다.
프로필 이미지
마테홀릭
2026-02-08
81
글번호 230432