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)
问题原因
- 索引逻辑错误:
strategy.opentrades是当前未平仓订单数量,用它减1无法定位到最近一次平仓的订单。要获取最近平仓的订单,应该用strategy.closedtrades - 1作为strategy.closedtrades.exit_comment()的索引。 - 无重复执行防护:
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
相关产品推荐
相关产品推荐

