PineScript中strategy.exit()的qty参数为何会自动变化?
PineScript strategy.exit() 动态平仓量运行逻辑解答
核心规则
strategy.exit()创建的出场单属于和指定入场单绑定的从属出场单,你传入的qty参数是「最大可平仓量」,而非固定平仓值,实际执行时的平仓量会动态跟随对应入场单的剩余未平仓仓位调整,永远不会超过剩余可平量,避免出现超量平仓的非法操作。- 你通过
strategy.order()创建的两个止盈空单,默认会优先平你指定的"long"入场单的仓位,当第一笔0.5手止盈单触发后,"long"入场单的剩余未平仓量就从1变成了0.5。
三种场景的运行逻辑对应
- 价格先触止损:此时"long"入场单剩余未平仓量为1,止损单按你设置的最大qty=1执行,直接平完全部仓位,两个未触发的止盈单会被系统自动撤销。
- 价格先后触发两个止盈:两笔止盈单各平0.5手,刚好把"long"入场单的1手仓位全部平完,未触发的止损单会被系统自动撤销。
- 先触发第一笔止盈再触止损:第一笔止盈平仓0.5后,"long"入场单剩余未平仓量仅剩0.5,止损单的实际可平仓量会被系统自动调整为0.5,因此触发后仅平0.5手,符合你的实测结果。
优化建议
你当前的分层止盈逻辑可以直接通过strategy.exit()的原生参数实现,不需要额外手动创建strategy.order,逻辑更简洁也更不容易出错,示例代码如下:
if enableTP2 and longCondition strategy.entry("long", strategy.long, 1) strategy.exit("long exit", "long", stop=longSL, limit=longTP, limit2=longTP2, qty_limit=0.5, qty_limit2=0.5)
内容的提问来源于stack exchange,提问作者bbnm
相关产品推荐
相关产品推荐

