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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:34:52