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

Pine Script如何实现新开反向仓不平旧仓、各仓位单独统计胜率

Pine Script 独立持仓配置方案

核心原因

Pine Script策略默认采用净头寸轧差模式,开启反向仓位时会自动平掉对应规模的反向持仓,所有平仓默认按先进先出规则匹配,无法实现单仓位绑定独立平仓、多空同时持仓的效果,必须修改策略全局仓位规则。

必须配置的策略参数

在strategy()声明函数中添加以下3个关键参数,原有其他参数保持不变即可:

  • hedge_mode = true:开启对冲模式,允许账户同时持有多头、空头双向头寸,不再按净头寸计算持仓
  • pyramiding = N:设置为大于0的整数N,代表策略最多同时持有的独立持仓总数量,根据策略实际最大同时持仓数设置,建议留20%以上冗余,避免后续开仓因持仓数上限被拒
  • close_entries_rule = strategy.close_entries_rule.none:禁止新开仓指令自动触发任何已有持仓的平仓,所有持仓仅能被绑定对应ID的平仓指令触发平仓

配置示例:

strategy(
    title="你的策略名称",
    overlay=true,
    // 新增以下3个核心配置
    hedge_mode = true,
    pyramiding = 20, // 按自身需求调整数值
    close_entries_rule = strategy.close_entries_rule.none,
    // 原有其他参数比如初始资金、手续费设置等保持不变
    initial_capital = 100000,
    commission_type = strategy.commission.percent,
    commission_value = 0.03
)

开平仓代码注意事项

你当前的开平仓ID绑定逻辑本身是正确的,只要配合上面的全局参数即可实现需求,仅需注意3个细节:

  • 每笔开仓必须使用全局唯一的订单ID,你当前用方向+唯一uniqID拼接的逻辑完全满足要求,不要出现不同开仓单复用同一个ID的情况
  • 所有平仓指令必须明确指定要平仓的开仓单ID,你当前写的strategy.exit("close_"+id, id, qty_percent=100,limit=tp1,stop=sl)逻辑正确,第二个参数传入对应开仓单的ID后,该exit指令只会平掉对应ID的持仓,不会影响其他任何同向/反向持仓
  • 不要使用不指定持仓ID的strategy.close_all()、无对应ID参数的strategy.exit(),避免误平其他持仓

胜率统计说明

完成以上配置后,Pine Script回测系统会自动将每个唯一ID对应的开仓、平仓记录识别为一笔独立交易,回测面板的胜率、盈亏比、交易列表都会按单仓位单独统计,不需要额外编写统计代码。如果需要自定义统计指标,可以通过strategy.closedtrades系列内置变量读取每笔已平仓交易的盈亏、持仓周期等数据自行计算。

配置生效验证

配置完成后运行回测,在交易记录列表中如果能看到同一时间存在未平仓的多头和空头持仓、且平仓记录的开仓时间完全对应该笔仓位自己的开仓时间,没有出现反向开仓自动记为前序仓位平仓的记录,就说明配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:27:17