使用非线性优化器进行投资组合优化

时间:2016-01-26 17:21:38

标签: r solver portfolio nonlinear-optimization quantitative-finance

我一直在尝试使用已知的mu和协方差矩阵来优化投资组合(受目标风险影响的最大回报),受制于框和组约束。似乎最好的解决方案是使用'Rdonlp2'包创建我自己的函数。但是,当在非常基本(仅限长期)约束下测试此包时,它仅产生相等的加权投资组合。当我添加了一个框和组约束时,它产生了一个等于加权的投资组合,但是没有注册组约束。

install.packages("fPortfolio")
install.packages("Rdonlp2", repos="http://R-Forge.R-project.org")

如果您还没有包^

library(fPortfolio)
library(Rdonlp2)
lppData=100*LPP2005.RET[,1:6]
mr1Spec = portfolioSpec()
setTargetRisk(mr1Spec) = 0.1
setSolver(mr1Spec) = "solveRdonlp2"

efficientPortfolio(data=lppData, spec=mr1Spec, constraints="LongOnly")
efficientPortfolio(data=lppData, spec=mr1Spec, constraints= c("maxsum[1:6]=.75", "maxW[1:6]=.1"))

有没有人使用此优化器成功?任何有助于让投资组合正确优化或设置我自己的功能的帮助将非常感谢!

@WaltS 如果我只使用框约束而没有指定优化器,我会得到一个解决方案(下面的代码)

library(fPortfolio)
lppData=100*LPP2005.RET[,1:6]
mr1Spec = portfolioSpec()
portfolioFrontier(data=lppData, spec=mr1Spec, constraints=c("minW[1:6]=-1", "maxW[1:6]=2"))

但是如果我添加组约束......

portfolioFrontier(data=lppData, spec=mr1Spec, constraints= c("maxsumW[1:6]=.2", "maxsumW[1:6]=.75"))

并运行它,它会产生以下错误......

Error in `colnames<-`(`*tmp*`, value = c("SBI", "SPI", "SII", "LMI", "MPI",  : 
  attempt to set 'colnames' on an object with less than two dimensions

在仅限于框的情况下,如果可以调用与最接近.15的vol相对应的投资组合权重,那么你是否会变成约.38?

0 个答案:

没有答案