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

Pine脚本问题:盈利部分平仓后如何触发剩余仓位追踪止损?

Pine Script追踪止损订单无法触发的解决方法

问题场景

我在Pine Script中创建多单入场订单,同时设置了覆盖50%仓位的止盈止损退出订单:

strategy.entry("My Long Entry ", strategy.long)
strategy.exit("My Exit 1", profit=15000, loss=15000, qty_percent = 50 ,from_entry = "My Long Entry ", comment_profit="madeProfit")

想要在"My Exit 1"止盈平仓后,为剩余50%仓位激活追踪止损订单,编写的判断代码却从未触发订单:

if strategy.closedtrades.exit_comment(strategy.opentrades - 1) == "madeProfit"
    strategy.exit("My Exit 2", from_entry = "My Long Entry ", trail_offset=15000, trail_points=0)

问题原因

  1. 索引逻辑错误:strategy.opentrades是当前未平仓订单数量,用它减1无法定位到最近一次平仓的订单。要获取最近平仓的订单,应该用strategy.closedtrades - 1作为strategy.closedtrades.exit_comment()的索引。
  2. 无重复执行防护:strategy.closedtrades.exit_comment()在平仓K线后仍会保留历史值,若不加标记,后续K线可能重复触发逻辑,甚至导致错误。

修正代码

// 定义全局变量标记是否已激活追踪止损
var bool isProfitTriggered = false

// 多单入场
strategy.entry("My Long Entry", strategy.long)

// 50%仓位的止盈止损退出
strategy.exit("My Exit 1", 
              profit=15000, 
              loss=15000, 
              qty_percent=50, 
              from_entry="My Long Entry", 
              comment_profit="madeProfit")

// 判断最近一次平仓是否为"My Exit 1"的止盈,且未激活过追踪止损
if strategy.closedtrades > 0 and 
   strategy.closedtrades.exit_comment(strategy.closedtrades - 1) == "madeProfit" and 
   not isProfitTriggered
    // 为剩余仓位激活追踪止损
    strategy.exit("My Exit 2", 
                  from_entry="My Long Entry", 
                  trail_offset=15000, 
                  trail_points=0)
    // 标记已激活,避免重复执行
    isProfitTriggered := true

// 所有仓位平仓后重置标记,确保下一次入场逻辑正常
if strategy.opentrades == 0
    isProfitTriggered := false

关键说明

  • 用strategy.closedtrades - 1精准定位最近一次平仓的订单,获取其评论判断是否为目标止盈订单。
  • isProfitTriggered变量避免追踪止损被重复触发,保证逻辑只执行一次。
  • 当所有仓位平仓后重置标记,确保新的入场订单能重新触发完整逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:02:41