我希望最大化投资组合的回报,确保风险低于一定水平。我可以使用哪种功能进行优化?

时间:2014-10-09 12:53:19

标签: r optimization portfolio

要最大化的目标函数pos%*%mu其中pos是权重行向量,mu是{{1}的平均回报的列向量股票

约束:1)d其中ones%*%pos = 1是1 * d大小的行向量(d是股票数量)

2)ones#其中,cov是大小为pos%*%cov%*%t(pos) = rb^2的协方差矩阵,d*d是风险预算,是自由参数,其值将被更改为绘制有效边界

我想在R中为此优化问题编写代码,但我无法想到任何函数或库以寻求帮助。

PS:solve.QP in library quadprog已被用于最小化受目标回报影响的协方差。此功能是否也可用于在风险预算范围内最大化回报? 如何为此问题指定Dmat矩阵和dvec向量?

编辑:

rb

我应该如何指定Dmat和dvec?我希望优化library(quadprog) mu <- matrix(c(0.01,0.02,0.03),3,1) cov # predefined covariance matrix of size 3*3 pos <- matrix(c(1/3,1/3,1/3),1,3) # random weights vector edr <- pos%*%mu # expected daily return on portfolio m1 <- matrix(1,1,3) # constraint no.1 ( sum of weights = 1 ) m2 <- pos%*%cov # constraint no.2 Amat <- rbind(m1,m2) bvec <- matrix(c(1,0.1),2,1) solve.QP(Dmat= ,dvec= ,Amat=Amat,bvec=bvec,meq=2) 另外,我认为我没有正确指定约束2。它应该使投资组合的方差等于风险预算。

1 个答案:

答案 0 :(得分:0)

(免责声明:在R中可能有更好的方法可以做到这一点。我绝不是与R相关的任何专家,我对R如何做事做了一些假设,特别是你'重新使用内点法。此外,你可能会尝试做一个R包,但我不知道它是什么或如何使用它。)

最小化受目标回报影响的风险是具有二次目标的线性约束问题,如下所示:

min        x^T Q x
subject to sum x_i = 1
           sum ret_i x_i >= target
           (and x >= 0 if you want to be long-only).

根据风险预算最大化回报是二次约束的;它看起来像这样:

max        ret^T x
subject to sum x_i = 1
           x^T Q x <= riskbudget
           (and maybe x >= 0).

与引入凸二次约束相比,目标中的凸二次项在内点法中减少了计算成本。对于二次目标项,Q矩阵只显示在增广系统中。使用凸二次约束,您需要针对包含二阶锥因子的更复杂的锥进行优化,并且需要注意如何求解出现的线性系统。

我建议你反复使用风险最小化公式,对目标参数进行二元搜索,直到找到一个近似最大化回报的投资组合,这取决于您的风险预算。我建议采用这种方法,因为它可能足以满足您的需求。

如果您真的想直接解决问题,我建议您使用Todd,Toh和Tutuncu的SDPT3界面。这真是太过分了; SDPT3允许您制定和解决您选择的对称锥形程序。我还要注意,投资组合优化问题是对称锥形程序的特殊情况;据报道,其他方法非常成功。不幸的是,我没有研究过它们。