커뮤니티

예스랭귀지 Q&A

글쓰기

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

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

부탁드립니다.

트레이딩뷰 지표 중 일부수식입니다. 변환 부탁드립니다. mode = input.string("Range", "Weight Mode", options=["Range", "Body", "Both"]) rangeWeightB = (high - low) bodyWeightB = math.abs(close - open) weightB = mode == "Range" ? rangeWeightB : mode == "Body" ? bodyWeightB : (rangeWeightB + bodyWeightB) / 2.0 normWeightB = weightB / ta.sma(weightB, length) alpha = 2.0 / (length + 1) var float swemaB = na swemaB := na(swemaB[1]) ? src : swemaB[1] + alpha * normWeightB * (src - swemaB[1])
프로필 이미지
bw
2025-09-30
200
글번호 194402
종목검색
답변완료

수식작성 질문입니다

하루에 1번만 거래(하루에 매수,매도 조건을 모두 만족하는 경우 매수 상태면 매도 조건만 유효, 매도 상태면 매수 조건만 유효) 의 수식을 알고싶습니다. 항상 감사합니다 선생님
프로필 이미지
추세추종중독자
2025-09-30
171
글번호 194399
시스템
답변완료

94464 청산조건식 다시한번 부탁드립니다.

수정해주신 수식을 사용해도 오류가 개선되지 않네요. 혹시 for문을 이용해서 수식을 풀어야 되는지요? 다시한번 부탁드립니다.
프로필 이미지
eel
2025-09-30
140
글번호 194398
시스템
답변완료

부틱드립니다

수고하십니다 예스로 부탁드립니다 // This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International // https://creativecommons.org/licenses/by-nc-sa/4.0/ // © Zeiierman { //@version=6 indicator("AI-Weighted RSI (Zeiierman)", overlay=false, max_lines_count=500, max_labels_count=500, precision = 1) //~~} // ~~ Tooltips { var string t1 = "RSI lookback length computed on the current timeframe." var string t2 = "Moving Average lookback length computed on RSI." var string t3 = "Rolling window for correlation learning and z-scoring.." //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~} // ~~ Inputs { rsiLen = input.int(14, "RSI Length", minval=2, group="Rsi Settings", tooltip=t1) sigLen = input.int(20, "Signal Length", minval=2, group="Rsi Settings", tooltip=t2) learnLen = input.int(20, "Learning Window", minval=1, group="Learning / Prediction", tooltip=t3) //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~} // ~~ Per-bar features { retLog = math.log(close / nz(close[1], close)) rsiVal = ta.rsi(close, rsiLen) atrPct = ta.atr(200) / close vol = volume volLogChg = math.log(vol / nz(vol[1], vol)) //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~} // ~~ Target (y): prior bar RSI { y_rsi = rsiVal[1] //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~} // ~~ Predictors (X): prior-bar values of each feature (aligned with y) { x_ret = nz(retLog[1]) x_rsi = nz(rsiVal[1]) x_atrp = nz(atrPct[1]) x_vchg = nz(volLogChg[1]) x_vol = nz(vol[1]) //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~} // ~~ Utilities { f_z(src, len) => m = ta.sma(src, len) s = ta.stdev(src, len) s > 0 ? (src - m) / s : 0 f_corr(a, b, len) => ta.correlation(a, b, len) //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~} // ~~ Top-K indices by value { f_topk_indices(arr) => sz = arr.size() kk = math.min(5, sz) tmp = array.new_float(sz, 0.0) for i = 0 to sz - 1 tmp.set(i, nz(arr.get(i))) out = array.new_int() for n = 0 to kk - 1 maxI = 0 maxV = tmp.get(0) for j = 1 to sz - 1 vj = tmp.get(j) take = na(maxV) or (not na(vj) and vj > maxV) if take maxV := vj maxI := j out.push(maxI) tmp.set(maxI, na) out //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~} // ~~ Feature S e leCTion via correlations { corrs_abs_ret = math.abs(nz(f_corr(y_rsi, x_ret, learnLen))) corrs_abs_rsi = math.abs(nz(f_corr(y_rsi, x_rsi, learnLen))) corrs_abs_atrp = math.abs(nz(f_corr(y_rsi, x_atrp, learnLen))) corrs_abs_vchg = math.abs(nz(f_corr(y_rsi, x_vchg, learnLen))) corrs_abs_vol = math.abs(nz(f_corr(y_rsi, x_vol, learnLen))) corrs = array.from(corrs_abs_ret, corrs_abs_rsi, corrs_abs_atrp, corrs_abs_vchg, corrs_abs_vol) topIdx = f_topk_indices(corrs) //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~} // ~~ Z-scored current levels of each predictor series { xz_ret = nz(f_z(x_ret, learnLen)) xz_rsi = nz(f_z(x_rsi, learnLen)) xz_atrp = nz(f_z(x_atrp, learnLen)) xz_vchg = nz(f_z(x_vchg, learnLen)) xz_vol = nz(f_z(x_vol, learnLen)) featZ = array.from(xz_ret, xz_rsi, xz_atrp, xz_vchg, xz_vol) //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~} // ~~ Signed “coefficients” ~ correlations on standardized inputs { coef_ret = nz(f_corr(y_rsi, x_ret, learnLen)) coef_rsi = 1.0 // Hardcoded: always 1, since x_rsi == y_rsi coef_atrp = nz(f_corr(y_rsi, x_atrp, learnLen)) coef_vchg = nz(f_corr(y_rsi, x_vchg, learnLen)) coef_vol = nz(f_corr(y_rsi, x_vol, learnLen)) coef = array.from(coef_ret, coef_rsi, coef_atrp, coef_vchg, coef_vol) //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~} // ~~ Prediction from S e leCTed features: sum_i corr_i * z(feature_i) { f_pred(topIdxArr, coefArr, featArr) => s = 0.0 k = topIdxArr.size() for i = 0 to k - 1 idx = topIdxArr.get(i) c = coefArr.get(idx) z = featArr.get(idx) s += (nz(c) * nz(z)) s pred_rsi_z = f_pred(topIdx, coef, featZ) //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~} // ~~ Map z back to RSI level using rolling mean/std of the target { rsi_mean = ta.sma(y_rsi, learnLen) rsi_std = ta.stdev(y_rsi, learnLen) pred_rsi = nz(rsi_mean) + nz(rsi_std) * pred_rsi_z //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~} // ~~ Map prediction → “weight” { rsiWeight = math.max(-2, math.min(2, (50 - nz(pred_rsi)) / 50)) * -1 ma_rsi = ta.sma(rsiWeight,sigLen) //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~} // ~~ Plots { rsiPlot = plot(rsiWeight, "AI-Weighted RSI", color=#7E57C2) rsiMa = plot(ma_rsi, "AI-Weighted RSI Signal Line", color=color.yellow) rsiUpperBand = hline(0.5, "AI-Weighted RSI Upper Band", color=#787B86) midline = hline(0, "AI-Weighted RSI Middle Band", color=color.new(#787B86, 50)) rsiLowerBand = hline(-0.5, "AI-Weighted RSI Lower Band", color=#787B86) fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="AI-Weighted RSI Background Fill") midLinePlot = plot(0, color = na, editable = false, display = display.none) fill(rsiPlot, midLinePlot, 0.5, 0, top_color = color.new(color.lime, 0), bottom_color = color.new(color.lime, 100), title = "Overbought Gradient Fill") fill(rsiPlot, midLinePlot, 0, -0.5, top_color = color.new(color.red, 100), bottom_color = color.new(color.red, 0), title = "Oversold Gradient Fill") //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
프로필 이미지
파생돌이
2025-09-30
426
글번호 194396
지표
답변완료

수식문의(LRL)

일반 봉차트에서 아래 수식과 조건을 만족하는 종목을 검색코자 합니다. wma1 = wavg(C, len); // TEMA 계산 ema1_1 = eavg(wma1, len); ema1_2 = eavg(ema1_1, len); ema1_3 = eavg(ema1_2, len); TEWMA1 = 3 * ema1_1 - 3 * ema1_2 + ema1_3; len2 = len * multi; wma2 = wavg(C, len2); ema2_1 = eavg(wma2, len2); ema2_2 = eavg(ema2_1, len2); ema2_3 = eavg(ema2_2, len2); TEWMA2 = 3 * ema2_1 - 3 * ema2_2 + ema2_3; TEWMA = (TEWMA1 + TEWMA2) / 2; (지표변수 LEN=50, MULTI=1.75) * LRL50이 TEWMA를 돌파 시 검색.
프로필 이미지
ksks
2025-09-30
142
글번호 194393
종목검색
답변완료

수식으로 된다면 부탁드립니다

// TEWMA - 삼중 지수 가중 이동 평균 지표 Input : len(50), // 기본 기간 multi(1.75), // 승수 크기(12) ; // 텍스트 크기 Vars : len2(0), // 계산된 두 번째 기간 TEWMA1(0), // 첫 번째 TEWMA 값 TEWMA2(0), // 두 번째 TEWMA 값 TEWMA(0), // 최종 TERWMA 값 Signal(0), // 트랜드 신호 (-1 : 하락, 1 : 상승) dir(0), // 방향 변수 (텍스트 신호용) Long(false), // 상승 조건 Short(false), // 하락 조건 tx(0) ; // 텍스트 객체 // 두 번째 기간 계산 (len * multi를 반올림) len2 = Round(len * multi, 0); // TEWMA1 계산: TEMA(WMA(종가, len), len) var : wma1(0), ema1_1(0), ema1_2(0), ema1_3(0); wma1 = wma(C, len) ; // 가중 이동 평균 ema1_1 = Ema(wma1, len) ; // 첫 번째 지수 이동 평균 ema1_2 = Ema(ema1_1, len) ; // 두 번째 지수 이동 평균 ema1_3 = Ema(ema1_2, len) ; // 세 번째 지수 이동 평균 TEWMA1 = 3 * ema1_1 - 3- ema1_2 + ema1_3 ; //TEMA공식 // TEWMA2 계산: TEMA(WMA(종가, len2), len2) var : wma2(0), ema2_1(0), ema2_2(0), ema2_3(0); wma1 = wma(C, len2) ; // 가중 이동 평균 ema2_1 = Ema(wma2, len2) ; // 첫 번째 지수 이동 평균 ema2_2 = Ema(ema2_1, len2) ; // 두 번째 지수 이동 평균 ema2_3 = Ema(ema2_2, len2) ; // 세 번째 지수 이동 평균 TEWMA2 = 3 * ema2_1 - 3 * ema2_2 + ema2_3 ; // TEMA공식 //최종 TEWMA 계산 (두 값의 평균) TEWMA = (TEWMA1 + TEWMA2) / 2 ; //트랜드 조건 정의 Long = TEWMA > TEWMA[1] ; // 현재 TEWMA가 이전 값 보다 크면 상승 Short = TEWMA < TEWMA[1] ; // 현재 TEWMA가 이전 값 보다 작으면 하락 // 신호 상태 업데이트 if Long then { signal = 1; // 상승 신호 dir = 1 ; // dir 변수도 함께 업데이트 } if Short then { signal = -1; // 하락 신호 dir = -1 ; // dir 변수도 함께 업데이트 } // 지표 출력 (색상은 차트 설정에서 수동 변경 필요) Plot1(TEWMA, "TEWMA") ; // 메인 TEWMA 라인 Plot2(TEWMA1, "TEWMA1") ; // 첫 번째 TEWMA 라인 Plot3(TEWMA2, "TEWMA2") ; // 두 번째 TEWMA 라인 // 상승 신호 (이전이 하락에서 상승으로 전환) if dir == 1 and dir[1] == -1 Then { tx = Text_New(sDate, sTime, low, "▲") ; Text_SetStyle(tx, 2, 0) ; Text_SetSize(tx, 크기) ; Text_SetColor(tx, Black) ; } // 하락 신호 (이전이 상승에서 하락으로 전환) if dir == -1 and dir[1] == 1 Then { tx = Text_New(sDate, sTime, high, "▼") ; Text_SetStyle(tx, 2, 1) ; Text_SetSize(tx, 크기) ; Text_SetColor(tx, Black) ; } /* // 알림 기능 (Alert 함수 사용) if Long then { Alert("TEWMA Long 신호 발생") ; } if Short then { Alert("TEWMA Long 신호 발생") ; } 위 수식을 예스 코인 차트에 적용하면 지표는 크게 나오고 봉 차트는 일자로 나오게 되는데 정상적인 차트로 볼 수가 있나요? 검증 부탁드립니다
프로필 이미지
볼라레
2025-09-29
287
글번호 194392
지표
답변완료

키움수식 변환 요청드립니다

노고에 항상 감사드립니다. 아래 키움 신호수식을 예스트레이더 수식으로 변경 부탁드립니다. bol = BBandsup(20, 2, 25); ilmok = shift(close, 26+1); final = Valuewhen(1, crossup(ilmok, bol), bol); 감사합니다.
프로필 이미지
진은광
2025-09-29
172
글번호 194391
종목검색
답변완료

수식 문의드립니다.

안녕하세요. 아래 키움 수식인데 예스랭귀지 종목 검색식으로 변경 부탁드립니다. 감사합니다. A=Highest(V,20); B=ValueWhen(1,V>A(1),(O+C+L+H+C)/5); A1=Highest(V,60); B1=ValueWhen(1,V>A1(1),(O+C+L+H+C)/5); B>B1 && B(1)<=B1(1)
프로필 이미지
vhouse
2025-09-29
144
글번호 194390
검색
답변완료

변환 부탁드립니다

//@version=5 indicator("VWAP Bands", overlay=true) var float vwapsum = na var float volumesum = na var float v2sum = na var float myvwap = na var float dev = na var float prevwap = na showPWAP = input(false, title="Show Previous VWAP Close") upr1 = input(1.01, title="+1 Projection", group = "Projection One") dpr1 = input(1.01, title="-1 Projection", group = "Projection One") upr2 = input(1.62, title="+2 Projection", group = "Projection Two") dpr2 = input(1.62, title="-2 Projection", group = "Projection Two") upr3 = input(2.62, title="+3 Projection", group = "Projection Three") dpr3 = input(2.62, title="-3 Projection", group = "Projection Three") showPr1 = input(true, title="Show First Projection", group = "Projection One") showPr2 = input(true, title="Show Second Projection", group = "Projection Two") showPr3 = input(true, title="Show Third Projection", group = "Projection Three") start = request.security(syminfo.tickerid, "D", time) newSession = ta.change(start) ? 1 : 0 vwapsum := newSession ? hl2 * volume : vwapsum[1] + hl2 * volume volumesum := newSession ? volume : volumesum[1] + volume v2sum := newSession ? volume * hl2 * hl2 : v2sum[1] + volume * hl2 * hl2 myvwap := vwapsum / volumesum dev := math.sqrt(math.max(v2sum / volumesum - myvwap * myvwap, 0)) trendcolor = close > myvwap ? color.new(color.lime, 0) : color.new(color.red, 0) A = plot(myvwap, style=plot.style_line, title="VWAP", color=trendcolor) trendcolor2 = close > (myvwap + upr1 * dev) ? color.new(color.lime, 75) : color.new(color.red, 75) U1 = plot(showPr1 ? myvwap + upr1 * dev : na, style=plot.style_line, title="VWAP Upper (1)", color=trendcolor2) trendcolor3 = close > (myvwap - dpr1 * dev) ? color.new(color.lime, 75) : color.new(color.red, 75) D1 = plot(showPr1 ? myvwap - dpr1 * dev : na, style=plot.style_line, title="VWAP Lower (1)", color=trendcolor3) trendcolor4 = close > (myvwap + upr2 * dev) ? color.new(color.lime, 50) : color.new(color.red, 50) U2 = plot(showPr2 ? myvwap + upr2 * dev : na, style=plot.style_line, title="VWAP Upper (2)", color=trendcolor4) trendcolor5 = close > (myvwap - dpr2 * dev) ? color.new(color.lime, 50) : color.new(color.red, 50) D2 = plot(showPr2 ? myvwap - dpr2 * dev : na, style=plot.style_line, title="VWAP Lower (2)", color=trendcolor5) trendcolor6 = close > (myvwap + upr3 * dev) ? color.new(color.lime, 45) : color.new(color.red, 45) U3 = plot(showPr3 ? myvwap + upr3 * dev : na, style=plot.style_line, title="VWAP Upper (3)", color=trendcolor6) trendcolor7 = close > (myvwap - dpr3 * dev) ? color.new(color.lime, 45) : color.new(color.red, 45) D3 = plot(showPr3 ? myvwap - dpr3 * dev : na, style=plot.style_line, title="VWAP Lower (3)", color=trendcolor7) prevwap := newSession ? myvwap[1] : prevwap[1] plot(showPWAP ? prevwap : na, style=plot.style_line, color=close > prevwap ? color.new(color.aqua, 35) : color.new(color.fuchsia, 35), linewidth=1, title="Previous VWAP")
프로필 이미지
고저중
2025-09-29
281
글번호 194389
지표