第四章:仓位管理优化

仓位管理,说白了就是「你该押多大赌注」。我见过太多人策略做得很漂亮,最后却栽在仓位管理上。你想想看,一个年化30%的策略,如果仓位管理不当,可能三个月就爆仓了。今天咱们就聊聊怎么把仓位管好。

核心观点:仓位管理不是让你赚更多,而是让你活得久。在套利交易中,这一点尤其重要。

4.1 凯利公式在套利中的应用

凯利公式,很多人听说过但不敢用。其实没那么玄乎。它的核心思想就一句话:根据胜率和赔率,算出最优下注比例

公式长这样:

f* = (bp - q) / b

其中:
f* = 最优仓位比例
b  = 赔率(盈亏比)
p  = 胜率
q  = 败率(1-p)

我在做跨期套利时,习惯把凯利公式稍微改一下。因为套利交易的胜率通常很高,但赔率不高。举个例子:

# 跨期套利的凯利仓位计算
def kelly_position(win_rate, avg_win, avg_loss):
    """
    win_rate: 胜率(比如0.85)
    avg_win: 平均盈利(比如0.5%)
    avg_loss: 平均亏损(比如0.3%)
    """
    b = avg_win / avg_loss  # 赔率
    q = 1 - win_rate
    f = (b * win_rate - q) / b
    
    # 我一般会打个折扣,用半凯利
    return max(0, f * 0.5)

# 实际案例
pos = kelly_position(0.85, 0.005, 0.003)
print(f"建议仓位:{pos:.2%}")  # 输出约 42%

我的经验:凯利公式算出来的仓位往往偏激进。我建议用半凯利(即计算结果的一半),这样既能吃到收益,又不会因为一次黑天鹅就伤筋动骨。

为什么会这样?因为凯利公式假设你每次交易都是独立事件。但套利交易中,有时候会出现连续亏损。我记得有一次,螺纹钢的跨期套利连续止损了5次,如果用全凯利,仓位早就爆了。

4.2 基于波动率的动态仓位调整

市场波动率是会变的。你想想看,行情平静时和剧烈波动时,能用一个仓位吗?显然不能。

我常用的方法是:用ATR(平均真实波幅)来调整仓位。波动率越大,仓位越小;波动率越小,仓位越大。

import numpy as np

def dynamic_position(atr, base_position, target_risk):
    """
    atr: 当前ATR值
    base_position: 基准仓位(比如100手)
    target_risk: 目标风险(比如账户的1%)
    """
    # 计算波动率调整因子
    vol_factor = target_risk / (atr * base_position)
    
    # 限制调整范围,别太极端
    vol_factor = np.clip(vol_factor, 0.3, 2.0)
    
    return base_position * vol_factor

# 举个例子
current_atr = 15  # 当前ATR
base = 100        # 基准仓位
risk = 0.01       # 目标风险1%

final_pos = dynamic_position(current_atr, base, risk)
print(f"动态仓位:{final_pos:.0f}手")

注意:波动率调整不能太灵敏。我曾经用5日ATR做调整,结果频繁调仓,手续费都亏了不少。后来改成20日ATR,效果就好多了。

这里有个小技巧:把波动率分成三个区间——低波动、正常波动、高波动。每个区间用不同的仓位系数。这样既简单又有效。

波动率区间 ATR/价格 仓位系数
低波动 < 0.5% 1.5倍
正常波动 0.5% - 1.5% 1.0倍
高波动 > 1.5% 0.5倍

4.3 最大回撤控制与止损策略

回撤控制,是仓位管理的最后一道防线。我见过太多人,策略赚了半年,一周就亏回去了。为什么?因为没有回撤控制。

我的做法是:设置三层止损

  1. 单笔止损:每笔交易亏损不超过账户的0.5%
  2. 日止损:单日亏损不超过账户的2%
  3. 总回撤止损:账户总回撤达到10%时,暂停交易
class RiskManager:
    def __init__(self, account_value):
        self.account = account_value
        self.peak_value = account_value
        self.daily_pnl = 0
        
    def check_stop(self, trade_loss):
        # 单笔止损
        if trade_loss > self.account * 0.005:
            return "单笔止损"
        
        # 日止损
        self.daily_pnl -= trade_loss
        if self.daily_pnl < -self.account * 0.02:
            return "日止损"
        
        # 总回撤止损
        current_drawdown = (self.peak_value - self.account) / self.peak_value
        if current_drawdown > 0.10:
            return "总回撤止损"
        
        return None

避坑指南:我曾经把总回撤止损设成15%,结果遇到一次极端行情,回撤到了18%才停住。后来改成10%,虽然触发次数多了,但账户安全多了。记住:止损不是用来赚钱的,是用来保命的

4.4 资金曲线平滑技术

资金曲线平滑,说白了就是让收益更稳定。谁都不想看到账户像过山车一样。我常用的方法有几种:

  • 分批建仓:不一次性满仓,分3-5次入场
  • 盈利加仓:有浮盈后再加仓,而不是亏损加仓
  • 时间分散:不同品种、不同周期的套利组合在一起

这里我画了一张图,展示仓位管理的整体逻辑:

仓位管理优化框架 仓位管理 凯利公式 胜率+赔率计算 动态仓位 基于ATR调整 止损控制 三层止损体系 曲线平滑 分批+分散 核心原则 1. 仓位 = f(胜率, 赔率, 波动率, 回撤容忍度) 2. 先保本,再赚钱 | 3. 宁可少赚,不可大亏 4. 动态调整,不要死板执行

最后说一个我自己的习惯:每周五收盘后,我会重新评估一次仓位。看看这周的波动率变了没有,回撤到没到警戒线,需不需要调整。这个习惯帮我躲过了好几次大跌。

总结一下:仓位管理不是数学题,是艺术。凯利公式给你方向,波动率调整给你灵活性,止损给你安全感,平滑技术给你好心情。四者结合,才能做出稳健的套利策略。

专注资料整理