将 Pine-Script 2.0 版转换为 4.0 版

Convert Pine-Script version 2.0 to version 4.0

我需要将此 PineScript Study 从 v2.0 转换为 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)

在 TradingView 的 Pine-Script 最新版本 (4.0) 中,需要删除前向引用变量。

//@version=4
study("trendFilter", "TF", overlay=true)

//
Pd=input(200)
Factor=input(0.9)
//

var float   Tsl         = na
var float   t           = na
var float   TrendUp     = na
var float   TrendDown   = na
var float   Trend       = 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 := 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)

我觉得这样更好

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