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

如何在最后一次ta.crossover/ta.crossunder触发后X根K线内屏蔽新信号

解决Pine Script同类型交叉信号冷却需求

核心思路

要实现触发金叉/死叉后X根K线内不生成同类型信号,核心是跟踪上次有效同类型信号的位置,每次检测到交叉时判断是否已过冷却期:

  • 记录上次金叉、死叉的K线索引
  • 仅当当前交叉距离上次同类型有效信号超过X根K线时,才输出有效信号

修改后的完整代码

//@version=5
indicator("[TEST] 交叉信号冷却", overlay=true)

// 可调整参数:同类型信号冷却期(K线数)
cooling_period = input.int(75, title="冷却期K线数", minval=1)

// 计算均线
maOne = ta.ema(high, 21)
maTwo = ta.ema(close, 50)

plot(maOne, title='EMA21(High)', color=color.new(#43f09f, 0), linewidth=1)
plot(maTwo, title='EMA50(Close)', color=color.new(#f34369, 0), linewidth=1)

// 原始交叉条件
raw_long = ta.crossover(maOne, maTwo)
raw_short = ta.crossunder(maOne, maTwo)

// 记录上次有效信号的K线索引(var变量确保脚本重启不重置)
var int last_long_bar = na
var int last_short_bar = na

// 生成带冷却的有效信号
valid_long = raw_long and (na(last_long_bar) or ta.bar_index - last_long_bar > cooling_period)
valid_short = raw_short and (na(last_short_bar) or ta.bar_index - last_short_bar > cooling_period)

// 更新上次有效信号的位置
if valid_long
    last_long_bar := ta.bar_index
if valid_short
    last_short_bar := ta.bar_index

// 绘制有效信号
plotshape(valid_long, style=shape.triangleup, location=location.bottom, color=color.green, size=size.auto, title='有效买入信号')
plotshape(valid_short, style=shape.triangledown, location=location.top, color=color.red, size=size.auto, title='有效卖出信号')

代码关键说明

  • 冷却期参数:通过input.int设置可调整的冷却周期,方便快速测试不同数值
  • 信号位置跟踪:用var类型变量保存上次有效信号的K线索引,避免脚本重启后丢失记录
  • 有效信号判断:对比当前K线索引与上次有效信号的索引差,只有超过冷却期的交叉才会被标记为有效信号
  • 过滤逻辑:冷却期内的同类型交叉会被直接忽略,直到冷却期结束后才会生成新的有效信号

内容的提问来源于stack exchange,提问作者marcq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:45:28