I need to convert this PineScript Study from v2.0 to v4.0
//@version=2
study("trendFilter",overlay=true)
//
Pd=input(200)
Factor=input(0.9)
//
P = pow(Pd,2)
a = 2/(P+1)
d = abs(close - nz(Tsl[0],hl2))
t = a*d+(1-a)*nz(t[1],d)
src = Factor*nz(Tsl[0],hl2) + (1-Factor)*close
Up=nz(Tsl[0],hl2)-t
Dn=nz(Tsl[0],hl2)+t
//
TrendUp=src[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown=src[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
//
Trend = src > TrendDown[1] ? 1: src< TrendUp[1]? -1: nz(Trend[1],1)
Tsl = Trend==1? TrendDown : TrendUp
css = Tsl > Tsl[1] ? #0080FF : Tsl < Tsl[1] ? #FF0040 : na
plot(Tsl,color=fixnan(css),transp=0)
In TradingView's Pine-Script latest version (4.0) it's required remove Forward-referenced variables.
I think it's better.
//@version=4
study("trendFilter", "TF", overlay=true)
//
Pd=input(200)
Factor=input(0.9)
//
var float Tsl = na
var float t = na
P = pow(Pd,2)
a = 2/(P+1)
d = abs(close - nz(Tsl[0],hl2))
t := a*d+(1-a)*nz(t[1],d)
src = Factor*nz(Tsl[0],hl2) + (1-Factor)*close
Up=nz(Tsl[0],hl2)-t
Dn=nz(Tsl[0],hl2)+t
//
TrendUp = Up
TrendUp := src[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown = Dn
TrendDown := src[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
//
Trend = int(na)
Trend := src > TrendDown[1] ? 1: src< TrendUp[1]? -1: nz(Trend[1],1)
Tsl := Trend==1? TrendDown : TrendUp
css = Tsl > Tsl[1] ? #0080FF : Tsl < Tsl[1] ? #FF0040 : na
plot(Tsl,color=fixnan(css),transp=0)