仓位管理入门:从等权到凯利公式
本课目标:理解”买多少”为什么和”买什么”同样重要,掌握等权、波动率倒数加权和凯利公式这几种入门仓位方法的直觉。
新手研究策略时,注意力几乎全在信号上:什么时候买、买哪个。但同样的信号,配上不同的仓位方案,结果可能天差地别——同一个策略,半仓运行可能安然穿越熊市,满仓加杠杆则可能在中途被迫离场,根本等不到策略”长期有效”的那一天。仓位管理回答的是另一个问题:每次该下多大注。本文不构成投资建议。
为什么仓位比选股更重要
两个原因。第一,亏损是不对称的:亏 50% 需要赚 100% 才能回本。重仓一次深度亏损,对净值的破坏远大于错过一次同等幅度的上涨。第二,再好的信号也有错的时候:胜率六成的策略意味着十次里有四次是错的,如果每次都满仓,连续几次失误就足以把账户打入需要多年才能恢复的深坑。
仓位管理的本质,是承认自己会看错,并提前决定”看错时最多付出多少代价”。
可以做一个简单的算术感受不对称性:从 100 跌到 50 是亏 50%,从 50 涨回 100 却需要涨 100%;跌 80% 之后需要涨 400% 才能回本。回撤越深,翻身所需的收益越是不成比例地增长。这就是为什么成熟的研究者把”控制深度亏损”放在”追求高收益”前面——不是保守,是算术。
三种入门方法:等权、固定比例、波动率倒数
| 方法 | 规则 | 优点 | 局限 |
|---|---|---|---|
| 等权 | N 个标的各占 1/N | 简单、无需估计任何参数 | 高波动标的实际主导组合风险 |
| 固定比例 | 风险资产恒占组合的固定比例(如六成),定期再平衡 | 天然”跌了补、涨了减” | 比例本身如何定缺乏依据 |
| 波动率倒数 | 权重与标的波动率成反比 | 让每个标的贡献的风险大致相当 | 波动率是估计值,会变 |
等权虽然朴素,却是一个出人意料难以击败的基准:它不依赖任何估计,自动实现了分散,而且再平衡时天然卖高买低。任何更复杂的加权方案,都应该先回答”我比等权好在哪里”。固定比例法的代表是”股债搭配加定期再平衡”,它的价值不在比例的精确,而在纪律:涨多了强制减一点、跌多了强制补一点,避免情绪化的追涨杀跌。
波动率倒数加权(风险平价思想的简化版)值得展开:如果 A 的波动率是 B 的两倍,就给 A 一半于 B 的权重,这样两者对组合的风险贡献接近。用 pandas 写出来很短:
import pandas as pd
# rets: DataFrame,每列是一个标的的日收益vol = rets.rolling(60).std() * (252 ** 0.5) # 滚动年化波动率inv_vol = 1 / volweights = inv_vol.div(inv_vol.sum(axis=1), axis=0) # 归一化成权重weights = weights.shift(1) # 用昨天的估计定今天的仓位最后一行 shift(1) 依然不能省——波动率也是信息,同样不能用”今天才算得出的值”决定今天的仓位。实际使用时还要控制调仓频率:波动率天天在变,如果权重跟着天天微调,换手成本会白白吃掉收益,常见做法是每月或权重偏离超过阈值时才再平衡。
凯利公式:直觉与半凯利
凯利公式来自赌博与信息论:在一个可以重复下注的游戏里,存在一个使长期资金增长率最大的下注比例——注太小浪费优势,注太大则会被偶发的连败拖垮。以最简单的输赢各按比例赔付的情形为例,直觉是:
- 优势越大(胜率越高、赔率越好),应下注越多;
- 没有优势时,最优下注是零;
- 超过凯利比例的下注,长期增长率反而下降,注太大甚至必然破产。
实践中几乎没有人用完整凯利,原因是公式的输入(胜率、赔率)都是估计值,而凯利对高估优势极其敏感:优势被高估一倍,建议仓位就大约翻倍。所以常见做法是半凯利甚至四分之一凯利——牺牲一点理论增长率,换取对估计误差的容忍度和平滑得多的净值曲线。
对新手,凯利的价值主要是三条直觉:仓位应随优势缩放;没把握就少下或不下;宁可下小了也不要下大了。下小了只是赚得慢,下大了可能直接出局——这两种错误的代价完全不对等。
还要注意,凯利的推导假设了可以无限次重复、每次下注独立的场景。真实市场里,策略的优势会漂移甚至消失,多个持仓之间高度相关,这些都进一步压低了合理的下注比例。把凯利当方向盘,不要当油门。
用最大回撤倒推仓位
另一个务实的思路是从承受能力出发倒推仓位:先诚实回答”净值从高点回撤多少我会睡不着、会想砍掉策略”,再看策略历史上满仓运行的最大回撤,用两者的比值给仓位定上限。
equity = (1 + strategy_ret).cumprod()drawdown = equity / equity.cummax() - 1max_dd = drawdown.min() # 历史最大回撤(负数)
tolerable = -0.15 # 自己能忍受的回撤cap = min(1.0, tolerable / max_dd) # 仓位上限(示意)举个例子:如果策略满仓的历史最大回撤是三成,而你只能忍受一成五,那仓位上限大约就是一半,剩下的部分放在低风险资产里。要记住两点:历史最大回撤只是下限的参考,未来的回撤可以更深,实际执行时应再留余量;这个方法的价值不在数字精确,而在逼你在开仓之前想清楚退出的边界——回撤发生时才来想”要不要砍”,动作一定会变形。
本课小结
- 亏损不对称加上信号必然出错,决定了仓位比选股更值得优先设计。
- 等权是最稳健的起点;波动率倒数加权让各标的风险贡献大致均衡。
- 凯利公式给出”按优势缩放仓位”的方向,实践中用半凯利容忍估计误差。
- 用自己能承受的最大回撤倒推仓位上限,是简单可执行的风控起点。
- 仓位计算和信号一样要避免未来函数,估计值一律用前一日的。
动手练习:取两只波动率明显不同的宽基 ETF,分别用等权和波动率倒数加权构建组合(月度再平衡),对比两个组合的年化波动率和最大回撤,验证”风险均衡”是否成立,并观察再平衡频率从每月改成每周后,结论有没有变化。