PineScript v5:同一行引用标识符历史值及Signal逻辑替代方案咨询
PineScript v5 实现持续信号的替代方案
在PineScript v5里没法像Thinkorswim那样,在变量定义的同一行直接引用自身的历史值(比如你写的signal[1]),这是语法规则限制,所以原代码会报错。下面给你两种可行的实现方式,都能满足信号不中断的需求:
方式一:var变量 + 三元表达式
//@version=5 indicator("ATR持续信号", overlay=true) ATRFactor = ta.tr(true) Avg = ta.ema(close, 50) // 用var初始化Signal,仅在第一根K线赋值一次 var int Signal = 0 // 用:=更新变量,合法引用历史值 Signal := close > (Avg + ATRFactor) ? 1 : close < (Avg - ATRFactor) ? -1 : Signal[1] plot(Signal, "Signal", color=color.blue, style=plot.style_columns)
方式二:if-else结构(逻辑更直观)
//@version=5 indicator("ATR持续信号", overlay=true) ATRFactor = ta.tr(true) Avg = ta.ema(close, 50) var int Signal = 0 if close > (Avg + ATRFactor) Signal := 1 elif close < (Avg - ATRFactor) Signal := -1 else // 不符合触发条件时,沿用上次的信号值 Signal := Signal[1] plot(Signal, "Signal", color=color.blue, style=plot.style_columns)
关键说明
var关键字的作用:让Signal变量只在第一根K线初始化一次,后续K线会保留之前的数值,实现信号状态的延续。:=赋值运算符:区别于=的一次性变量定义,:=允许在每根K线更新变量,同时能合法引用它的历史值Signal[1]。
内容的提问来源于stack exchange,提问作者Martinko
相关产品推荐
相关产品推荐

