예스스탁
예스스탁 답변
2025-07-21 11:18:47
안녕하세요
예스스탁입니다.
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);
}
즐거운 하루되세요
> 씸풀 님이 쓴 글입니다.
> 제목 : 변환 부탁드립니다
> 다음의 pine editor용 코드를
1. supertrend 함수
2. kalman Filter 함수
3. 이 함수들을 사용한 지표로 변환 부탁 드립니다. 감사합니다.
(색깔은 Green, Red, Gray로만 표시하고 입력 변수 설명 등 불요)
//@version=6
indicator("Range Filtered Trend Signals [AlgoAlpha]", "AlgoAlpha - Range Filtered", true)
groupKalman = "Kalman Filter"
kalmanAlpha = input.float(0.01, title="Kalman Alpha", tooltip="The Alpha parameter controls the smoothing factor of the Kalman filter. A smaller value results in more smoothing, while a larger value makes the filter more responsive to price changes.", group=groupKalman)
kalmanBeta = input.float(0.1, title="Kalman Beta", tooltip="The Beta parameter influences the rate of change in the Kalman filter. It adjusts the filter's sensitivity to trend changes.", group=groupKalman)
kalmanPeriod = input.int(77, title="Kalman Period", tooltip="The Period defines the number of bars used in the Kalman filter calculation, affecting the filter's responsiveness to market movements.", group=groupKalman)
dev = input.float(1.2, title="Deviation", tooltip="The Deviation parameter sets the multiplier for the deviation from the trend line, affecting the width of the trend band.", group=groupKalman)
groupSupertrend = "Supertrend"
supertrendFactor = input.float(0.7, title="Supertrend Factor", tooltip="This Factor determines the multiplier for the ATR in the Supertrend calculation, affecting the distance of the trend line from the price.", group=groupSupertrend)
supertrendAtrPeriod = input.int(7, title="ATR Period", tooltip="The ATR Period specifies the number of bars used to calculate the Average True Range, which is a component of the Supertrend indicator.", group=groupSupertrend)
groupColors = "Colors"
green = input.color(#00ffbb, title="Bullish Color", tooltip="This color is used to indicate a bullish trend in the chart.", group=groupColors)
red = input.color(#ff1100, title="Bearish Color", tooltip="This color is used to indicate a bearish trend in the chart.", group=groupColors)
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)
m = plot(midbody, color=color.gray, display = display.none)
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)
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)
항상 도움 주심에 감사드립니다.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 변환 부탁드립니다
> 안녕하세요
예스스탁입니다.
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);
}
즐거운 하루되세요
> 씸풀 님이 쓴 글입니다.
> 제목 : 변환 부탁드립니다
> 다음의 pine editor용 코드를
1. supertrend 함수
2. kalman Filter 함수
3. 이 함수들을 사용한 지표로 변환 부탁 드립니다. 감사합니다.
(색깔은 Green, Red, Gray로만 표시하고 입력 변수 설명 등 불요)
//@version=6
indicator("Range Filtered Trend Signals [AlgoAlpha]", "AlgoAlpha - Range Filtered", true)
groupKalman = "Kalman Filter"
kalmanAlpha = input.float(0.01, title="Kalman Alpha", tooltip="The Alpha parameter controls the smoothing factor of the Kalman filter. A smaller value results in more smoothing, while a larger value makes the filter more responsive to price changes.", group=groupKalman)
kalmanBeta = input.float(0.1, title="Kalman Beta", tooltip="The Beta parameter influences the rate of change in the Kalman filter. It adjusts the filter's sensitivity to trend changes.", group=groupKalman)
kalmanPeriod = input.int(77, title="Kalman Period", tooltip="The Period defines the number of bars used in the Kalman filter calculation, affecting the filter's responsiveness to market movements.", group=groupKalman)
dev = input.float(1.2, title="Deviation", tooltip="The Deviation parameter sets the multiplier for the deviation from the trend line, affecting the width of the trend band.", group=groupKalman)
groupSupertrend = "Supertrend"
supertrendFactor = input.float(0.7, title="Supertrend Factor", tooltip="This Factor determines the multiplier for the ATR in the Supertrend calculation, affecting the distance of the trend line from the price.", group=groupSupertrend)
supertrendAtrPeriod = input.int(7, title="ATR Period", tooltip="The ATR Period specifies the number of bars used to calculate the Average True Range, which is a component of the Supertrend indicator.", group=groupSupertrend)
groupColors = "Colors"
green = input.color(#00ffbb, title="Bullish Color", tooltip="This color is used to indicate a bullish trend in the chart.", group=groupColors)
red = input.color(#ff1100, title="Bearish Color", tooltip="This color is used to indicate a bearish trend in the chart.", group=groupColors)
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)
m = plot(midbody, color=color.gray, display = display.none)
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)
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)