R语言fPortfolio包给定风险下最大化收益组合的BUG求助
fPortfolio包maxreturnPortfolio()函数忽略targetRisk参数的BUG修复求助
我在使用R语言的fPortfolio包,尝试在给定风险水平下寻找收益最大化的投资组合时,发现一个严重BUG:调用maxreturnPortfolio()函数时,无论如何修改targetRisk参数的目标风险值,输出的最优组合权重始终保持不变,这说明函数完全没有考虑用户设定的目标风险限制。
最小可复现示例
# 加载依赖包 library(fPortfolio) # 生成模拟资产收益数据 set.seed(123) assetReturns <- data.frame( Asset1 = rnorm(100, 0.01, 0.05), Asset2 = rnorm(100, 0.02, 0.08), Asset3 = rnorm(100, 0.015, 0.06) ) # 创建投资组合规范对象并设定目标风险 spec <- portfolioSpec() setTargetRisk(spec) <- 0.03 # 计算第一组最优组合 portfolio1 <- maxreturnPortfolio(assetReturns, spec = spec) weights1 <- getWeights(portfolio1) # 修改目标风险值 setTargetRisk(spec) <- 0.06 # 计算第二组最优组合 portfolio2 <- maxreturnPortfolio(assetReturns, spec = spec) weights2 <- getWeights(portfolio2) # 对比两组权重 cat("目标风险0.03时的组合权重:\n") print(weights1) cat("\n目标风险0.06时的组合权重:\n") print(weights2)
运行上述代码会发现,两次输出的权重完全一致,说明targetRisk参数未生效。
问题背景与分析
- 该问题已存在近10年,此前已有其他用户在社区提出,但包的官方文档及作者相关书籍均未给出解决方案。
- 查看
maxreturnPortfolio()及其依赖的feasiblePortfolio()函数源码后发现:feasiblePortfolio()会在内部自行计算并赋值targetRisk,直接忽略了用户通过portfolioSpec()传入的目标风险值,这是导致参数失效的核心原因。
现寻求社区帮助,希望能进一步定位问题细节,并找到可行的修复方案,让maxreturnPortfolio()函数能够正确响应targetRisk参数,输出符合指定风险水平的收益最大化投资组合。
内容的提问来源于stack exchange,提问作者itpetersen
相关产品推荐
相关产品推荐

