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

PineScript技术问题:如何按顺序满足两条件后执行plotshape

MA5先跌破20再突破20的标记实现

你的代码逻辑存在两个核心问题:

  1. 嵌套if要求MA5同时满足<20和>25,这两个条件不可能同时成立,永远触发不了标记
  2. 没有记录“MA5先跌破20”这个前置状态,无法区分“首次突破20”和“先破后穿”的情况

以下是修正后的Pine Script代码,精准实现你要的逻辑:

//@version=5
indicator("MA5先破20再穿20信号", overlay=true)

MA5 = ta.sma(close, 5)

// 用var定义状态变量,仅初始化一次,记录是否出现过MA5跌破20的情况
var bool hasBrokenBelow = false

// 捕捉MA5跌破20的瞬间(20上穿MA5),更新状态
if ta.crossover(20, MA5)
    hasBrokenBelow := true

// 当MA5突破20,且之前已经跌破过20时,生成信号
triggerSignal = ta.crossover(MA5, 20) and hasBrokenBelow

// 在图表上绘制标记
plotshape(triggerSignal, title="先破后穿信号", location=location.belowbar, 
          color=color.new(color.green, 0), style=shape.triangleup, size=size.small)

// 可选:触发信号后重置状态,避免同一轮趋势中重复标记
if triggerSignal
    hasBrokenBelow := false

关键逻辑说明

  • var关键字确保hasBrokenBelow只在脚本启动时设为false,不会随K线刷新重置,能持续记录前置状态
  • ta.crossover()用来捕捉瞬间突破/跌破的时刻,而非持续处于某个区间的状态,避免误标记
  • 触发信号后重置状态,保证每一次标记都对应“先跌破→再突破”的完整流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 02:33:29