커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
3394
글번호 230811
답변완료
94464 청산조건식 다시한번 부탁드립니다.
수정해주신 수식을 사용해도 오류가 개선되지 않네요.
혹시 for문을 이용해서 수식을 풀어야 되는지요?
다시한번 부탁드립니다.
2025-09-30
178
글번호 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
660
글번호 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를 돌파 시 검색.
2025-09-30
184
글번호 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
470
글번호 194392
답변완료
키움수식 변환 요청드립니다
노고에 항상 감사드립니다.
아래 키움 신호수식을 예스트레이더 수식으로 변경 부탁드립니다.
bol = BBandsup(20, 2, 25);
ilmok = shift(close, 26+1);
final = Valuewhen(1, crossup(ilmok, bol), bol);
감사합니다.
2025-09-29
216
글번호 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)
2025-09-29
185
글번호 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
351
글번호 194389
고저중 님에 의해서 삭제되었습니다.
2025-09-29
0
글번호 194388
답변완료
부탁드립니다.
1.종가의 아래 꼬리가 2개연속 하여 몸통보다 길면 파란색으로, 종가의 위 꼬리가 2개 연속하여 몸통보다 길면 빨강색으로 구현해 주세요
2. 종가가 최근 3개봉의 최고가보다 높으면 파란색으로, 종가가 최근 3개봉의 최저가보다 낮으면 빨강색으로 구현해 주세요
3.현재 종가가 최근 20개봉 이내에서 양봉이 음봉보다 많으면 파란색으로, 최근 20개봉 이내에서 음봉이 양봉마다 많으면 빨강색으로 구현해 주세요(양봉 다음 도지는 양봉으로 계산, 음봉 다음 도지는 음봉으로 계산)
2. 현재 종가가 최근 20개봉 이내에서 양봉일 때 거래량이 음봉일 때 거래량보다 많으면 파란색으로, 최근 20개봉 이내에서 음봉일 때 거래량이 양봉일 때 거래량보다 많으면 빨강색으로 구현해 주세요(도지의 경우에는 직전 양봉이나 직전 음봉으로 계산)
고맙습니다.
2025-09-29
173
글번호 194384