You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:20:25