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

如何在Pine Script策略测试器中分别追踪多空利润并记录开平仓

解决Pine Script中无法记录空单开平仓的问题

我来帮你搞定这个问题——你的策略测试器看不到空单记录,核心问题出在订单ID重复和开平仓逻辑混淆上,下面是具体的分析和修正方案:

1. 原代码的核心问题

  • 重复订单ID:多次使用"LONG"和"SHORT"作为订单名称,Pine Script会把同名订单视为对原有订单的修改,而非新的开平仓动作;
  • 逻辑重叠:没有明确区分开仓、平仓的独立动作,且未确保策略开启做空权限,导致空单操作被覆盖或无法执行。

2. 修正后的完整代码示例

//@version=5
strategy("Long/Short Trackable Strategy", overlay=true, 
         default_qty_type=strategy.cash, 
         default_qty_value=10000, 
         allow_short=true, // 必须开启,允许建立空头仓位
         commission_type=strategy.commission.percent, commission_value=0.1)

// 替换成你实际的条件逻辑
window() => true // 示例:时间窗口判断条件
buy = ta.crossover(ta.sma(close, 5), ta.sma(close, 20)) // 示例:多单开仓信号
sell = ta.crossunder(ta.sma(close, 5), ta.sma(close, 20)) // 示例:空单开仓/多单平仓信号
shouldTrade = true // 示例:额外交易许可条件

// 开多仓:仅当无多头仓位时执行
if (window() and buy and strategy.position_size <= 0)
    strategy.order("LONG_ENTRY", strategy.long)

// 平多仓:仅当持有多头仓位时执行
if (window() and sell and strategy.position_size > 0)
    strategy.close("LONG_ENTRY", comment="LONG_EXIT")

// 开空仓:仅当无空头仓位时执行
if (window() and sell and shouldTrade and strategy.position_size >= 0)
    strategy.order("SHORT_ENTRY", strategy.short)

// 平空仓:仅当持有空头仓位时执行
if (window() and buy and shouldTrade and strategy.position_size < 0)
    strategy.close("SHORT_ENTRY", comment="SHORT_EXIT")

3. 关键细节说明

  • 唯一订单ID:给每个开仓动作分配独特的ID(比如"LONG_ENTRY"、"SHORT_ENTRY"),平仓时通过strategy.close("对应ID")精准关联,这样策略测试器就能清晰区分每一笔开平仓交易;
  • 仓位状态校验:用strategy.position_size判断当前仓位——正数是多头,负数是空头,0是空仓。添加这个判断可以避免重复开仓或错误平仓;
  • 开启做空权限:allow_short=true是必须项,默认策略可能只允许做多,开启后才能正常建立空头仓位;
  • 拆分逻辑分支:把开多、平多、开空、平空拆成独立的if块,彻底避免原代码中逻辑重叠导致的订单覆盖问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:07:45