예스스탁
예스스탁 답변
2025-05-27 11:19:05
안녕하세요
예스스탁입니다.
input : kalmanAlpha(0.01);
input : kalmanBeta(0.1);
input : kalmanPeriod(77);
input : dev(1.2);
input : supertrendFactor(0.7);
input : supertrendAtrPeriod(7);
input : cgreen(Green);
input : cred(Red);
var: v1(nan),v2(1.0),v3(0),v4(0),v5(Nan),k(0);
v3 = kalmanAlpha*kalmanPeriod;
if IsNan(v1) == true Then
v1 = close[1];
v5 = v1;
v4 = v2 / (v2 + v3);
v1 = v5 + v4 * (close - v5);
v2 = (1 - v4) * v2 + kalmanBeta / kalmanPeriod;
k = v1;
#k = kalman(close, kalmanPeriod, kalmanlApha, kalmanBeta)
var : src(0),alpha(0),A(0),upperBand(0),lowerBand(0),prevLowerBand(0),prevUpperBand(0);
var : direction(Nan),superTrend(Nan),prevSuperTrend(0);
src = k;
alpha = 1 / supertrendAtrPeriod ;
A = IFf(IsNan(A[1]) == true, ma(TrueRange,supertrendAtrPeriod) , alpha * TrueRange + (1 - alpha) * IFf(isnan(A[1])==true,0,A[1]));
upperBand = src + supertrendFactor * A;
lowerBand = src - supertrendFactor * A;
prevLowerBand = IFF( IsNan(lowerBand[1]) ==true,0,lowerBand[1]);
prevUpperBand = IFF( IsNan(upperBand[1]) ==true,0,upperBand[1]);
lowerBand = iff(lowerBand > prevLowerBand or k[1] < prevLowerBand , lowerBand , prevLowerBand);
upperBand = iff(upperBand < prevUpperBand or k[1] > prevUpperBand , upperBand , prevUpperBand);
prevSuperTrend = superTrend[1];
if IsNan(a[1]) == true Then
direction = 1;
else if prevSuperTrend == prevUpperBand Then
direction = iff(k > upperBand , -1 , 1);
else
direction = iff(k < lowerBand , 1 , -1);
superTrend = iff(direction == -1 , lowerBand , upperBand);
var : vola(0),upper(0),lower(0),trend(0),ktrend(0);
var : midbody(0),tx(0);
vola = wma(high-low, 200);
upper = k+vola*dev;
lower = k-vola*dev;
midbody = avg(close, open);
if close > upper Then
trend = 1;
else if close < lower Then
trend = -1;
if direction < 0 Then
ktrend = 1;
else if direction > 0 Then
ktrend = -1;
if ktrend * trend == 1 Then
Plot1(k,"k",Gray);
Else
NoPlot(1);
if trend == -1 or ktrend * trend == -1 Then
plot2(upper,"upper",iff(ktrend * trend == -1 , gray , IFf(ktrend == -1 , red ,gray)));
Else
NoPlot(2);
if trend == 1 or ktrend * trend == -1 Then
plot3(lower,"lower",iff(ktrend * trend == -1 , gray,iff(ktrend == 1 , green , gray)));
Else
NoPlot(3);
if CrossUp(ktrend * trend, 0) Then
{
tx = Text_New_Self(sdate,sTime,k,"●");
Text_SetStyle(tx,2,2);
Text_SetColor(tx,iff(trend == 1 , green , red));
Text_SetSize(tx,12);
}
즐거운 하루되세요
> 고도산 님이 쓴 글입니다.
> 제목 : 지표 변환 부탁드립니다.
> 번번히 폐를 끼치네요. TradingView 지표 변환 부탁드립니다.
/@version=6
indicator("Range Filtered Trend Signals [AlgoAlpha]", overlay=true)
groupKalman = "Kalman Filter"
kalmanAlpha = input.float(0.01, title="Kalman Alpha")
kalmanBeta = input.float(0.1, title="Kalman Beta")
kalmanPeriod = input.int(77, title="Kalman Period")
dev = input.float(1.2, title="Deviation")
groupSupertrend = "Supertrend"
supertrendFactor = input.float(0.7, title="Supertrend Factor")
supertrendAtrPeriod = input.int(7, title="ATR Period")
groupColors = "Colors"
green = input.color(#00ffbb, title="Bullish Color")
red = input.color(#ff1100, title="Bearish Color")
kalman(a, b, alpha, beta) =>
var float v1 = na
var float v2 = 1.0
var float v3 = alpha * b
var float v4 = 0.0
var float v5 = na
if na(v1)
v1 := a[1]
v5 := v1
v4 := v2 / (v2 + v3)
v1 := v5 + v4 * (a - v5)
v2 := (1 - v4) * v2 + beta / b
v1
pine_supertrend(k, factor, atrPeriod) =>
src = k
atr = ta.atr(atrPeriod)
upperBand = src + factor * atr
lowerBand = src - factor * atr
prevLowerBand = nz(lowerBand[1])
prevUpperBand = nz(upperBand[1])
lowerBand := lowerBand > prevLowerBand or k[1] < prevLowerBand ? lowerBand : prevLowerBand
upperBand := upperBand < prevUpperBand or k[1] > prevUpperBand ? upperBand : prevUpperBand
int _direction = na
float superTrend = na
prevSuperTrend = superTrend[1]
if na(atr[1])
_direction := 1
else if prevSuperTrend == prevUpperBand
_direction := k > upperBand ? -1 : 1
else
_direction := k < lowerBand ? 1 : -1
superTrend := _direction == -1 ? lowerBand : upperBand
[superTrend, _direction]
k = kalman(close, kalmanPeriod, kalmanAlpha, kalmanBeta)
[supertrend, direction] = pine_supertrend(k, supertrendFactor, supertrendAtrPeriod)
vola = ta.wma(high-low, 200)
upper = k+vola*dev
lower = k-vola*dev
midbody = math.avg(close, open)
var trend = 0
if close > upper
trend := 1
else if close < lower
trend := -1
ktrend = 0
if direction < 0
ktrend := 1
else if direction > 0
ktrend := -1
t = 70
t_ = 20
p1 = plot(ktrend * trend == 1 ? k : na, color=color.gray, style = plot.style_linebr, linewidth = 3, title = 'k')
m = plot(midbody, color=color.gray, display = display.none, title = 'midbody')
up = plot(trend == -1 or ktrend * trend == -1 ? upper : na, color=ktrend * trend == -1 ? color.gray : ktrend == -1 ? color.new(red, t) : color.gray, style = plot.style_circles, title = 'upper')
lo = plot(trend == 1 or ktrend * trend == -1 ? lower : na, color=ktrend * trend == -1 ? color.gray : ktrend == 1 ? color.new(green, t) : color.gray, style = plot.style_circles, title = 'lower')
plotchar(ta.crossover(ktrend * trend, 0) ? k : na, location = location.absolute, color=trend == 1 ? green : red, char="◉", size=size.tiny)
x = color.new(chart.bg_color, 80)
x_ = color.new(trend == -1 ? green:red, t)
//fill(p1, m, k, midbody, x, x_)
fill(p1, m, color = x_)
//fill(up, lo, ktrend * trend == -1 ? color.new(color.gray, 90) : na, "Range")
fill(up, lo, color = x_)