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

寻求Pine Script编写帮助:EMA交叉后首根突破价位K线标记逻辑

解决EMA交叉后首个突破指定价位K线的标记问题

你的核心需求是:当50周期EMA与200周期EMA发生金叉/死叉后,标记第一个突破指定价位(poziom=1209)的K线,且每次交叉后重复该逻辑。原代码的问题在于没有跟踪“交叉已触发,等待突破”的状态,只能捕获交叉与突破同时发生的K线。

以下是修正后的Pine Script代码:

indicator("EMA交叉后突破标记", overlay=true)

// 计算EMA指标
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)

// 指定突破价位
poziom = 1209

// 定义EMA交叉条件(金叉+死叉)
ema_cross = ta.crossover(ema50, ema200) or ta.crossunder(ema50, ema200)

// 用var声明状态变量,跟踪是否处于"交叉后等待突破"的状态
var bool waiting_for_breakout = false

// 当EMA交叉发生时,激活等待突破状态
if ema_cross
    waiting_for_breakout := true

// 定义突破条件:K线高点突破指定价位
price_breakout = high > poziom

// 标记第一个突破K线:突破发生且处于等待状态
mark_breakout = price_breakout and waiting_for_breakout

// 标记后重置等待状态,避免重复标记同一轮交叉后的突破
if mark_breakout
    waiting_for_breakout := false

// 绘制EMA线,方便观察交叉
plot(ema50, color=color.blue, title="EMA50")
plot(ema200, color=color.red, title="EMA200")

// 在突破K线顶部绘制标记
plotshape(mark_breakout, title="突破标记", style=shape.triangledown, size=size.small, location=location.top, color=color.green)

关键逻辑说明:

  • 状态变量waiting_for_breakout:用var声明确保变量不会在每根K线重置,只会在交叉发生时设为true,突破后设为false,实现“一次交叉对应一次突破标记”的逻辑。
  • 交叉触发逻辑:当金叉/死叉发生时,激活等待状态,后续K线开始监测突破。
  • 突破标记逻辑:只有当突破发生且处于等待状态时才标记,标记完成后立即重置状态,避免同一轮交叉下重复标记后续突破K线。
  • Overlay模式:设置overlay=true让标记直接显示在K线图上,更直观。

你可以根据需求调整突破条件(比如改成low < poziom捕捉向下突破),或者修改标记的样式、颜色。

内容的提问来源于stack exchange,提问作者Michał Wittig

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:25:40