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

Pine Script如何基于单交易持仓权益回撤百分比设置单仓止损

单交易持仓回撤触发平仓的Pine Script实现方案

你最初设想的逻辑方向是正确的,只需要补全开仓基准值记录、空仓变量重置的逻辑即可实现需求。

首先明确两个接口的适用性:

  • strategy.risk.max_drawdown()是全局策略风控接口,触发后会终止整个策略运行,不符合你的需求
  • strategy.percent_of_equity是全局下单仓位计算参数,和单交易回撤判定逻辑无关,不需要使用

核心实现逻辑

你提到的「对比开仓前权益/开仓价与当前数值」的难点,可以通过开仓时记录基准值,持仓期间实时计算回撤解决:

  1. 新增参数设置单交易最大允许回撤比例
  2. 开仓触发时,记录当前的开仓价格、持仓对应权益基准值
  3. 持仓过程中实时计算当前持仓的回撤幅度,达到阈值时触发对应订单ID的平仓
  4. 平仓后重置基准值,不影响后续策略开仓逻辑

示例代码

//@version=5
strategy("单交易回撤平仓示例", overlay=true, initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.1)

// 1. 参数设置:单交易最大允许回撤百分比(相对于开仓时的持仓市值)
max_drawdown_per_trade_pct = input.float(5.0, "单交易最大回撤比例(%)", minval=0.1, step=0.1)

// 2. 持久化变量存储开仓基准值
var float entry_price = na
var float entry_position_value = na

// 3. 开仓信号示例(这里可以替换为你自己的开仓逻辑)
long_condition = ta.crossover(ta.sma(close, 5), ta.sma(close, 20))
short_condition = ta.crossunder(ta.sma(close, 5), ta.sma(close, 20))

// 4. 开仓时记录基准值
if (long_condition and strategy.position_size == 0)
    strategy.entry("多单持仓", strategy.long)
    entry_price := close
    entry_position_value := strategy.position_size * entry_price

if (short_condition and strategy.position_size == 0)
    strategy.entry("空单持仓", strategy.short)
    entry_price := close
    entry_position_value := math.abs(strategy.position_size * entry_price)

// 5. 持仓期间计算回撤,触发平仓
var bool drawdown_trigger = false
if (strategy.position_size != 0)
    // 计算当前持仓市值
    current_position_value = math.abs(strategy.position_size * close)
    // 计算回撤百分比
    drawdown_pct = (entry_position_value - current_position_value) / entry_position_value * 100
    drawdown_trigger := drawdown_pct >= max_drawdown_per_trade_pct
else
    // 空仓时重置变量
    entry_price := na
    entry_position_value := na
    drawdown_trigger := false

// 执行平仓
strategy.close_all(when=drawdown_trigger, comment="回撤触发平仓")

注意事项

  • 如果你需要针对不同订单ID分别控制回撤,只需要给不同开仓方向/策略的订单分别定义独立的基准值变量即可,不需要修改核心逻辑
  • 上述代码计算的是持仓市值回撤,如果你需要按账户权益变动计算,只需要把开仓时记录的基准值替换为开仓时的strategy.equity,后续用当前权益对比即可,逻辑完全一致
  • 触发平仓后所有基准变量会自动重置,后续策略开仓逻辑不受任何影响

权益回撤参考图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:48:02