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

如何在金字塔加仓策略中逐笔增大下单量?

金字塔加仓逐笔增仓的修复方案

原代码的核心问题

  1. 手数获取函数错误:strategy.opentrades.size() 不能用来获取单笔开仓的手数,正确的函数是 strategy.opentrades.entry_size()。
  2. 缺失初始开仓手数:首次开仓没指定手数,后续加仓的计算没有基准值。
  3. 未开启同方向加仓权限:Pine Script 默认禁止同一方向重复开仓,必须手动开启。
  4. 订单ID冲突风险:多次使用同一个"Long" ID 会触发平仓,而非加仓。

修正后的可运行代码

//@version=5
strategy("金字塔加仓策略", overlay=true)

// 示例:用布林带下轨作为开仓触发条件(替换成你的lowerBandValue逻辑)
lowerBandValue = ta.bb(close, 20, 2).lower

// 参数设置
initial_qty = input.int(1, "初始开仓手数", minval=1)
qty_increase_pct = input.float(0.1, "每笔加仓比例(10%填0.1)", minval=0.01)

// 允许同方向多次开仓
strategy.risk.allow_entry_in(strategy.long)

// 开仓信号
long_signal = ta.crossover(close, lowerBandValue)

// 记录上一笔开仓的手数
var float last_entry_qty = initial_qty

if long_signal
    if strategy.opentrades == 0
        // 首次开仓
        strategy.entry("Long_Init", strategy.long, qty=initial_qty)
        last_entry_qty := initial_qty
    else
        // 计算加仓手数:上一笔 * (1 + 递增比例)
        add_qty = last_entry_qty * (1 + qty_increase_pct)
        // 用带编号的唯一ID避免平仓
        strategy.entry("Long_Add_" + str.tostring(strategy.opentrades), strategy.long, qty=add_qty)
        // 更新最后一笔手数记录
        last_entry_qty := add_qty

关键修改点解释

  • 开启同方向加仓:strategy.risk.allow_entry_in(strategy.long) 是必须的,否则策略会拒绝重复开多仓。
  • 用变量记录手数:相比直接调用 strategy.opentrades.entry_size(),用var变量记录更稳定,避免索引越界问题。
  • 唯一订单ID:每次加仓的ID带上开仓次数编号,确保每笔订单独立,不会触发平仓操作。
  • 明确初始手数:给首次开仓指定固定手数,作为后续加仓的计算基准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:07:18