如何为strategy.exit()添加新平仓条件?当前实现遇阻
解决方案
在Pine Script中,strategy.exit()无法直接添加自定义的交叉类平仓条件,你可以通过额外添加strategy.close()语句实现新增条件,同时完全保留原有追踪止盈止损的逻辑。具体实现如下:
1. 计算所需EMA指标
先定义你需要的三条EMA线:
ema9 = ta.ema(close, 9) ema15 = ta.ema(close, 15) ema30 = ta.ema(close, 30)
2. 定义EMA下穿的平仓条件
用ta.crossunder()判断下穿信号,当EMA9下穿EMA15,或EMA15下穿EMA30时触发平仓:
emaExitCondition = ta.crossunder(ema9, ema15) or ta.crossunder(ema15, ema30)
3. 添加平仓语句
在原有代码后新增strategy.close(),仅当持有多头仓位且满足EMA下穿条件时执行平仓:
if (strategy.position_size > 0 and emaExitCondition) strategy.close("Buy")
完整代码示例
//@version=5 strategy("带EMA平仓的追踪止盈策略", overlay=true) // 替换为你自己的入场条件、APTR计算逻辑 Buy = // 你的多头入场条件 APTR = // 你的平均真实波幅百分比计算逻辑 TP = input.float(2.0, "止盈比例(%)") SL = input.float(1.0, "止损比例(%)") // 计算EMA指标 ema9 = ta.ema(close, 9) ema15 = ta.ema(close, 15) ema30 = ta.ema(close, 30) // 定义EMA下穿平仓条件 emaExitCondition = ta.crossunder(ema9, ema15) or ta.crossunder(ema15, ema30) // 原有入场逻辑 strategy.entry("Buy", strategy.long, 10.0, when = Buy) // 原有追踪止盈止损逻辑 strategy.exit("Sell", "Buy", trail_points = (close * (APTR/100*TP)) / syminfo.mintick, trail_offset = (close * (APTR/100*0.5)) / syminfo.mintick, loss = (close * (APTR/100*SL)) / syminfo.mintick) // 新增EMA下穿平仓逻辑 if (strategy.position_size > 0 and emaExitCondition) strategy.close("Buy")
逻辑说明
- 原有
strategy.exit()的追踪止盈、止损逻辑完全保留,不受新增代码影响; strategy.close()与strategy.exit()的触发逻辑为或关系,任意条件满足都会执行平仓;strategy.position_size > 0的判断用于避免无仓位时触发无效平仓指令。
内容的提问来源于stack exchange,提问作者joesmooth
相关产品推荐
相关产品推荐

