커뮤니티

Gradient Trend Filter 예스랭귀지로 변환 요청드립니다.

프로필 이미지
니콜라스킹
2025-05-26 16:35:43
213
글번호 191187
답변완료

첨부 이미지

아래는 트레이딩뷰에서 많이 활용하고 있는 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) // --------------------------------------------------------------------------------------------------------------------}
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

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) // --------------------------------------------------------------------------------------------------------------------}