寻求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
相关产品推荐
相关产品推荐

