当前位置:首页>python>量化交易的生死线:用 Python 算出你的最优下注比例

量化交易的生死线:用 Python 算出你的最优下注比例

  • 2026-10-11 07:08:40
量化交易的生死线:用 Python 算出你的最优下注比例

用 Python 揭秘均值回归策略:你的收益从何而来?

量化交易的生死线:用 Python 算出你的最优下注比例

2026年重磅升级已全面落地!欢迎加入专注财经数据与量化投研的【数据科学实战】知识星球!您将获取持续更新的《财经数据宝典》与《量化投研宝典》,双典协同提供系统化指引;星球内含 500 篇以上独有高质量文章,深度覆盖策略开发、因子分析、风险管理等核心领域,内容基本每日更新;同步推出的「量化因子专题教程」系列(含完整可运行代码与实战案例),系统详解因子构建、回测与优化全流程,并实现日更迭代。我们持续扩充独家内容资源,全方位赋能您的投研效率与专业成长。无论您是量化新手还是资深研究者,这里都是助您少走弯路、事半功倍的理想伙伴,携手共探数据驱动的投资未来!

引言

很多刚接触量化交易的朋友,会把大量精力花在寻找「完美的入场信号」上,仿佛只要找到那个神奇的指标,就能稳定盈利。但残酷的现实是:真正决定你账户能否活下来的,往往不是入场信号,而是仓位管理(Position Sizing)。

一个再好的策略,如果每笔下注比例失控,也可能在一次连续亏损中把账户清零;而下注太保守,又会白白浪费复利增长的空间。今天这篇文章,就带大家用 Python 把「期望值(Expectancy)」「胜率(Win Rate)」和大名鼎鼎的「凯利公式(Kelly Criterion)」串起来,算出属于你自己的最优下注比例。


一、什么是交易中的期望值(Expectancy)

在谈仓位之前,我们必须先搞懂期望值。

期望值的定义:在足够大的样本下,你平均每笔交易期望赚到或亏掉的金额。它代表的是你真正的「数学优势」。

这里有一个新手最容易踩的坑:

⚠️ 常见误区:期望值不是「你赢的时候能赚多少」,而是把盈利交易、亏损交易、胜率、败率综合到一起后得到的单笔平均结果。

计算期望值前,先理解两个核心组件:

  • • 平均盈利(Average Win):所有盈利交易的总金额 ÷ 盈利交易笔数,衡量你判断正确时的回报。
  • • 平均亏损(Average Loss):所有亏损交易的总金额 ÷ 亏损交易笔数,衡量止损被触发时的资金损耗。

标准期望值公式(以风险单位 R 表示,1 笔标准止损 = 1.00R):

期望值 E =(胜率 × 平均盈利)-(败率 × 平均亏损)

判断标准很简单:

  • • 若 E > 0.00R:你有正向优势,长期会盈利。
  • • 若 E < 0.00R:你是负向优势(就像玩赌场游戏),长期必然失血。

一个具体案例

假设一位交易者每笔风险 500 美元(即 1R = 500 美元),在 100 笔交易的样本中:

  • • 胜率:40%(40 笔盈利)
  • • 平均盈利:1500 美元(即 3.00R)
  • • 平均亏损:500 美元(即 1.00R)

代入公式:

E =(0.40 × 1500)-(0.60 × 500)= 600 - 300 = +300 美元 / 笔

换算成 R 倍数就是 0.60R / 笔。注意看:即使这个人有 60% 的时间在亏钱,只要期望值为正,100 笔交易下来依然能净赚约 30000 美元(100 × 300)。这就是「亏多赢少但依然赚钱」的数学本质。


二、期望值与胜率的关系

要正确决定仓位,你得先理解期望值和胜率是怎么互相牵制的。三个关键量:

  • • 胜率 W:盈利交易占比。
  • • 止损风险:基准风险单位,止损被打掉时亏掉的金额。
  • • 期望值 E:所有交易(盈亏合并)的净平均回报。

如果你的策略目标是 0.30R 的期望值 搭配 50% 的胜率,那么每冒 1.00 美元的止损风险,长期平均能净赚 0.30 美元。

由结构关系,可以反推出「隐含盈亏比 B」(即赢一次相当于多少个 R):

B =(E + 1 - W)/ W

代入 E = 0.30、W = 0.50:

B =(0.30 + 1 - 0.50)/ 0.50 = 0.80 / 0.50 = 1.60

也就是说:50% 胜率想拿到 0.30R 期望值,你平均每次要用 1.00R 的止损去博取 1.60R 的盈利。用 1 元的风险去赢 1.6 元、赢一半,平均每笔正好赚 0.30 元。


三、用凯利公式计算最优下注比例

凯利公式的作用,是算出应该把账户的多大比例(记为 f*)押在单笔风险单位(1R)上,从而最大化资金的长期对数增长率。

在盈亏比为 B 的情形下,可以用如下形式估算:

f* = 期望值 / 盈亏比 = E / B

沿用上面的参数(E = 0.30R、W = 50%、账户 = 10000 美元),一步步推导:

第 1 步:计算隐含盈亏比 B

B =(0.30 + 1 - 0.50)/ 0.50 = 1.60

第 2 步:计算完整凯利比例 f*

f* = E / B = 0.30 / 1.60 = 0.1875 = 18.75%

第 3 步:分数凯利缩放

由于完整凯利波动极大,实战中常按比例缩放:

配置档位
凯利系数
单笔风险
对应金额(10000 美元账户)
完整凯利
1.0×
18.75%
1875.00 美元
半凯利
0.5×
9.37%
937.50 美元
四分之一凯利
0.25×
4.69%
468.75 美元

四、用 Python 模拟 200 笔交易的资金曲线

光讲公式不够直观,我们用 Python 跑一个模拟:基于 50% 胜率的二项分布生成 200 笔交易序列,对比不同下注比例下资金曲线的差异。

import numpy as np
import
 matplotlib.pyplot as plt

# ===== 基础参数设置 =====

np.random.seed(42)          # 固定随机种子,保证结果可复现
n_trades = 200              # 交易笔数
win_rate = 0.50             # 胜率 50%
win_R = 1.60                # 盈利时的 R 倍数(隐含盈亏比)
loss_R = 1.00               # 亏损时的 R 倍数
start_equity = 10000        # 初始资金(美元)

# 不同策略对应的单笔风险比例

strategies = {
    "完整凯利 (18.75%)"
: 0.1875,
    "半凯利 (9.37%)"
:    0.0937,
    "四分之一凯利 (4.69%)"
: 0.0469,
    "固定风险 (2%)"
:     0.0200,
}

# ===== 生成交易结果序列:True 为盈利,False 为亏损 =====

outcomes = np.random.rand(n_trades) < win_rate

# ===== 逐笔计算每种策略的资金曲线 =====

def
 simulate(risk_fraction):
    equity = start_equity
    curve = [equity]
    for
 win in outcomes:
        # 本笔风险金额 = 当前资金 × 风险比例

        risk_amount = equity * risk_fraction
        if
 win:
            equity += risk_amount * win_R   # 盈利:赚 1.60R
        else
:
            equity -= risk_amount * loss_R  # 亏损:亏 1.00R
        curve.append(equity)
    return
 curve

# ===== 绘制对比图 =====

plt.figure(figsize=(10, 6))
for
 name, frac in strategies.items():
    plt.plot(simulate(frac), label=name)

plt.yscale("log")           # 用对数坐标观察复利增长
plt.title("200 笔交易资金曲线对比(期望值 = 0.30R)")
plt.xlabel("交易笔数")
plt.ylabel("账户资金(美元,对数刻度)")
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

💡 小提示:np.random.seed() 固定随机种子后,每次运行得到的交易序列都一样,方便反复调试和对比策略。想看不同「运气」下的结果,改一下种子数字即可。


五、模拟结果的关键结论

跑完这段代码,你会看到几条走势差异巨大的曲线,核心结论如下:

  1. 1. 完整凯利(18.75%):整体增长最猛,稳居对数图顶部。但代价是剧烈波动和暴力回撤——在连亏阶段,跌幅可能超过 50%。绝大多数真人交易者根本扛不住这种心理压力,往往会中途放弃策略。
  2. 2. 半凯利 & 四分之一凯利(9.4% 与 4.7%):显著平滑了资金曲线,大幅压低回撤,同时依然能跑赢保守策略。这是收益与风险之间的甜蜜点。
  3. 3. 固定风险(2%):曲线极其平稳、波动很小,但在拥有持续 0.30R 优势的情况下,会白白浪费大量复利增长空间。

实战执行要点

  • • 先量化你的优势:不要在不知道自己期望值和胜率的情况下就动态调整仓位。这两个数字必须来自回测或前测(模拟盘 / 纸上交易)。
  • • 把 1R 锚定在止损上:1R 不是你的整个仓位规模,而是「止损被打掉时亏损的金额」。这是新手最容易混淆的一点。
  • • 默认使用分数凯利:真实市场存在黑天鹅风险,完整凯利过于激进。采用四分之一凯利(约 4.69%)或半凯利(约 9.37%)能在保护资金、控制回撤的同时,依然获得强劲的复利效果。

总结

这篇文章的核心,其实就一句话:决定量化交易长期存活的,是仓位管理,而不是入场信号。

我们从期望值出发,理解了「亏多赢少也能赚钱」的数学本质;再通过胜率反推隐含盈亏比;最后用凯利公式算出理论最优下注比例,并用 Python 模拟验证了「激进凯利收益高但回撤吓人、分数凯利更适合实战」这一结论。

对正在学习 Python 的你来说,这不仅是一个金融知识点,更是一个绝佳的编程练习:用几十行代码,就能把抽象的数学优势可视化成一条条资金曲线。建议你亲手把上面的代码跑一遍,改改胜率、盈亏比和随机种子,感受一下参数变化对资金曲线的巨大影响。

理解了这套逻辑,你就已经领先大多数还在到处找「圣杯指标」的散户了。


参考文章

加入专注于财经数据与量化投研的知识星球【数据科学实战】,获取本文完整研究解析、代码实现细节。

财经数据与量化投研知识社区

2026年全面升级已落地!【数据科学实战】知识星球核心权益如下:

  1. 1. 双典系统赋能:获赠《财经数据宝典》与《量化投研宝典》完整文档,凝练多年实战经验,构建系统化知识框架;
  2. 2. 量化因子日更教程(2026重磅新增):每日更新「量化因子专题教程」,配套完整可运行代码与实战案例,深度拆解因子构建、回测与优化全流程;
  3. 3. 量化文章专题教程库:500+篇星球独有高质量教程式文章,系统覆盖策略开发、因子研究、风险管理等核心领域,内容基本每日更新,并配套精选学习资料与实战参考;
  4. 4. 量化投研实战课程:赠送《AKQuant-入门及实战》《PyBroker-入门及实战》视频课程,手把手教学,快速掌握量化策略开发技能;
  5. 5. 财经数据支持:定期更新国内外财经数据,为策略研发提供精准、可靠的数据基础;
  6. 6. 顶尖学者与行业专家分享:年度邀请学术界博士与业界资深专家开展前沿论文精讲与实战案例分享,不少于4场,直击研究前沿与产业实践;
    专家直连答疑:与核心开发者及领域专家实时互动,高效解决投研实战难题;
  7. 7. 专业社群与专属福利:加入高质量交流社群,获取课程折扣及更多独家资源。

星球已沉淀丰富内容生态——涵盖量化文章专题教程库、因子日更系列、高频数据集、PyBroker实战课程、专家深度分享与实时答疑服务。无论您是初探量化的学习者,还是深耕领域的从业者,这里都是助您少走弯路、高效成长的理想平台。诚邀加入,共探数据驱动的投资未来!

好文推荐

1. 用 Python 打造股票预测系统:Transformer 模型教程(一)

2. 用 Python 打造股票预测系统:Transformer 模型教程(二)

3. 用 Python 打造股票预测系统:Transformer 模型教程(三)

4. 用 Python 打造股票预测系统:Transformer 模型教程(完结)

5. 揭秘隐马尔可夫模型:因子投资的制胜武器

6. YOLO 也能预测股市涨跌?计算机视觉在股票市场预测中的应用

7. 金融 AI 助手:FinGPT 让你轻松掌握市场分析

8. 量化交易秘籍:为什么专业交易员都在用对数收益率?

9. Python 量化投资利器:Ridge、Lasso 和 Elastic Net 回归详解

10. 掌握金融波动率模型:完整 Python 实现指南

好书推荐

最新文章

随机文章