主题切换
6.3 动态权重管理
概念详解
凯利准则(Kelly Criterion)是一个资金管理公式,用于确定每次下注的最优比例,以最大化长期资本增长率。由John L. Kelly Jr.于1956年在贝尔实验室提出,最初用于解决通信中的信号噪声问题,后来被Edward Thorp引入赌博和投资领域。
凯利公式回答了投资中最根本的问题之一:我应该在这笔交易上投入多大比例的资金?
如果下注比例太小,你无法充分利用优势,资本增长太慢;如果下注比例太大,一次不利的连续亏损就可能让你遭受不可恢复的损失。凯利公式精确地找到了两者之间的最优平衡点。
名词解释:凯利公式
用于确定最优下注比例,以最大化长期资本增长率的公式:
名词解释:分数凯利(Fractional Kelly)
由于全量凯利(f*)可能导致极端的波动和回撤,实践中通常使用分数凯利(如f*/2或f*/4)。Half-Kelly保持全量凯利75%的长期增长率,但波动率减半。这种做法体现了"稳健"原则,是凯利公式在投资中最重要的实践经验。
名词解释:对数效用
凯利准则最大化的是终端财富的对数期望
数学原理
单次下注的凯利公式
对于二元结果的下注(赢则获b倍赌注+返还本金,输则失去赌注),胜率为p,输率为q=1-p:
连续结果的凯利公式
对于投资中更常见的连续收益分布,假设收益率服从正态分布
这是Merton (1969)在连续时间框架下推导出的结果。对于年化夏普比率为1的策略(
多资产凯利
对于
这与MVO的切线组合权重等价。凯利准则给出的切线组合本身就是最优的多资产配置——MVO和凯利在这一点上是统一的。
长期增长率
使用凯利比例
将
💰 凯利公式计算器
💰 凯利公式计算器
凯利最优比例:25.0%。半凯利:12.5%。
Python实战
📌 案例:凯利仓位计算
此处有展示代码展开 ▼
python
import numpy as np
def kelly_binary(p_win, win_loss_ratio):
"""
二元结果的凯利公式
Parameters:
p_win: 胜率
win_loss_ratio: 盈亏比(赢一次赚多少/输一次亏多少)
Returns:
f_star: 最优下注比例
"""
f_star = (win_loss_ratio * p_win - (1 - p_win)) / win_loss_ratio
return max(0, min(1, f_star)) # 限制在[0, 1]
def kelly_continuous(mu, sigma, rf=0):
"""
连续收益的凯利公式
Parameters:
mu: 年化预期收益
sigma: 年化波动率
rf: 无风险利率
Returns:
f_star: 最优杠杆倍数
"""
excess_return = mu - rf
variance = sigma ** 2
f_star = excess_return / variance
return f_star
def fractional_kelly(f_star, fraction=0.5):
"""分数凯利"""
return f_star * fraction点击展开可浏览运行结果
📘 本段代码定义了 3 个函数/类:函数 `kelly_binary`(二元结果的凯利公式)、函数 `kelly_continuous`(连续收益的凯利公式)、函数 `fractional_kelly`(分数凯利)。该片段为教学展示(未包含独立运行的输入数据),可在实战练习中结合真实数据调用。
📌 案例:凯利策略模拟与回测
此处有展示代码展开 ▼
python
def simulate_kelly_strategy(returns, kelly_fraction=1.0, rebalance_freq='monthly'):
"""
模拟使用凯利准则分配资金的策略表现
Parameters:
returns: pd.Series, 日收益率
kelly_fraction: 凯利分数(0.5=half-kelly, 1.0=full-kelly)
rebalance_freq: 再平衡频率
"""
# 估计参数(滚动回看窗口)
lookback = 252
mu_rolling = returns.rolling(lookback).mean() * 252
sigma_rolling = returns.rolling(lookback).std() * np.sqrt(252)
# 计算凯利杠杆
kelly_leverage = (mu_rolling / (sigma_rolling ** 2)).shift(1)
kelly_leverage = kelly_leverage.clip(lower=0, upper=5) # 限制最大杠杆
kelly_leverage = kelly_leverage * kelly_fraction
# 策略收益
strategy_returns = returns * kelly_leverage
# 净值曲线
equity = (1 + strategy_returns).cumprod()
return equity, kelly_leverage
def kelly_vs_fixed_comparison(returns):
"""
对比不同凯利分数的长期表现
"""
fractions = [0.25, 0.5, 0.75, 1.0]
results = {}
for frac in fractions:
equity, leverage = simulate_kelly_strategy(returns, kelly_fraction=frac)
total_ret = equity.iloc[-1] - 1
dd = (equity.cummax() - equity) / equity.cummax()
max_dd = dd.max()
results[f'Kelly-{frac*100:.0f}%'] = {
'总收益': f'{total_ret:.1%}',
'最大回撤': f'{max_dd:.1%}',
'平均杠杆': f'{leverage.mean():.2f}x',
'最大杠杆': f'{leverage.max():.2f}x',
}
return pd.DataFrame(results).T点击展开可浏览运行结果
📘 本段代码定义了 2 个函数/类:函数 `simulate_kelly_strategy`(模拟使用凯利准则分配资金的策略表现)、函数 `kelly_vs_fixed_comparison`(对比不同凯利分数的长期表现)。该片段为教学展示(未包含独立运行的输入数据),可在实战练习中结合真实数据调用。
📌 案例:多资产凯利配置
此处有展示代码展开 ▼
python
def multi_asset_kelly(mu, Sigma, kelly_fraction=0.5, max_weight=0.3):
"""
多资产凯利配置:最大化对数效用
等价于MVO的切线组合,但明确重视长期增长率
Parameters:
mu: 期望收益向量
Sigma: 协方差矩阵
kelly_fraction: 分数凯利(在总配置基础上打折)
max_weight: 单一资产最大权重
"""
from scipy.optimize import minimize
n = len(mu)
# 对数效用的确定性等价
def neg_log_utility(w):
port_mu = w @ mu
port_var = w @ Sigma @ w
# E[log(W)] ≈ log(W0) + μ - σ²/2
return -(port_mu - 0.5 * port_var)
constraints = [{'type': 'eq', 'fun': lambda w: np.sum(w) - 1}]
bounds = [(0, max_weight) for _ in range(n)]
w0 = np.ones(n) / n
result = minimize(neg_log_utility, w0, method='SLSQP',
bounds=bounds, constraints=constraints)
optimal_unconstrained = result.x
# 分数凯利:缩减到无风险资产
# 如果kelly_fraction < 1,将部分资金配置到现金
risky_weights = optimal_unconstrained * kelly_fraction
cash_weight = 1 - kelly_fraction
final_weights = np.append(risky_weights, cash_weight)
return final_weights # 最后一个是现金权重点击展开可浏览运行结果
📘 本段代码定义了 1 个函数/类:函数 `multi_asset_kelly`(多资产凯利配置:最大化对数效用)。该片段为教学展示(未包含独立运行的输入数据),可在实战练习中结合真实数据调用。
常见误区
全量凯利是危险的:全量凯利(kelly_fraction=1.0)的最大回撤在理论上接近50%(如果参数估计完美)。如果参数有估计误差(一定有),全量凯利的回撤可以更大。实践中几乎没有人使用全量凯利。
参数过估计导致过度下注:如果高估了夏普比率(回测中的常见问题),凯利公式给出的杠杆会过高。这是凯利策略表现不佳的最主要原因。应对方案:使用保守的参数估计(折价)、使用下行波动率替代总波动率。
忽略非正态性:连续凯利公式假设正态分布。实际收益率的肥尾和负偏度意味着真实的最优杠杆应该低于正态假设下的计算值。
凯利不考虑心理承受力:即使数学上0.25 * full-kelly是最优的,如果投资者无法承受这个比例带来的波动和回撤,策略在心理层面就会失败。最终的下注比例需要结合风险偏好。
把凯利当作投机工具:凯利公式的价值在于它的保守主义和反赌博倾向——当预测优势不确定时,建议的下注比例会非常小。凯利不是"大胆下注"的工具,而是"避免过度集中"的纪律。
实战练习
取一个夏普比率为0.5的策略(或模拟这样的收益率序列),分别测试全量凯利、Half-Kelly、Quarter-Kelly三种配置方案的10年净值曲线。比较它们的最大回撤和长期复合增长率,验证"Half-Kelly保持75%增长率但波动减半"的规律。
参数估计误差的影响:对一个夏普=1.0的模拟策略,分别假设估计的夏普在0.5到1.5之间变化。计算每种假设下凯利公式给出的杠杆倍数。观察参数过估计(假设夏普=1.5)时过杠杆的风险。
设计一个动态凯利策略:用滚动1年的数据估计夏普比率,每季度重估凯利杠杆。观察:(a)杠杆倍数的稳定性;(b)实际实现夏普与估计夏普的差异。
延伸阅读
- Kelly, J. L. (1956). "A New Interpretation of Information Rate." Bell System Technical Journal. 凯利准则的原始论文。
- Thorp, E. O. (1962). Beat the Dealer. 将凯利准则引入21点策略,开启量化赌博/投资的先河。
- MacLean, L. C., Thorp, E. O., & Ziemba, W. T. (2011). The Kelly Capital Growth Investment Criterion. 凯利准则的论文集。
- Ziemba, W. T. (2005). "The Symmetric Downside-Risk Sharpe Ratio." 建议使用保守的夏普比率估计用于凯利计算。
- Merton, R. C. (1969). "Lifetime Portfolio Selection under Uncertainty: The Continuous-Time Case." 推导了连续时间下的最优配置定理。
本章要点
- 凯利公式
是最大化长期资本增长率的最优下注比例。 - 单次下注的凯利公式为
,其中b是盈亏比,p是胜率。 - 分数凯利(如Half-Kelly)是凯利公式在实际投资中最重要的应用:保持75%的长期增长率,但波动和回撤大幅下降。
- 多资产凯利的最优配置等价于MVO的切线组合——在风险资产上的配置 =
,这是MVO和凯利统一的数学结果。 - 凯利策略最大的风险是参数过估计——高估的夏普比率导致过高的杠杆,过高的杠杆导致不可恢复的回撤。
- 凯利准则的根本精神是保守主义和反赌博:当你不确定自己的优势时,下注比例自然会很小。这是一种纪律而非投机。