要最大化的目标函数: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。它应该使投资组合的方差等于风险预算。
答案 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允许您制定和解决您选择的对称锥形程序。我还要注意,投资组合优化问题是对称锥形程序的特殊情况;据报道,其他方法非常成功。不幸的是,我没有研究过它们。