非正态分布投资组合优化咨询:optimize.portfolio适配及替代方法
非正态分布资产的投资组合优化解决方案
Hey there! Let's break down your problem and solutions step by step. First off, I notice you're already using Expected Shortfall (ES) and maximizing the STARR ratio in your code—great call, because these metrics are explicitly designed to handle non-normal distributions (they focus on tail risk, unlike variance which relies heavily on normality assumptions). You're already on the right track!
1. 能否在optimize.portfolio中纳入自定义分布函数?
optimize.portfolio没有直接输入自定义分布的参数,但有几种适配非正态资产的变通方法:
- 使用非正态友好的目标函数:你已经在用
ES作为风险度量,这完全适配非正态场景。除此之外,还可以加入偏度、峰度这类反映非正态性的目标,让组合更贴合资产特性:# 添加正偏度目标,偏好右尾收益的组合 portf <- add.objective(portf, type="risk", name="skewness", arguments=list(symmetric=FALSE)) - 基于目标分布模拟收益数据:如果你的资产明确服从某类非正态分布(比如t分布、广义帕累托分布),可以先模拟符合该分布的收益数据,再传入优化函数。这里以t分布为例:
library(MASS) # 用历史收益估计t分布参数 t_fit <- fitdistr(hist_returns[,1], "t") # 模拟10000组符合该分布的收益数据 sim_returns <- replicate(10000, rt(ncol(hist_returns), df = t_fit$estimate["df"], mean = t_fit$estimate["m"], sd = t_fit$estimate["s"])) # 用模拟的非正态收益做优化 optPort_sim <- optimize.portfolio(t(sim_returns), portf, optimize_method = "ROI", maxSTARR=TRUE, trace=TRUE)
2. 非正态假设下的替代优化方法
如果optimize.portfolio的灵活性不够,这些方法专门针对非正态资产设计:
- 分位数回归优化:直接以特定分位数的收益为目标(比如95%分位数),完全不依赖分布假设。可以用
quantreg包配合自定义优化逻辑实现。 - 鲁棒投资组合优化:针对分布不确定性设计,即使收益偏离假设的非正态分布,也能保证组合表现稳定。可以使用
RobustPortfolioOpt包的相关工具。 - 机器学习驱动的优化:用随机森林、梯度提升树等模型拟合资产收益的条件分布,再基于拟合结果优化组合,适合复杂的非正态收益场景。
- Black-Litterman模型:如果对非正态资产有主观观点,这个模型能将市场均衡与你的见解结合,且对分布假设的要求远低于传统均值-方差优化。
针对你现有代码的小提示
我注意到你把前两个资产的权重固定为0.1,最后两个固定为0.3(min和max数值相同)。如果这些不是硬性的监管或策略约束,可以考虑放宽范围——这能让算法在非正态假设下找到更优的权重分配。
内容的提问来源于stack exchange,提问作者Emil
相关产品推荐
相关产品推荐

