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

Pine Script马丁格尔策略问题:亏损后无法加倍仓位排查

代码错误排查与修复

核心问题分析

你的代码无法实现马丁格尔策略的核心原因在于以下几点:

  • var关键字滥用:所有关键变量(positionSize、lastTradeLoss、multiplier、newPositionSize)都用var声明,导致它们仅初始化一次,不会随交易结果或仓位变化动态更新。
  • 仓位大小跟踪逻辑失效:positionSize初始化为na后,后续无法更新为实际仓位值,因为更新条件依赖not na(positionSize),而初始值就是na,永远无法触发更新。
  • 无基础仓位基准:缺少初始基准仓位大小,首次交易时newPositionSize会因依赖未初始化的positionSize变为na,导致无法下单。
  • 亏损判断逻辑未动态更新:lastTradeLoss仅在首次运行时计算一次,不会根据新的交易结果刷新。

修复后的代码

//@version=5
strategy("马丁格尔策略", overlay=true, default_qty_type=strategy.cash, default_qty_value=1000, initial_capital=10000, margin_long=100, margin_short=100)

// 输入参数:基础仓位大小、亏损后乘数
baseSize = input.float(1.0, title="基础仓位大小")
martingaleMultiplier = input.float(2.0, title="亏损仓位乘数")

// 跟踪最后一笔交易是否亏损及当前乘数
var bool lastTradeWasLoss = false
var float currentMultiplier = 1.0

// 检测交易平仓并更新乘数
if strategy.closedtrades > strategy.closedtrades[1]
    lastTradeProfit = strategy.closedtrades.profit(strategy.closedtrades - 1)
    lastTradeWasLoss := lastTradeProfit < 0
    // 亏损则加倍乘数,盈利则重置为1
    currentMultiplier := lastTradeWasLoss ? currentMultiplier * martingaleMultiplier : 1.0

// 计算当前应使用的仓位大小
currentPositionSize = baseSize * currentMultiplier

// 示例买入/卖出信号(需替换为你自己的信号逻辑)
buy = ta.crossover(ta.sma(close, 5), ta.sma(close, 20))
sell = ta.crossunder(ta.sma(close, 5), ta.sma(close, 20))

// 开仓逻辑:仅在无仓位时开新仓
if buy and strategy.position_size == 0
    strategy.entry("Long", strategy.long, qty=currentPositionSize)

if sell and strategy.position_size == 0
    strategy.entry("Short", strategy.short, qty=currentPositionSize)

// 平仓逻辑
strategy.exit("Exit Long", from_entry="Long", profit=600, loss=2000)
strategy.exit("Exit Short", from_entry="Short", profit=600, loss=2000)

修复说明

  1. 优化var使用:仅保留需要持久化状态的变量(lastTradeWasLoss、currentMultiplier)的var关键字,确保它们在图表刷新时保留状态,但会根据交易结果动态更新。
  2. 添加可配置参数:通过input.float定义基础仓位和亏损乘数,方便调整策略参数。
  3. 动态更新乘数逻辑:当检测到交易平仓时,判断该交易盈亏状态,亏损则加倍当前乘数,盈利则重置为初始值1。
  4. 修正开仓条件:仅在当前无仓位时开新仓(strategy.position_size == 0),符合马丁格尔策略“上一笔交易结束后再开下一笔”的核心逻辑。
  5. 明确信号示例:添加均线交叉作为示例交易信号,你可以直接替换为自己的信号逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:05:37