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

