9

这是一个有趣的谜题。

下面是一个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 的等式约束。但是,该矩阵不是半正定的。我也怀疑非现金权重可能微不足道地为零。

4

3 回答 3

9

让我们首先解释为什么这实际上会产生最大的夏普比率投资组合。

我们想要w最大化w' mu / sqrt( w' V w )。但是,如果我们乘以一个数(它是“0 次齐次”),这个量是不变w的:因此我们可以强加w' mu = 1,最大化的问题1 / sqrt( w' V w )等同于最小化w' V w。最大夏普比率投资组合不是唯一的:它们形成一条线。如果我们希望权重总和为 1(或任何其他非零数),我们只需重新调整它们。

如果我们希望权重总和为 0,我们可以将该约束添加到问题中——它只起作用,因为约束也是 0 次同质的。您仍然需要重新调整权重,例如,长度为 100%并且 100% 短。

solQP <- solve.QP(cov(mData), zeros, 
  cbind(aMat,1), 
  c(bVec,0), 
  meq = 2
)

# Let us compare with another solver
V <- cov(mData)
library(Rsolnp)
r <- solnp(
  rep(1/length(mu), length(mu)),
  function(w) - t(w) %*% mu2 / sqrt( t(w) %*% V %*% w ),
  eqfun = function(w) sum(w),
  eqB   = 0,
  LB = rep(-1, length(mu))
)
solQP$solution / r$pars  # constant
于 2012-05-10T03:33:53.423 回答
2

查看您包含的链接。显然,调用中 , 的作用是固定aMat夏普比率公式中分子的值(您的回报),因此优化的重点是最小化分母。从某种意义上说,固定分子是完全合法的,就像固定投资组合的总规模一样。您的投资组合以后可以按比例放大或缩小,它将保持相同的夏普比率。为了帮助您意识到这一点,您可以针对 bVec 的任何值(允许,除零)运行上面的代码,并且您将获得相同的权重和夏普比率结果。bVecmeq = 1solve.QPwSR

所以我觉得你可能误解了“投资组合权重”的概念。它们是代表您的投资组合构成的比率,它们的总和应为 1。一旦您已经找到了最佳权重,您就可以自由地将您的投资组合扩展到您想要的任何水平,只需乘以w您想要的投资组合的当前价值。

于 2012-05-10T03:33:19.290 回答
1

对于长期投资组合来说,这不是一个好的技术。即使是不能做空股票的投资组合,在按权重之和归一化后,其分配权重的符号也会错误。

这些情况伴随着负超额收益而出现。在这些情况下,强制w'mu = 1将解决方案置于原点的左侧(负风险)。

library(quadprog)
nA = 2 # two assets
mu2 = c(-.1,.1) # one negative excess return
Dmat = matrix(c(1,0,0,10),2,2)

aMat  <- as.matrix(mu2)
bVec  <- 1 # set expectation of portfolio excess return to 1
zeros <- array(0, dim = c(nA,1))
solQP <- solve.QP(Dmat, zeros, aMat, bVec, meq = 1)

rawW = solQP$solution
cat('\nraw weights ')
cat(rawW)

netW = rawW/sum(rawW)
cat('\nnormalized weights ')
cat(netW)

portfReturn = sum(netW*mu2)
cat('\nportfolio excess return ')
cat(portfReturn)
于 2015-12-03T18:28:05.240 回答