예스스탁
예스스탁 답변
2025-05-27 10:29:15
안녕하세요
예스스탁입니다.
input : length(25);
input : width(2);
input : color1(Green);
input : color2(Red);
input : transp(80);
var : src(0);
var : balpha(0),bnf_1(0),bnf_2(0),bnf_3(0),base(0);
var : valpha(0),vnf_1(0),vnf_2(0),vnf_3(0),val(0);
var : diff(0),signal_up(False),signal_dn(False);
var : upper3(0),upper2(0),upper1(0),lower1(0),lower2(0),lower3(0),tx(0);
src = close;
balpha = 2 / (length + 1);
bnf_1 = 0.0;
bnf_2 = 0.0;
bnf_3 = 0.0;
bnf_1 = (balpha * src) + ((1 - balpha) * IFF(IsNan(bnf_1[1])==true,0,bnf_1[1]));
bnf_2 = (balpha * bnf_1) + ((1 - balpha) * IFF(IsNan(bnf_2[1])==true,0,bnf_2[1]));
bnf_3 = (balpha * bnf_2) + ((1 - balpha) * IFF(IsNan(bnf_3[1])==true,0,bnf_3[1]));
base = bnf_3;
valpha = 2 / (length + 1);
vnf_1 = 0.0;
vnf_2 = 0.0;
vnf_3 = 0.0;
vnf_1 = (valpha * (high-low)) + ((1 - valpha) * IFF(IsNan(vnf_1[1])==true,0,vnf_1[1]));
vnf_2 = (valpha * vnf_1) + ((1 - valpha) * IFF(IsNan(vnf_2[1])==true,0,vnf_2[1]));
vnf_3 = (valpha * vnf_2) + ((1 - valpha) * IFF(IsNan(vnf_3[1])==true,0,vnf_3[1]));
val = vnf_3;
upper3 = base + val * 0.618*2.5;
upper2 = base + val * 0.382*2;
upper1 = base + val * 0.236*1.5;
lower1 = base - val * 0.236*1.5;
lower2 = base - val * 0.382*2;
lower3 = base - val * 0.618*2.5;
diff = base - base[2];
signal_up = CrossUp(diff, 0);
signal_dn = CrossDown(diff, 0);
plot1(base, "Filter",IFf(diff >= 0 , color1 , color2));
plot2(upper3,"up3",IFf(diff >= 0 , color1 , color2));
plot3(upper2,"up2",IFf(diff >= 0 , color1 , color2));
plot4(upper1,"up1",IFf(diff >= 0 , color1 , color2));
plot5(lower1,"lw1",IFf(diff >= 0 , color1 , color2));
plot6(lower2,"lw2",IFf(diff >= 0 , color1 , color2));
plot7(lower3,"lw3",IFf(diff >= 0 , color1 , color2));
if signal_up == true Then
{
tx = Text_New_Self(sDate[1],sTime[1],base[1],"◆");
Text_SetColor(tx,Orange);
Text_SetStyle(tx,2,2);
}
if signal_dn == true Then
{
tx = Text_New_Self(sDate[1],sTime[1],base[1],"◆");
Text_SetColor(tx,Orange);
Text_SetStyle(tx,2,2);
}
즐거운 하루되세요
> 니콜라스킹 님이 쓴 글입니다.
> 제목 : Gradient Trend Filter 예스랭귀지로 변환 요청드립니다.
> 아래는 트레이딩뷰에서 많이 활용하고 있는 Chart Prime의 Gradient Trend Filter 수식입니다.
예스스탁에서 검토해보고자 변환 요청 드립니다.
Gradient Trend Filter 설명 자료를 유첨하였습니다.
감사합니다!
// --------------------------------------------------------------------------------------------------------------------}
// 𝙄𝙉𝘿𝙄𝘾𝘼𝙏𝙊𝙍 𝘾𝘼𝙇𝘾𝙐𝙇𝘼𝙏𝙄𝙊𝙉𝙎
// --------------------------------------------------------------------------------------------------------------------{
// Noise filter function
noise_filter(src, length) =>
alpha = 2 / (length + 1)
nf_1 = 0.0
nf_2 = 0.0
nf_3 = 0.0
nf_1 := (alpha * src) + ((1 - alpha) * nz(nf_1[1]))
nf_2 := (alpha * nf_1) + ((1 - alpha) * nz(nf_2[1]))
nf_3 := (alpha * nf_2) + ((1 - alpha) * nz(nf_3[1]))
nf_3 // Final output with three-stage smoothing
// Bands function
bands(src)=>
val = noise_filter(high-low, length)
upper3 = src + val * 0.618*2.5
upper2 = src + val * 0.382*2
upper1 = src + val * 0.236*1.5
lower1 = src - val * 0.236*1.5
lower2 = src - val * 0.382*2
lower3 = src - val * 0.618*2.5
[upper3, upper2, upper1, lower1, lower2, lower3]
float base = noise_filter(src, length)
[upper3, upper2, upper1, lower1, lower2, lower3] = bands(base)
float diff = base - base[2]
// Signals
bool signal_up = ta.crossover(diff, 0) and barstate.isconfirmed
bool signal_dn = ta.crossunder(diff, 0) and barstate.isconfirmed
// --------------------------------------------------------------------------------------------------------------------}
// 𝙑𝙄𝙎𝙐𝘼𝙇𝙄𝙕𝘼𝙏𝙄𝙊𝙉
// --------------------------------------------------------------------------------------------------------------------{
color gradient_col = color.from_gradient(diff, ta.lowest(diff, 100), ta.highest(diff, 100), color2, color1)
color trend_color = color.new(gradient_col, transp)
plot(base, "Filter", linewidth = width, color = diff >= 0 ? color1 : color2)
up3 = plot(upper3, display = display.none, editable = false)
up2 = plot(upper2, display = display.none, editable = false)
up1 = plot(upper1, display = display.none, editable = false)
lw1 = plot(lower1, display = display.none, editable = false)
lw2 = plot(lower2, display = display.none, editable = false)
lw3 = plot(lower3, display = display.none, editable = false)
fill(up3, lw3, trend_color)
fill(up2, lw2, trend_color)
fill(up1, lw1, trend_color)
plotshape(signal_up ? base[1] : na, "", shape.diamond, location.absolute, offset = -1, size = size.tiny, color = color.orange)
plotshape(signal_dn ? base[1] : na, "", shape.diamond, location.absolute, offset = -1, size = size.tiny, color = color.orange)
// --------------------------------------------------------------------------------------------------------------------}