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

Pine Script技术求助:如何判断自条件1触发后条件2是否未成立

Pine Script 实现“上次触发条件后未跌破目标价”的判断逻辑

要实现你需要的「自上次valid_long触发后,价格未跌破long_hedge_tp」的判断逻辑,核心是用持久化变量跟踪两个关键状态:上次触发时的对冲止盈价,以及从那时起是否跌破过该价位。以下是具体实现方案:

关键思路

  • 用var声明持久化变量,这类变量仅在脚本初始化时赋值一次,后续K线中会保留之前的状态
  • 当valid_long触发时,更新对冲止盈价并重置“是否跌破”的标记
  • 逐K线检查价格是否跌破上次记录的对冲止盈价,实时更新标记状态
  • 下单时同时校验valid_long和“未跌破”的状态

完整代码示例

//@version=5
strategy("Hedge Long Strategy", overlay=true, default_qty_type=strategy.cash, default_qty_value=10000)

atr  = ta.atr(14)
sma1 = ta.sma(close, 6)
sma2 = ta.sma(close, 18)

valid_long = ta.crossover(sma1, sma2)
long_sl = close - (atr * 2) // long stop loss
long_tp = close + (atr * 4) // long take profit

valid_long_hedge = valid_long 
long_hedge_sl = long_tp 
long_hedge_tp = long_sl - (atr * 2)

// 持久化变量:跟踪上次触发时的对冲止盈价,以及是否跌破过该价位
var float last_triggered_hedge_tp = na
var bool has_broken_hedge_tp = false

// 当valid_long触发时,更新变量
if valid_long
    last_triggered_hedge_tp := long_hedge_tp
    has_broken_hedge_tp := false  // 重置标记,因为刚触发新的入场条件

// 逐K线检查是否跌破上次的对冲止盈价
if not na(last_triggered_hedge_tp)
    if low < last_triggered_hedge_tp
        has_broken_hedge_tp := true

// 下单条件:valid_long触发,且自上次触发后未跌破对冲止盈价
if valid_long and not has_broken_hedge_tp
    strategy.order('Long', strategy.long)

代码解释

  • var float last_triggered_hedge_tp = na:保存每次valid_long触发时对应的long_hedge_tp值,初始为na表示还未触发过有效多单条件
  • var bool has_broken_hedge_tp = false:标记自上次valid_long触发后,价格是否跌破过对应的对冲止盈价
  • 当valid_long为真时,重置两个变量:更新最新的对冲止盈价,并将“是否跌破”标记设为false
  • 后续每个K线中,只要已经有过触发记录(last_triggered_hedge_tp不为na),就检查当前K线的最低价是否跌破了记录的价位,若是则将标记设为true
  • 最终下单条件同时满足valid_long触发,且has_broken_hedge_tp为false,确保只有在上次触发后未跌破对冲止盈价时才开新仓

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:41:12