Vii*_*ama 8 optimization portfolio r r-portfolioanalytics
我在Portfolio Analytics包中加入自定义预期回报时遇到问题.通常预期回报是一些专业期望/观点,或与基本指标分开计算.Portfolio Analytics允许创建自定义时刻函数来计算过去回报的时刻,但我不明白如何将已经计算的回报合并到优化问题中.感谢任何帮助,这里是一个小示例数据集:
#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)
Run Code Online (Sandbox Code Playgroud)
让我们创建一些基本的投资组合.
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")
Run Code Online (Sandbox Code Playgroud)
现在我想在每个时期优化投资组合,并考虑账户视图(该期间的预期回报),但此时我已经没有想法了.
我现在意识到,在设置了赏金之后,问题已经在这里得到了解答。我将尽我所能地进行总结。
当您调用 时optimize.portfolio,有一个可选参数momentFUN,它定义了您的投资组合的时刻。它的参数之一是momentargs,您可以通过 in optimize.portfolio。
首先,您需要选择一组预期回报。我假设你的views时间序列中的最后一个条目:
my.expected.returns = views["2009-08-31"]
Run Code Online (Sandbox Code Playgroud)
您还需要自己的协方差矩阵。我会根据你的计算出来returns:
my.covariance.matrix = cov(returns)
Run Code Online (Sandbox Code Playgroud)
最后,您需要定义,它是一个由(您的预期回报)、(您的协方差矩阵)以及第三和第四矩(我们将其设置为零)momentargs组成的列表:musigma
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)
Run Code Online (Sandbox Code Playgroud)
现在您已准备好优化您的投资组合:
o = optimize.portfolio(R = returns, portfolio = pf, momentargs = momentargs)
Run Code Online (Sandbox Code Playgroud)