如何将指定趋势指标逻辑转换为Pine Script v5并修复未声明标识符报错
报错原因
Pine Script中所有需要引用自身历史值(例如TrendUp[1])的变量,必须先完成初始化声明,不能在首次定义时就调用自身的历史值,否则编译器会识别为未声明标识符。此外原代码第1行maxval = 000属于无效参数,也会触发语法报错。
核心改动说明
- 新增
var关键字声明TrendUp、TrendDown、Trend三个自引用变量,提前完成初始化,解决未声明标识符报错 - 修正原代码第1行无效的
maxval=000参数,改为合法的1000 - 适配对应版本的语法规范,补充版本声明、指标声明语句
修复后的Pine Script v5完整代码
//@version=5 indicator("趋势箭头指标", overlay=true) Factor=input.int(1, minval=1,maxval = 1000, title="因子") Pd=input.int(1, minval=1,maxval = 100, title="ATR周期") Up=hl2-(Factor*ta.atr(Pd)) Dn=hl2+(Factor*ta.atr(Pd)) // 提前初始化自引用变量 var float TrendUp = na var float TrendDown = na var int Trend = 0 TrendUp := close[1]>TrendUp[1]? math.max(Up,TrendUp[1]) : Up TrendDown := close[1]<TrendDown[1]? math.min(Dn,TrendDown[1]) : Dn Trend := close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],0) plotarrow(Trend == 1 and Trend[1] == -1 ? Trend : na, title="Up Arrow", colorup=color.new(color.lime, 85), maxheight=200, minheight=50) plotarrow(Trend == -1 and Trend[1] == 1 ? Trend : na, title="Down Arrow", colordown=color.new(color.red, 85), maxheight=200, minheight=50)
修复后的Pine Script v4完整代码
//@version=4 study("趋势箭头指标", overlay=true) Factor=input(1, minval=1,maxval = 1000, title="因子") Pd=input(1, minval=1,maxval = 100, title="ATR周期") Up=hl2-(Factor*atr(Pd)) Dn=hl2+(Factor*atr(Pd)) // 提前初始化自引用变量 var float TrendUp = na var float TrendDown = na var int Trend = 0 TrendUp := close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up TrendDown := close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn Trend := close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],0) plotarrow(Trend == 1 and Trend[1] == -1 ? Trend : na, title="Up Arrow", colorup=color.new(color.lime, 85), maxheight=200, minheight=50) plotarrow(Trend == -1 and Trend[1] == 1 ? Trend : na, title="Down Arrow", colordown=color.new(color.red, 85), maxheight=200, minheight=50)
内容的提问来源于stack exchange,提问作者Kush
相关产品推荐
相关产品推荐

