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

仅检测均线交叉后首个收盘价突破交叉K线高点的脚本问题

解决方案:MA金叉后标记首个突破金叉K线高点的K线

你的核心需求是MA9上穿MA21后,仅标记首次收盘价突破该金叉K线高点的K线,原代码的问题在于缺少信号触发状态的跟踪,导致要么无法正确触发,要么重复标记。以下是修正后的Pine Script代码:

//@version=5
indicator(title="MA Cross - First Breakout", overlay=true, timeframe="", timeframe_gaps=true)

// 输入参数
shortlen = input.int(9, "短期均线长度", minval=1)
longlen = input.int(21, "长期均线长度", minval=1)

// 计算均线
short_ma = ta.sma(close, shortlen)
long_ma = ta.sma(close, longlen)

// 绘制均线
plot(short_ma, color=#2196F3, title="MA9")
plot(long_ma, color=#43A047, title="MA21")

// 识别MA金叉信号
bullish_cross = ta.crossover(short_ma, long_ma)

// 标记金叉K线
plotshape(bullish_cross, style=shape.triangleup, location=location.belowbar, 
          size=size.small, color=color.green, text="金叉")

// 跟踪金叉K线的高点,以及是否已触发突破信号
var float cross_high = na
var bool signal_triggered = false

// 当金叉出现时,重置高点和触发状态
if bullish_cross
    cross_high := high
    signal_triggered := false

// 定义买入信号:收盘价突破金叉高点,且当前周期未触发过信号
buy_signal = close > cross_high and not signal_triggered

// 触发信号后,标记状态为已触发,避免重复标记
if buy_signal
    signal_triggered := true

// 标记首个突破K线
plotshape(buy_signal, title="买入信号", text="买", style=shape.circle, 
          color=color.rgb(67, 224, 138), size=size.tiny, location=location.belowbar)

关键逻辑说明:

  1. 状态跟踪:用var bool signal_triggered记录当前金叉周期内是否已经触发过突破信号,初始为false。
  2. 重置机制:每次新的金叉出现时,重置cross_high为当前K线高点,并把signal_triggered设为false,确保下一轮突破可以被检测。
  3. 信号过滤:买入信号仅在close > cross_high且signal_triggered为false时触发,触发后立即将signal_triggered设为true,后续K线即使收盘价仍高于cross_high也不会再标记。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:14:57