news 2026/7/8 8:59:19

一种用于在多次重复投资或赌博中最佳资金分配比例的数学工具——凯利公式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一种用于在多次重复投资或赌博中最佳资金分配比例的数学工具——凯利公式

一.背景

凯利公式是一种用于确定在多次重复投资或赌博中最佳资金分配比例的数学工具,由约翰·凯利于1956年提出。其核心目的是在已知成功概率和赔率的情况下,最大化资金增长率,同时避免破产风险‌。

二.公式

三.应用场景与局限性

  • ‌适用场景‌:主要用于量化交易、投资组合管理或任何重复性决策,以平衡风险与收益‌

  • 股票/期货交易‌:通过计算胜率(p)和赔率(b)确定最佳仓位,避免过度集中风险‌

  • 高频交易‌:结合高胜率、低赔率的特点,动态调整资金比例以稳定盈利‌

  • ‌价值投资‌:长期持有高胜率资产时,公式可辅助仓位管理‌

  • 赌场游戏‌:如21点、赛马等,公式可计算最优下注比例,但需注意赌场规则通常设计为负期望收益‌

四.例子:投硬币

1. 游戏规则设定‌

假设有一个公平的投硬币游戏:

  • ‌正面朝上‌:你赢2元(即盈亏比 b=2)。

  • ‌反面朝上‌:你输1元(即亏损全部下注本金)。

  • ‌胜率(p)‌:50%(正反面概率均等)。

  • ‌败率(q)‌:50%(q=1−p)。

‌2. 凯利公式计算‌

凯利公式的表达式为:

即每次应投入当前资金的 ‌25%‌ 作为最佳下注比例‌。

‌3. 动态调整与收益‌
  • ‌初始资金100元‌:首次下注25元。

    • 若赢,资金增至125元,下次下注31.25元(125×25%)。

    • 若输,资金降至75元,下次下注18.75元(75×25%)。

  • ‌长期复利效应‌:理论上,按此比例下注可实现资金指数增长‌。

五.例子:基金投资

东方臻宝纯债债券A(006210)基金概况

业绩表现‌
  • ‌近1年涨幅‌:5.25%(同类平均2.69%)

  • ‌近3年涨幅‌:15.17%(同类平均9.94%)

  • ‌成立以来涨幅‌:396.13%(年化收益率约56.02%)

  • ‌同类排名‌:长期稳居纯债债券型基金前10%(如近3年排名33/939)‌

基金参数设定‌
  • ‌上涨概率(p)‌:基于近3年历史表现,假设上涨概率为 ‌60%‌(年化收益15.17%,同类平均9.94%)‌

  • ‌下跌概率(q)‌:40%(q=1−p)

  • ‌盈亏比(b)‌:假设上涨时收益5%(年化5.25%),下跌时亏损2%(近1月最大回撤0.42%),则 b=2.5

  • 则公式如下:

结论:该基金适合采用 ‌半凯利策略‌(16%仓位),长期复利效果显著,但需结合止损和动态调整‌,原因如下:

1. 低波动性与风险控制需求‌

该基金为纯债型产品,近1月最大回撤仅0.42%,年化波动率显著低于股票型基金‌,半凯利策略(如16%仓位)可进一步降低单一资产集中风险,符合其低风险定位。

‌2. 参数敏感性修正‌

凯利公式依赖概率(p)和盈亏比(b)的准确估计,而债券市场受利率政策影响,参数易波动‌,半凯利策略通过减半仓位,可对冲模型误差(如高估 p或b)导致的过度投资风险。

‌3. 长期复利与稳定性平衡‌

该基金近3年累计收益15.17%,年化5.25%,但需避免短期回撤对复利的冲击‌半凯利策略在保持增长潜力的同时,通过仓位限制(如16%)减少极端市场下的净值波动,更适配长期持有需求。

‌4. 与其他资产的协同配置‌

根据投研报告,该基金在组合中常作为债券类核心配置(占比73%),需与股票、海外资产等形成互补半凯利策略的仓位控制可优化整体组合的夏普比率,避免单一资产过度暴露。

六.代码实现

使用Python实现蒙特卡洛模拟验证凯利公式,‌蒙特卡洛模拟‌是一种通过随机采样和统计分析来模拟复杂系统行为的数学方法。其核心在于处理输入参数的不确定性,通过生成大量随机组合进行数值计算并统计结果,从而评估系统风险或变化规律。

import numpy as np import matplotlib.pyplot as plt from tqdm import tqdm # 进度条工具 class KellyMonteCarlo: def init(self, p=0.6, b=2, initial_capital=100000, n_simulations=1000, n_periods=252): """ 初始化蒙特卡洛模拟参数 :param p: 胜率 (默认0.6) :param b: 赔率 (默认2) :param initial_capital: 初始本金 (默认10万) :param n_simulations: 模拟次数 (默认1000次) :param n_periods: 投资周期数 (默认252个交易日) """ self.p = p self.b = b self.initial_capital = initial_capital self.n_simulations = n_simulations self.n_periods = n_periods self.kelly_fraction = self.calculate_kelly() def calculate_kelly(self): """计算凯利最优投注比例""" return (self.b * self.p - (1 - self.p)) / self.b def simulate_single_path(self, f): """模拟单次投资路径""" capital = self.initial_capital history = [capital] for _ in range(self.n_periods): if np.random.random() < self.p: capital *= (1 + f * self.b) else: capital *= (1 - f) history.append(capital) return history def run_monte_carlo(self, test_fractions=None): """运行蒙特卡洛模拟""" if test_fractions is None: test_fractions = [0.1, 0.2, self.kelly_fraction, 0.5, 0.8, 1.0] results = {} for f in test_fractions: paths = [] final_values = [] for _ in tqdm(range(self.n_simulations), desc=f"模拟{f*100:.0f}%仓位"): path = self.simulate_single_path(f) paths.append(path) final_values.append(path[-1]) results[f] = { 'paths': paths, 'final_values': final_values, 'median': np.median(final_values), 'mean': np.mean(final_values), 'std': np.std(final_values), 'ruin_prob': sum(1 for x in final_values if x < self.initial_capital*0.1) / self.n_simulations } return results def plot_results(self, results): """可视化模拟结果""" plt.figure(figsize=(15, 10)) # 绘制典型路径 plt.subplot(2, 2, 1) for f, data in results.items(): for i in range(min(5, self.n_simulations)): # 展示前5条路径 plt.plot(data['paths'][i], alpha=0.5, label=f'{f*100:.0f}%' if i == 0 else "") plt.title('典型投资路径') plt.xlabel('交易周期') plt.ylabel('资金量') plt.legend() plt.grid(True) # 绘制最终资金分布 plt.subplot(2, 2, 2) for f, data in results.items(): plt.hist(data['final_values'], bins=30, alpha=0.5, label=f'{f*100:.0f}%') plt.axvline(self.initial_capital, color='black', linestyle='--') plt.title('最终资金分布') plt.xlabel('最终资金') plt.ylabel('频率') plt.legend() plt.xscale('log') plt.grid(True) # 绘制风险收益指标 plt.subplot(2, 2, 3) metrics = ['median', 'mean', 'std', 'ruin_prob'] for metric in metrics: values = [data[metric] for f, data in results.items()] plt.plot([f*100 for f in results.keys()], values, 'o-', label=metric) plt.title('不同仓位的风险收益指标') plt.xlabel('投注比例(%)') plt.ylabel('指标值') plt.legend() plt.grid(True) # 标记凯利最优值 plt.subplot(2, 2, 4) kelly_data = results[self.kelly_fraction] plt.boxplot([data['final_values'] for f, data in results.items()], positions=[f*100 for f in results.keys()], widths=5) plt.axvline(self.kelly_fraction*100, color='red', linestyle='--', label='凯利最优') plt.title('不同仓位的资金分布比较') plt.xlabel('投注比例(%)') plt.ylabel('最终资金(对数)') plt.yscale('log') plt.legend() plt.grid(True) plt.tight_layout() plt.show() if name == "main": # 参数设置(基于东方臻宝纯债债券A 006210的假设参数) simulator = KellyMonteCarlo(p=0.6, b=2, initial_capital=100000) print(f"凯利最优投注比例: {simulator.kelly_fraction*100:.1f}%") # 运行蒙特卡洛模拟 results = simulator.run_monte_carlo() # 输出关键统计量 for f, data in results.items(): print(f"\n投注比例 {f*100:.0f}%:") print(f"中位最终资金: ¥{data['median']:,.2f}") print(f"平均最终资金: ¥{data['mean']:,.2f}") print(f"标准差: ¥{data['std']:,.2f}") print(f"破产概率: {data['ruin_prob']*100:.1f}%") # 可视化结果 simulator.plot_results(results)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/8 8:58:56

团队落地 Agent 工程化 Loop 的一些必看小技巧!

原文链接&#xff1a;AI 小老六 Agent 编程真正拉开差距的地方&#xff0c;已经不只是“会不会写提示词”。更要紧的是&#xff1a;上下文怎么进入任务&#xff0c;任务怎么自我验证&#xff0c;长程执行怎么不断修正&#xff0c;最后这些经验又怎么被团队和下一轮 Agent 继续使…

作者头像 李华
网站建设 2026/7/8 8:58:23

国民免疫调理需求攀升 牛初乳品类合规化选品标准成关注焦点

近期换季过敏高发叠加亚健康人群调理需求上涨&#xff0c;牛初乳类保健食品消费热度持续走高&#xff0c;如何规避营销陷阱选购合规有效产品&#xff0c;成为不少消费者面临的共性难题。 据主流电商平台2024年上半年健康消费数据显示&#xff0c;牛初乳相关产品搜索量同比增长1…

作者头像 李华
网站建设 2026/7/8 8:57:56

照着用就行:盘点2026年顶尖配置的一键生成论文工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂的一键生成论文工具&#xff0c;实测提速效果惊人&#xff0c;覆盖选题、写作、查重、排版全流程&#xff0c;真正帮你高效搞定论文。 一、全流程王者&#xff1a;一站式搞定论文全链路&#xff08;一天定稿首选&#x…

作者头像 李华
网站建设 2026/7/8 8:57:24

手机如何远程控制电脑 靠谱的手机远程控制软件

出门在外急需调取电脑内工作素材&#xff0c;或是躺在床上想远程运行电脑单机游戏&#xff0c;一款顺手的远程控制工具能打破设备空间限制。想要找到兼顾流畅度与自定义操作的远程控制工具&#xff0c;不妨试试无界趣连2.0。它能轻松实现手机远程操控电脑&#xff0c;适配外勤办…

作者头像 李华
网站建设 2026/7/8 8:57:17

GetQzonehistory:5分钟极速备份QQ空间历史说说的完整指南

GetQzonehistory&#xff1a;5分钟极速备份QQ空间历史说说的完整指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾经翻看QQ空间时&#xff0c;发现那些珍贵的青春记忆早已消…

作者头像 李华