Pine Script需求:获取指示序列全程是否曾交叉的布尔值
实现历史周期内是否出现过交叉的判断
要判断两个序列在整个历史周期内是否曾发生过交叉,核心思路是用一个持久化的变量记录交叉状态——一旦检测到交叉,就将该变量设为true并保持这个值,不会随后续K线重置。
基础实现代码
以下是Pine Script的示例代码,替换series1和series2为你实际使用的序列即可:
//@version=5 indicator("历史交叉检测", overlay=true) // 示例序列(可替换为你的目标序列) series1 = close series2 = ta.sma(close, 50) // 初始化持久化变量,记录是否曾出现过交叉(仅首次初始化) var bool hasCrossed = false // 更新状态:只要历史上出现过一次交叉,就保持为true hasCrossed := hasCrossed or ta.cross(series1, series2) // 可视化结果(可选) plotshape(hasCrossed, title="曾发生交叉", location=location.belowbar, color=color.green, style=shape.labelup, text="曾交叉")
代码说明
var bool hasCrossed = false:使用var关键字声明变量,只会在脚本运行的第一个K线初始化一次,后续K线不会重置,确保状态能持续记录。hasCrossed := hasCrossed or ta.cross(series1, series2):通过逻辑或操作,只要任意一次ta.cross返回true(即当前K线发生交叉),hasCrossed就会变为true,之后无论后续K线是否交叉,都会保持true。
区分上穿/下穿的场景
如果需要分别检测series1上穿series2或下穿series2的历史记录,可以拆分使用ta.crossover和ta.crossunder:
//@version=5 indicator("历史上穿/下穿检测", overlay=true) series1 = close series2 = ta.sma(close, 50) var bool hasCrossover = false // 记录是否曾上穿 var bool hasCrossunder = false // 记录是否曾下穿 hasCrossover := hasCrossover or ta.crossover(series1, series2) hasCrossunder := hasCrossunder or ta.crossunder(series1, series2) // 可视化结果 plotshape(hasCrossover, title="曾上穿", location=location.belowbar, color=color.blue, style=shape.labelup, text="曾上穿") plotshape(hasCrossunder, title="曾下穿", location=location.abovebar, color=color.red, style=shape.labeldown, text="曾下穿")
内容的提问来源于stack exchange,提问作者silverstreak
相关产品推荐
相关产品推荐

