Search code examples
versionpine-scripttrading

Convert Pine-Script version 2.0 to version 4.0


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.


Solution

  • 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)