从均值方差到有效前沿
这篇文章的主要目的是介绍有效前沿这个理论工具和分析框架。我们由均值方差分析展开,逐步推演到有效前沿。然后,我们又说到有效前沿在投资或者量化中的应用场景,最后我们也总结了有效前沿的一些问题,尤其是敏感性问题。在教程中,特意加入了一些实验代码,可以让大家在阅读的过程中有更好的理解。
有效前沿
说到有效前沿(有些叫效率边界),就要提到马科维茨的投资组合理论了。
首先介绍下它的三大假设:
单一投资期,比如一年
流动性很高,无交易成本
投资者的选择基于最优均值方差
于是,我们可以开始推导有效前沿,在这之前,我们先约定一些数学符号:
- rf:无风险利率
- μ:风险资产预期收益率向量
- f:风险资产预期超额收益率向量,即μ−rfμ−rf
- Σ:风险资产协方差矩阵
- w:风险资产组合权重向量
我们采用三个步骤来得到我们的有效市场前沿,分别是最小方差组合、最优均值方差组合(夏普组合)以及有效前沿。当我们推导完,大家就会发现有效前沿与前两个组合之间存在有趣的关系,最后我们将用python代码的方式来实现并检验我们得到的结果。
在下面我们模拟了三个风险资产,并用python画出了有效前沿曲线。图1还标注了最小方差组合(C组合)、最优夏普组合(Q组合)以及全额等权组合(E组合)。
图1
有效前沿的应用
有效前沿曲线告诉我们,在全额投资的条件下,所有基于风险厌恶型的投资者都应该选择有效前沿曲线上投资组合,它们是均值方差最优的。那么这个理论工具怎么能够帮助我们做投资决策呢?
首先我们应用这个理论工具的基本条件是要有市场中所有风险资产或者可投资风险资产的预期收益率和预期协方差矩阵。但是这个可能就是最大的问题,怎么定义预期收益率和预期协方差矩阵?如果用一致预期(基于券商分析师的调查)代表市场对某风险资产的预期的话,并不是所有风险资产都能够有一致预期数据,另外也不太可能有一致预期协方差吧。还有一种解释,就是基于个人投资者的预期或者信念,这种方式和一致预期一样,至少都假设预期或者预测是无偏的或者很小,实际中难以做到,同时对于庞大的协方差矩阵也没有办法(协方差矩阵需要估计2/N(N+1)个参数)。那么,最后就只剩下用历史数据经验估计了,这也带来了一定的问题,股票市场是动态的,历史不一定代表未来;这还不是最大的问题,最大的问题是当估计协方差矩阵时,在实际中往往超出了我们的计算能力,而且估计所带来的误差也让后验协方差矩阵失去意义。
当然,后面的CAPM模型从某种角度拯救了它。不过,当前我们先不讨论CAPM,把话题回到量化交易上。当我们开发一个策略时(为方便分析,这里的策略假设投资决策都是固定投资期,比如一年或一个月换仓),一般都会有预测模型,对每一次资产标的做收益预测,然后我们可能会全额等额购买top10,或者根据一个固定的仓位规则。然而,有效前沿告诉我们,这种策略往往不是最优的,哪怕你的预测模型做得再好。在均值方差的框架下,你应该根据你的预测收益向量和协方差估计(往往基于后验统计),选择位于有效前沿上的组合。尤其是在有一些证券池数量不多的策略中,这种资产配置方法是实际可行的。
在下面的实验中,我们模拟了三组风险资产,他们的收益率和价格序列可以从图2的上面两个图中看到。我们对这三个资产只知道他们的收益率和价格,其他的都不可观测。然后有一个预测模型,那就是下一个周期的预测收益率等于近20期的平均值,即20期滑动平均,同时我们在图中添加了预测值和95%的置信区间。我们的策略就是全额等额买入预测收益率前50%的资产,在这个例子里就是排名前两个的资产,实际上这是一个完整的策略,有预测模型、选股模型以及仓位策略。在下左图,我们画出了这个场景下的有效前沿,其中黑色的点就是我们的策略组合(S组合),我们可以看到它并不在我们的有效前沿上,并且是否位于有效前沿,和我们的预测模型没有关系,完全取决于组合管理,或者说就是我们的头寸策略。右下图更能说明这一点,我们对这个策略向后模拟100个时间周期,并模拟了200次循环,从而得到关于S组合与Q组合的夏普比率分布,从这个箱型图中我们可以看到Q组合的夏普比率明显高于S组合。
图2
有效前沿的敏感性
下图是基于前面那个案例的预测有效前沿(上面的左下图)做了一个蒙特卡洛模拟从而得到的后验分布(方便点的话,理论上可以得到有效前沿的抛物线解析表达式,从而直接得到置信区间)。具体的,我们根据之前的资产收益率和协方差的估计,作为我们风险资产的后验分布,然后我们根据资产后验分布模拟得到一组序列,并通过这组序列得到我们的有效前沿样本集。
我们看到,我们的有效前沿模拟样本分布在一个较“宽阔”的区间,问题我们想知道这个估计误差会对我们的投资决策产生什么样的重要影响?于是,在下图中还添加了Q、C的样本集。我们观察到,它们共同的特征是在估计方差上的离散程度远大于估计收益率的离散程度。而Q组合最终要的性质莫过于与CML资本市场线相切(不展开,在下次的教程中会有更详细介绍),不用可视化我们也能看出来将会对CML曲线造成非常大的影响,即CML对Q组合非常敏感。
我们上述分析揭示了有效前沿的敏感性问题,但并不是说我们要抛弃这个工具。基于有效前沿做组合优化,选择有效前沿上的资产组合仍然是一个明智的选择。因为不管有效前沿有多敏感,我们的估计误差已经 深入到资产预测与资产配置的整个流程当中,抛弃或偏离有效前沿工具并不能缩小我们的估计误差,并且偏离有效前沿的组合会在概率意义上始终劣于有效前沿上的组合。
图3
完整策略实验
在下面实现了一个完整的交易策略,因为回测平台暂不支持做空(注:即将上线的新版是支持做空的),所以我写了一个简单的策略回测,交易策略细节如下:
- 股票池:‘601601.SHA’, ‘600030.SHA’, ‘601668.SHA’, ‘600036.SHA’, ‘601098.SHA’
- 数据时间段:2014-01-01 至 2017-12-30
- 交易时间段:2016-01-01 至 2017-12-30
- 数据尺度:月
- 收益预测:计算5日滑动平均收益率作为下个周期的收益率预测
- 仓位策略:每个周期期初得到夏普组合权重,然后建仓或者换仓,其中协方差矩阵根据历史数据估计
- 交易成本:交易成本为每次建仓或调仓的总仓位的1%,在这里包含了交易佣金、手续费、交易滑差等
- 杠杆/做空:因为是多空策略,所以我们不对做空和杠杆做限制 初始资金:我们假设为1,方便比较
图4开始的两张图展示了当前头寸(基于最新市场数据)的有效前沿及夏普组合权重。我们可以看出对于方差大预期收益小的股票(601601)倾向于给与较小的头寸,对于方差小预期收益大的股票(600030)倾向于给与较大的头寸。
最后图5展示了我们模拟了回测的资金曲线,可以看到夏普组合在收益上要远高于等权组合。
总结
在总结之前,我再重述下有效前沿或者均值方差分析的假设和限制:
- 我们这里假设的是单期投资的情况,这个假设可以被放宽,大致不影响我们的结论和分析过程;
- 我们虽然做了无交易成本假设,但是在实践中是需要考虑的,也是可以被建模的;
- 我们上述分析暗含了自融假设,即可以通过建立空头头寸为多头融资,这个在实践中往往是有限制和不允许的;
- 交易者是风险厌恶的,只基于均值方差来做投资决策; 假设股票是iid正太分布,这个假设有待商榷;
最后,总结一下我的观点:
- 有效前沿是有用的工具,所有风险厌恶的投资者都应该考虑它;
- 有效前沿是均值方差最优的机会集,是最小风险组合与最优夏普组合的线性组合;
- 有效前沿有敏感性问题,尤其是最优夏普组合的估计误差会对CML及CAPM造成较大影响;
- 在多资产、多策略的情境下,有效前沿是一个资产配置或者头寸管理的一个较好的出发点;
- 有效前沿在大量数据、大量资产的情况下,参数估计误差影响非常显著;
开放性问题
真实有效前沿、估计有效前沿与实际有效前沿有什么样的关系或经验规律?
有效前沿要在实践中得到应用需要克服哪些困难?
有效前沿与组合再平衡有哪些权衡因素?
附录
策略完整代码:《从均值方差到有效沿【完整代码版】》