← 返回博客列表

【Python量化实战全攻略 #25】仓位管理手册:等权、风险平价、凯利(附代码)

2026年10月20日 09:29 · 智兔数服 · Python量化实战全攻略

摘要:【Python量化实战全攻略 #25】仓位管理手册:等权、风险平价、凯利(附代码) 手册定位:模块四「组合/风控/专题」第 1 篇。选好标的后, 怎么分配仓位 直接决定收益与回撤。本篇讲三种经典仓位法:等权、风险平价、凯利。 数据来源复用

手册定位:模块四「组合/风控/专题」第 1 篇。选好标的后,怎么分配仓位直接决定收益与回撤。本篇讲三种经典仓位法:等权、风险平价、凯利。
数据来源复用 #02 历史K线(各标的波动率)。

1. 你将得到什么

  • 等权、风险平价(逆波动加权)、凯利公式三种仓位算法的代码;
  • 三种方法的风险/收益对比;
  • 实际落地的约束(整手、上限、现金预留);
  • 仓位管理的 4 个坑(过度集中、波动估计误差、凯利激进、再平衡频率)。

2. 取数约定(复用)

用途 来源 见
各标的日线 /hs/history/{代码}.{市场}/d/n #02

3. 数据来源(复用,不重复罗列)

详见 #02 历史K线接口手册(日线端点);基金/转债见 #07/#08。

4. 核心模板函数(自包含可跑)

import pandas as pd
import numpy as np

_MOCK = True


def equal_weight(n):
    return np.ones(n) / n


def risk_parity(vols):
    inv = 1.0 / np.array(vols)
    return inv / inv.sum()


def kelly(win_rate, payoff):
    return max(win_rate - (1 - win_rate) / payoff, 0.0)


def run_check():
    n = 4
    ew = equal_weight(n)
    rp = risk_parity([0.20, 0.30, 0.15, 0.25])
    kl = kelly(win_rate=0.55, payoff=1.8)
    assert abs(ew.sum() - 1) < 1e-9 and abs(rp.sum() - 1) < 1e-9
    assert 0 <= kl <= 1
    print("校验通过 | 等权每席=%.2f 风险平价=%s 凯利=%.2f" % (ew[0], np.round(rp, 2).tolist(), kl))
    return ew, rp, kl


if __name__ == "__main__":
    run_check()

5. 跑通示例

ew, rp, kl = run_check()
print("建议从等权或风险平价起步,凯利仓位减半使用。")

6. 坑与注意事项

  1. 过度集中:等权天然分散,但因子选股容易集中行业,要先做行业中性(见 #15)。
  2. 波动估计误差:风险平价依赖波动率估计,用长窗口 EWMA 更稳。
  3. 凯利激进:满凯利回撤巨大,业界常用半凯利(1/2 Kelly)。
  4. 再平衡频率:定期再平衡会触发交易成本,频率太高亏在摩擦。

7. 小结与下一篇预告

仓位管理定好「怎么分钱」。下一篇讲止损与回撤控制——移动止损、最大回撤约束。

下一篇预告:《【Python量化实战全攻略 #26】止损与回撤控制手册:移动止损、最大回撤(附代码)》

8. 免责声明

本文为仓位管理示例,演示数据为虚构,不构成投资建议。


关于数据来源:本文仓位管理所需的波动率数据来自智兔数服(www.zhituapi.com)官方文档接口(详见本系列 #02),覆盖 200+ 已验证路径,注册可领免费 token 做研究测试。
更多实战手册见技术博客:zhituapi.com/blog.html。
本系列《Python量化实战全攻略》共 32 篇,下一篇讲止损与回撤。

想亲自试一下?免费获取证书