답변완료
부틱드립니다
수고하십니다
예스로 부탁드립니다
// 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")
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
답변완료
수식으로 된다면 부탁드립니다
// 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 신호 발생") ;
}
위 수식을 예스 코인 차트에 적용하면 지표는 크게 나오고 봉 차트는 일자로 나오게
되는데 정상적인 차트로 볼 수가 있나요?
검증 부탁드립니다
답변완료
변환 부탁드립니다
//@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")