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

Pine Script策略退出问题:trailing stop未全额平仓的解决咨询

Pine Script 策略退出条件修正方案

预设退出条件

  • StopLoss:平仓全部仓位
  • TP1:平仓初始仓位的1/3
  • TP2:平仓初始仓位的1/3
  • Trailing Stop:平仓全部仓位

问题现象

实际运行中Trailing Stop仅平仓200合约(预期400),原代码如下:

strategy.exit("TP1", "Buy", limit=tp1, qty=strategy.position_size/3)
strategy.exit("TP2", "Buy", limit=tp2, qty=strategy.position_size/2)
strategy.exit("TrailingStop", "Buy", stop=tl, qty=strategy.position_size)
strategy.exit("StopLoss", "Buy", stop=stopLoss, qty=strategy.position_size)

原因分析

  • TP1触发后,600合约平仓200,剩余400
  • TP2触发时使用strategy.position_size/2,实际平仓剩余仓位的1/2(200),剩余200
  • Trailing Stop触发时,strategy.position_size已更新为200,因此仅平仓剩余200,不符合预期
  • StopLoss因仓位清空不会触发

修正方案

核心是基于初始开仓仓位设定各退出指令的平仓量,而非依赖动态变化的strategy.position_size。修改后的代码如下:

// 记录初始开仓仓位(仅在开仓时赋值)
var float initial_position_size = na

// 开仓逻辑示例(替换为你的实际开仓条件)
if (entry_condition)
    strategy.entry("Buy", strategy.long)
    initial_position_size := strategy.position_size  // 保存初始仓位

// 修正后的退出指令
strategy.exit("TP1", "Buy", limit=tp1, qty=initial_position_size / 3)
strategy.exit("TP2", "Buy", limit=tp2, qty=initial_position_size / 3)
strategy.exit("TrailingStop", "Buy", stop=tl, qty=initial_position_size)
strategy.exit("StopLoss", "Buy", stop=stopLoss, qty=initial_position_size)

关键说明

  1. 原TP2的strategy.position_size/2是逻辑错误,需改为initial_position_size/3以匹配预设的“平仓初始仓位1/3”需求
  2. 使用var关键字确保initial_position_size仅在开仓时赋值一次,避免后续bar更新覆盖
  3. 当Trailing Stop或StopLoss触发时,Pine Script会自动平掉剩余的全部仓位,无需额外处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:57:24