You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python投资组合优化Monte Carlo模拟的sum to one约束问题

投资组合权重sum-to-one约束的蒙特卡洛采样优化方案

你当前使用的均匀随机数归一化方案本质是采样α参数全为1的狄利克雷分布,当资产数量n=100时,单个权重的方差仅约为0.0001,因此所有样本会高度集中在1/n附近,无法生成极端分布。以下是可覆盖全部可行权重组合的实现方案:

方案1:调整参数的狄利克雷分布采样

狄利克雷分布天然满足所有权重和为1的约束,通过调低浓度参数α的取值即可生成大量极端分布:

  • 当α < 1时,样本会出现大量接近0的权重,少数权重取值极高,完全覆盖你需要的单资产占比70%、其余为0这类场景
  • 当α = 1时,就是你当前使用的采样方案,样本均匀分布在单纯形上
  • 当α > 1时,所有权重会更趋近于1/n,适合做分散持仓的模拟

Python代码示例:

import numpy as np
n_assets = 100
n_simulations = 1000000
alpha = 0.1 # 数值越小,生成的权重分布越极端
weights = np.random.dirichlet(np.ones(n_assets)*alpha, size=n_simulations)

方案2:稀疏权重采样法

如果你的场景需要大量包含0权重的稀疏投资组合,可以用该方案精准控制持仓集中度:

  • 第一步:随机生成本次组合的持仓资产数量k,k的取值范围为1~n_assets,可自定义k的采样概率(比如要多出现双资产组合,就调高k=2的采样概率)
  • 第二步:从全部资产中随机不放回抽取k个作为有持仓的资产
  • 第三步:对选中的k个资产生成随机权重并归一化,剩余资产权重赋值为0

该方案可以100%覆盖你需要的任意极端持仓场景,且逻辑简单易调试。

方案3:破棍法(Stick-breaking Process)

如果需要自定义权重的衰减形态,可以使用狄利克雷过程的经典实现破棍法:

  1. 初始化剩余权重为1
  2. 对第i个资产,采样一个beta分布的比例p_i = Beta(α, β),赋值该资产权重为p_i * 剩余权重
  3. 更新剩余权重为剩余权重 * (1-p_i)
  4. 重复上述步骤直到所有资产权重分配完成

调整α、β参数即可控制权重的集中程度,适合需要自定义分布形态的研究场景。

你原方案的采样结果分布如下:
现有约束结果分布示意图

内容的提问来源于stack exchange,提问作者Prebish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:24:04