8

我无法在投资组合分析包中加入自定义预期回报。通常预期收益是一些专业的期望/观点或与基本面指标分开计算。投资组合分析允许创建自定义矩函数来计算过去收益的矩,但我不明白如何将已经计算的收益合并到优化问题中。任何帮助表示赞赏,这里是小示例数据集:

#Download package and sample returns
library(PortfolioAnalytics) 
library(PerformanceAnalytics)
data(edhec)
returns <- tail(edhec[,1:4], 10)

#Example expected return xts that I'm usually working with. Calculated separately.
N <- 10
M <- 4
views <- as.xts(data.frame(matrix(rnorm(N*M,mean=0,sd=0.05), N, M)), order.by = index(returns))
colnames(views) <- colnames(returns)

让我们创建具有一些目标的基本投资组合。

pf <- portfolio.spec(assets = colnames(returns))
pf <- add.constraint(portfolio = pf, type = "full_investment")
pf <- add.constraint(portfolio = pf, type = "long_only")
pf <- add.objective(portfolio = pf, type = "return", name = "mean")
pf <- add.objective(portfolio = pf, type = "risk", name = "StdDev")

现在我想在每个时期优化投资组合 pf 并考虑观点(该时期的预期回报),但此时我已经没有想法了。

4

2 回答 2

2

我现在意识到,在设置赏金之后,问题已经在这里得到了回答。我会尽我所能地总结一下。

当您调用 时optimize.portfolio,有一个可选参数momentFUN,它定义了您的投资组合的时刻。它的一个论点是momentargs,你可以在optimize.portfolio.

首先,您需要选择一组预期收益。我将假设您的views时间序列中的最后一个条目:

my.expected.returns = views["2009-08-31"] 

您还需要自己的协方差矩阵。我会从你的计算它returns

my.covariance.matrix = cov(returns)

最后,您需要定义momentargs,这是一个由mu(您的预期收益)、sigma(您的协方差矩阵)以及第三和第四矩(我们将其设置为零)组成的列表:

num_assets = ncol(current.view)
momentargs = list()
momentargs$mu = my.expected.returns
momentargs$sigma = my.covariance.matrix
momentargs$m3 = matrix(0, nrow = num_assets, ncol = num_assets ^ 2)
momentargs$m4 = matrix(0, nrow = num_assets, ncol = num_assets ^ 3)

现在您已准备好优化您的投资组合:

o = optimize.portfolio(R = returns, portfolio = pf, momentargs = momentargs)
于 2017-08-07T23:52:13.077 回答
0

当您使用ROI进行优化并超出您的期望时,momentargs = expectations您需要添加

add.objective(eff.port, type = "return", name = "mean")

与第 382 行左右的函数代码一样optimize.portfolio,它声明它只在目标返回时才使用momentargs参数。即使您已经将其声明为约束。

于 2018-08-15T11:40:51.650 回答