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

如何为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:52:42