커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내

안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
프로필 이미지
예스스탁
2026-02-27
3369
글번호 230811
지표
답변완료

부탁드립니다

수고하십니다 아래수식을 오류 없게 수정부탁드립니다inputs: Length(15), ShowLevels(True), UpColor(Color.Green), DnColor(Color.Blue);variables: emaValue(0), correction(0), zlma(0), zlmaLag3(0), zlmaColor(0), emaColor(0), signalUp(False), signalDn(False), atrValue(0), topLevel(0), botLevel(0), lastBoxTop(0), lastBoxBot(0), lastSignal(0), barsSinceSignal(0);{Calculate Zero-Lag Moving Average}emaValue = Average(Close, Length);correction = Close + (Close - emaValue);zlma = Average(correction, Length);{Get previous ZLMA value (3 bars ago)}zlmaLag3 = zlma[3];{Determine ZLMA color based on direction}if zlma > zlmaLag3 then zlmaColor = UpColorelse if zlma < zlmaLag3 then zlmaColor = DnColorelse zlmaColor = RGB(128, 128, 128); {Gray for neutral}{Determine EMA color}if emaValue < zlma then emaColor = UpColorelse emaColor = DnColor;{Calculate signals}signalUp = CrossOver(zlma, emaValue);signalDn = CrossUnder(zlma, emaValue);{Calculate ATR for trend levels}atrValue = AvgTrueRange(200);{Plot the moving averages}Plot1(zlma, "ZLMA", zlmaColor);Plot2(emaValue, "EMA", emaColor);{Plot signals as diamonds}if signalUp then PlotPaint(zlma, "SignalUp", UpColor, 0, 3)else if signalDn then PlotPaint(zlma, "SignalDn", DnColor, 0, 3);{Handle trend levels (boxes)}if ShowLevels then begin if signalUp then begin topLevel = zlma; botLevel = zlma - atrValue; lastBoxTop = topLevel; lastBoxBot = botLevel; lastSignal = 1; {1 for up signal} barsSinceSignal = 0; end else if signalDn then begin topLevel = zlma + atrValue; botLevel = zlma; lastBoxTop = topLevel; lastBoxBot = botLevel; lastSignal = -1; {-1 for down signal} barsSinceSignal = 0; end; barsSinceSignal = barsSinceSignal + 1; {Draw trend level based on last signal} if lastSignal = 1 then begin {Draw horizontal line for bullish trend level} DrawLine("BullTrendTop", BarIndex-barsSinceSignal, lastBoxTop, BarIndex, lastBoxTop, UpColor); DrawLine("BullTrendBot", BarIndex-barsSinceSignal, lastBoxBot, BarIndex, lastBoxBot, UpColor); end else if lastSignal = -1 then begin {Draw horizontal line for bearish trend level} DrawLine("BearTrendTop", BarIndex-barsSinceSignal, lastBoxTop, BarIndex, lastBoxTop, DnColor); DrawLine("BearTrendBot", BarIndex-barsSinceSignal, lastBoxBot, BarIndex, lastBoxBot, DnColor); end; {Add labels when price crosses trend levels} if lastSignal = 1 and CrossUnder(High, lastBoxBot) and emaValue > zlma then DrawText("DownArrow", "▼", BarIndex, High, 0, DnColor); if lastSignal = -1 and CrossOver(Low, lastBoxTop) and emaValue < zlma then DrawText("UpArrow", "▲", BarIndex, Low, 0, UpColor);end;
프로필 이미지
파생돌이
2025-11-09
329
글번호 227792
지표
답변완료

수정부탁드립니다

수고 많으십니다.1계약으로 시작해서 수익나면 2계약으로 늘리고 또수익나면 3계으로 늘리고, 4번재 수익나면 다시 1계약으로 돌아오고 5번쨰 수익나면 2계약으로 느릴고 6번쨰 수익나면 3계약으로 늘리고..이렇게 반복하고 손실나면 바로 1계약으로 돌아오고.. 이런 전략을 쓰려고 하는데 코딩에 오류가 많네요..올바로 수정부탁드립니다. 감사드립니다.//-------------------------------------------------------------------------// [1] 입력 변수 (INPUTS)//-------------------------------------------------------------------------Input : Period(5), Period1(3), Period2(3);Input : InitialContracts(1); // 최초 베팅 계약 수 (1)//-------------------------------------------------------------------------// **[2] 초기화 로직 (오류 방지 필수)**//-------------------------------------------------------------------------If InitialEntry Then Begin G_Contracts = InitialContracts; // **Global Variable 창에 등록 필수** G_WinStreak = 0; // **Global Variable 창에 등록 필수**End;//-------------------------------------------------------------------------// [3] 배열 및 변수 선언//-------------------------------------------------------------------------Array : MonthO[99](0), MonthC[99](0); // 월봉 추적용Var : Cnt(0), StoK(0), StoD(0);Var : TicksToPoints(0); //-------------------------------------------------------------------------// [4] 지표 계산 (Stochastics)//-------------------------------------------------------------------------StoK = StochasticsK(Period, Period1);StoD = StochasticsD(Period, Period1, Period2);// TicksToPoints = 1 / MinTick; // MinTick 오류 방지를 위해 계산 줄 주석 처리 //-------------------------------------------------------------------------// [5] 월간 캔들 추적 로직 (추세 필터) - **Begin/End 및 Month() 함수 사용으로 오류 해결**//-------------------------------------------------------------------------// 월이 바뀌었을 때 (정확한 월 변경 감지)if Month() <> Month()[1] ThenBegin // Begin 블록 시작 For cnt = 99 DownTo 1 Begin MonthO[cnt] = MonthO[cnt-1]; MonthC[cnt] = MonthC[cnt-1]; End; MonthO[0] = O; // 새로운 월봉 시가 저장End; // End 블록 끝MonthC[0] = C; // 현재 월봉 종가 업데이트//-------------------------------------------------------------------------// [6] 계약 수 결정 함수 정의 (자금 관리) - **Begin/End 사용으로 오류 해결**//-------------------------------------------------------------------------Function GetContractSize()Begin // Begin 블록 시작 // 전역 변수에 저장된 현재 계약 수를 반환 return G_Contracts;End; // End 블록 끝//-------------------------------------------------------------------------// [7] 자금 관리 로직 (역마틴게일 업데이트) - **Begin/End 사용으로 오류 해결**//-------------------------------------------------------------------------If (MarketPosition == 0) Then // 포지션이 청산된 상태에서만 작동Begin // Begin 블록 시작 // 1. 승리 시 (직전 손익이 0 초과) if (MP_LossProfit(1) > 0) Then Begin G_WinStreak = G_WinStreak + 1; // 연속 승리 횟수 증가 // 3단계 역마틴게일 로직 if (G_WinStreak == 1) Then G_Contracts = 2; // 1단계 승리 후 2계약 else if (G_WinStreak == 2) Then G_Contracts = 3; // 2단계 승리 후 3계약 else if (G_WinStreak >= 3) Then // 3단계 승리 도달 시 초기화 Begin G_Contracts = InitialContracts; G_WinStreak = 0; End; End // 2. 패배 시 (직전 손익이 0 이하) else if (MP_LossProfit(1) <= 0) Then Begin G_Contracts = InitialContracts; G_WinStreak = 0; End;End; // End 블록 끝//-------------------------------------------------------------------------// [8] 진입 및 청산 신호 (수량 적용) - **Begin/End 사용으로 오류 해결**//-------------------------------------------------------------------------If (MarketPosition == 0) ThenBegin // 진입 로직 시작 // 매수 진입 조건 (월봉 양봉 & StoK > StoD 상향 돌파) If (MonthC[0] > MonthO[0] and CrossUp(StoK, StoD)) Then Begin Buy("LE", NextBar, Market, GetContractSize()); End; // 매도 진입 조건 (월봉 음봉 & StoK < StoD 하향 돌파) If (MonthC[0] < MonthO[0] and CrossDown(StoK, StoD)) Then Begin Sell("SE", NextBar, Market, GetContractSize()); End;End; // 진입 로직 끝// 청산 로직 (익절/손절) - **MinTick 오류 우회를 위해 포인트 값 그대로 사용**If (MarketPosition <> 0) ThenBegin // 청산 로직 시작 // 익절 청산 (Profit Target: 15포인트로 가정) SetProfitTarget(15); // 손절 청산 (Stop Loss: 10포인트로 가정) SetStopLoss(10);End; // 청산 로직 끝
프로필 이미지
사이버
2025-11-09
518
글번호 227791
시스템
답변완료

수식검토문의

input : 기간(15); var : myema(0),correction(0),myZLMA(0),R(0); myEMA = Ema(C, 기간); correction = C + (C - myEMA); myZLMA = Ema(correction, 기간) ; var1 = Ema(C,200); R = RSI(20); Var: vol_avg(0); vol_avg = Ma(V, 70);CrossUp(myZLMA[1] ,myEMA[1]) and C[1]>C[2]*1.02 and V[1] > vol_avg[1] * 3 and V[1] < vol_avg[1] * 50 and countif(var1 > var1[1],2) == 2 and R[1] >= 60 and CountIf(R<59.9,5)[2] == 5 and C[1]>var1[1] Then Find(1);모든 것이 1봉전에 발생하는 조건으로 바꿔봤는데 맞는건지 검토해주세요. (특히 끝부분(CountIf(R<59.9,5)[2] == 5)은 2봉전부터 5봉간 R<59.9가 맞나요?)별도로 종가와 200EMA와의 이격도를 표현할때는 어떻게 해야하나요?
프로필 이미지
ksks
2025-11-09
253
글번호 227790
종목검색
답변완료

색상좀 추가 요청 드림니다.

ㅇ 아래 수식에서 중간선이 생성 되는 데 앞의 중간선 보다 낮으면 블루 높으면 빨강 으로 색상 부여좀 부탁 드림니다.##input : n(20); var : idx(0),TF(0),box(0); var : HH(0),LL(0),TL1(0),TL2(0),TX1(0),str(""); var : DD(0),TT(0),half(0),mav(0),halfval(0); if Bdate != Bdate[1] Then idx = 0; Else idx = idx+1; TF = idx%n; if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF < TF[1]) Then { HH = H; LL = L; DD = sDate; TT = sTime; Box = Box_New(DD,TT,HH,NextBarSdate,NextBarStime,LL); Box_SetColor(box,Rgb(140,140,140)); Box_SetFill(box,true); half = Ceiling(TF/2); halfval = (HH+LL)/2; // TL1 = TL_New(sDate[half],sTime[half],HH,sdate[half],Stime[half],LL); TL2 = TL_New(DD,TT,mav,NextBarSdate,NextBarStime,mav); TL_SetColor(TL1,Rgb(255,0,255)); TL_SetColor(TL2,Rgb(255,0,255)); TL_SetSize(TL1,1); TL_SetSize(TL2,2); } Else { if HH > 0 and H > HH Then { HH = H; } if LL > 0 and L < LL Then { LL = L; } half = Ceiling(TF/2); halfval = (HH+LL)/2; Box_SetBegin(box,dd,tt,HH); Box_SetEnd(box,sDate,sTime,LL); TL_SetBegin(TL1,sDate[half],sTime[half],HH); TL_SetEnd(TL1,sDate[half],sTime[half],LL); TL_SetBegin(TL2,DD,TT,halfval); TL_SetEnd(TL2,sDate,sTime,halfval); str = "최고가:"+NumToStr(HH,2)+"(+"+NumToStr((HH-C)/PriceScale,0)+"틱)"+ NewLine+"최저가:"+NumToStr(LL,2)+"(-"+NumToStr((C-LL)/PriceScale,0)+"틱)"+ NewLine+"현재가:"+NumToStr(C,2); Text_SetString(TX1,str); Text_SetLocation(TX1,sDate[half],sTime[half],halfval); }ㅇ 고맙습니다.
프로필 이미지
요타
2025-11-09
244
글번호 227789
지표
답변완료

종목검색

파일첨부 합니다
프로필 이미지
nams60
2025-11-09
206
글번호 227788
종목검색
답변완료

문의드립니다

시간제약없이처음 진입신호에서만 진입한 이후청산 및 트레일링 스탑신호 받아 청산되면다시 진입 신호나오지 않고마무리되는 로직을 활용하고 싶습니다.도움주시면 정말 감사드리겠습니다.
프로필 이미지
dnr14
2025-11-09
166
글번호 227787
시스템
답변완료

문의드립니다

안녕하세요? 1.사진처럼 신호가발생전 예비신호가 뜰때 알림음 을 받고싶습니다 예스씨스템에서 가능한가요? 만일가능하다면 아래조건문에 추가부탁드립니다 if Condition1 == true Then { # 매수/매도청산 if t==-1 Then If C > value Then { Buy(); } # 매도/매수청산 if t==1 Then If C < value Then { Sell(); } }2.첨부수식이 에러가 있습니다 부탁드립니다#SYSTEMVar: swingHi(0), swingLo(0), prevHiBar(0), prevLoBar(0);swingHi = SwingHigh(1, H, 3, 1, 200);swingLo = SwingLow(1, L, 3, 1, 200);If swingHi > 0 Then Begin prevHiBar = CurrentBar;End;If swingLo > 0 Then Begin prevLoBar = CurrentBar;End;If (prevHiBar = CurrentBar[1]) and (Close < Close[1]) Then Begin Sell("TopOnce");End;If (prevLoBar = CurrentBar[1]) and (Close > Close[1]) Then Begin Buy("BottomOnce");End;
프로필 이미지
새벽에
2025-11-09
218
글번호 227786
시스템
답변완료

질문 있습니다.

질문 요점: 일일 손실 제한 로직 추가 후 시스템 매매 결과가 사라집니다안녕하세요. 기존에 잘 작동하던 시스템 매매에 일일 손실 제한 기능을 추가했는데,해당 기능을 켜면(UseDailyStop=1) 매매 신호와 평가표가 모두 사라지는 문제가 발생합니다.===========================================증상===========================================1. UseDailyStop(0) 설정 시: 정상 작동 2. UseDailyStop(1) 설정 시: - 차트는 보임 - 매매 신호 없음 - 평가표 결과 없음 - 오류 메시지 없음===========================================구현하려는 기능===========================================매일 아침 로그인 시 Input으로 수익/손실을 입력하여 일일 손실 한도를 관리하는 시스템입니다.예시:- 첫째 주 결과: +310만원- 둘째 주 월요일 Input: ├─ TodayStartProfit(310) └─ MaxDailyLoss(-120) → 오늘 -120만원 추가 손실 시 강제 청산 + 그날 진입 중단or- 첫째 주 결과: -60만원- 둘째 주 월요일 Input: ├─ TodayStartProfit(-60) └─ MaxDailyLoss(-100) → 오늘 -100만원 추가 손실 시 강제 청산 + 그날 진입 중단이렇게 구현을 하고 싶은데요.===========================================추가한 코드===========================================// === Input ===Input : UseDailyStop(0); // 0=OFF, 1=ONInput : TodayStartProfit(0); // 오늘 시작 수익Input : MaxDailyLoss(-100); // 최대 허용 손실// === 변수 ===Var : TodayProfit(0); Var : DailyTradingAllowed(1); // === 손실 제한 체크 ===if UseDailyStop == 0 or (TodayStartProfit == 0 and MaxDailyLoss == 0) Then DailyTradingAllowed = 1;Else { TodayProfit = NetProfit - TodayStartProfit; if TodayProfit <= MaxDailyLoss Then DailyTradingAllowed = 0; Else DailyTradingAllowed = 1;}// === 강제 청산 ===if DailyTradingAllowed == 0 and MarketPosition != 0 Then { if MarketPosition == 1 Then { ExitLong("DayL-"); LastExitDate = sDate; LastExitTime = CurrentTime; WaitMinutes = 300; InWaitPeriod = 1; } if MarketPosition == -1 Then { ExitShort("DayS-"); LastExitDate = sDate; LastExitTime = CurrentTime; WaitMinutes = 300; InWaitPeriod = 1; }}// === 진입 조건에 추가 ===if MarketPosition == 0 and ... and DailyTradingAllowed == 1 Then { Buy("L", ...);}===========================================시도한 해결 방법===========================================1. 청산 로직을 조건문 밖으로 분리 → 실패2. 변수명 중복 확인 → 없음3. ExitLong/Short 이름 변경 (DayL-, DayS-) → 실패4. Else 블록 추가하여 DailyTradingAllowed 재설정 → 실패===========================================질문===========================================1. NetProfit를 이런 식으로 사용하는 게 문제가 될까요?2. Exit 명령 위치나 조건에 제약사항이 있을까요?3. 이런 일일 손실 제한 기능을 구현할 다른 방법이 있을까요?4. 혹시 변수 초기화나 스코프 문제일 가능성이 있을까요?도움 부탁드립니다!감사합니다! ㅠㅠ
프로필 이미지
스오어스
2025-11-08
585
글번호 227784
시스템
답변완료

문의 드립니다

var1 = h[1];var2 = l[1];Plot1(var1, "고가");plot2(Var2, "저가");-------------------차트의 오른쪽 끝까지 라인이 나오게 부탁하는데요마지막봉의 값만 나오게 하고 싶습니다 (그전 봉의 값은 안나오게)
TL_new
프로필 이미지
러블리
2025-11-08
166
글번호 227783
지표