本节书摘来异步社区《量化金融R语言初级教程》一书中的第2章,第2.1节,作者: 【匈牙利】Gergely Daróczi(盖尔盖伊) , 等 译者: 高蓉 , 李茂 责编: 胡俊英,更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.4 切线组合和资本市场线
当组合中加入一个无风险资产R,会发生什么?如果σR=0并且X是任意的一个风险投资组合,那么Var(αR+(1−α)X=(1−α)2Var(X),并且显然也有E(αR+(1−α)X)= αE(R)+(1−α)E(X)。这意味着这些组合在均值-标准差平面上形成了一条直线。位于这条直线上的任何投资组合都可以通过投资于R和X来得到。很明显,X的最佳选择位于这条直线与有效边界的切点。这个切点叫作市场组合或者切点组合,而风险资产的有效前沿在这个点的切线叫作资本市场线(Capital Market Line,CML),它包含了该情形下所有资产的有效投资组合。我们解决的最后一个关于均值-方差模型的问题是,如何决定市场投资组合(或等价的,CML)。
通过修正方差最小化的代码,我们可以轻松地解决这个问题。首先,如果我们想加入无风险资产,就在协方差矩阵中加入了全部为0的一行和一列(其中n是总资产个数,包括无风险资产在内)。
> n <- 6; mu <- 0.005
> Q <- cbind(cov(return), rep(0, n - 1))
> Q <- rbind(Q, rep(0, n))
并在收益率向量中加入无风险资产。
> r <- c(colMeans(return), rf)
然后,我们可以使用新的协方差矩阵和新的收益率向量来决定最优投资组合的权重,接着基于“使用真实数据工作”这一节描述的minvariance代码来移除第n个资产。
> Q <- rbind(Q, rep(1, n), r)
> Q <- cbind(Q, rbind(t(tail(Q, 2)), matrix(0, 2, 2)))
> b <- c(rep(0, n), 1, mu)
得到下面的中间结果。
> round(Q, 6)
AAPL GOOG MSFT IBM T r
AAPL 0.000630 0.000338 0.000249 0.000233 0.000218 0e+00 1 0.000748
GOOG 0.000338 0.000462 0.000226 0.000186 0.000182 0e+00 1 0.000008
MSFT 0.000249 0.000226 0.000341 0.000178 0.000177 0e+00 1 -0.000236
IBM 0.000233 0.000186 0.000178 0.000240 0.000157 0e+00 1 0.000439
T 0.000218 0.000182 0.000177 0.000157 0.000283 0e+00 1 -0.000179
0.000000 0.000000 0.000000 0.000000 0.000000 0e+00 1 0.000100
1.000000 1.000000 1.000000 1.000000 1.000000 1e+00 0 0.000000
r 0.000748 0.000008 -0.000236 0.000439 -0.000179 1e-04 0 0.000000
> b
[1] 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.005
解方程后,市场组合的结果如下。
> w <- solve(Q, b)
> w <- head(w, -3)
> w / sum(w)
AAPL GOOG MSFT IBM T
-10.154891 4.990912 12.347784 -18.010579 11.826774