这是一个有趣的谜题。
下面是一个R 片段,它标识二次函数相对于从 y 轴上的点 (0,rf) 绘制的直线的切点。
对于那些熟悉投资组合理论的人来说,这一点是收益和风险空间,解决方案是一组定义切线投资组合的权重(最大夏普比率)。该片段允许负权重(即短裤),并且有一个相等的权重约束,要求权重的总和 = 1。
require(quadprog)
# create artifical data
nO <- 100 # number of observations
nA <- 10 # number of assets
mData <- array(rnorm(nO * nA, mean = 0.001, sd = 0.01), dim = c(nO, nA))
rf <- 0.0001 # riskfree rate (2.5% pa)
mu <- apply(mData, 2, mean) # means
mu2 <- mu - rf # excess means
# qp
aMat <- as.matrix(mu2)
bVec <- 1 # set expectation of portfolio excess return to 1
zeros <- array(0, dim = c(nA,1))
solQP <- solve.QP(cov(mData), zeros, aMat, bVec, meq = 1)
# rescale variables to obtain weights
w <- as.matrix(solQP$solution/sum(solQP$solution))
# compute sharpe ratio
SR <- t(w) %*% mu2 / sqrt(t(w) %*% cov(mData) %*% w)
我的问题-如何调整代码以解决最佳权重集,以使权重之和为任意数字(包括权重之和 = 0 的自筹资金投资组合的极端情况),而不是统一?
或者,您可以考虑将元素“cash”添加到方差协方差为 0 的协方差矩阵中,并添加要求现金权重 = 1 的等式约束。但是,该矩阵不是半正定的。我也怀疑非现金权重可能微不足道地为零。