前情概要
我们先来回顾上一篇谈到的“风险分摊”,我们通过调整收益变化的概率分布,使其波动范围逐步向中间“靠拢”,来达到降低风险的目的(如下图所示,想要了解具体内容的小伙伴,点此跳转至上一篇文章)。事实上,这种“向中靠拢”的实现,我们也称为方差最小化(或者标准差最小化)。
现代投资组合理论
现代投资组合理论(Modern Portfoilio Theory) 的核心思想,正是以“最小化收益率变化方差,并最大化期望收益”为目标来配置资产,也被叫做均值-方差 (Mean-Variance) 分析,是金融领域的重要基础理论。
我们“设计”了一个投资组合,假设它由这两只股票组成,且这两只股票的收益率服从正态分布(均值为0),我们通过程序模拟来模拟一下:
可以看到,蓝绿两线代表“股票”的收益率变化。接下来,我们再定义两个函数:
1、权重函数:用于为2只股票分配随机权重。
2、投资组合配置函数:调用权重函数生成不同的投资组合,并计算这些组合下的期望收益和方差:
至此,数据已经准备完毕。我们从中随机挑选出500个投资组合(注意,组成投资组合的这两只股票,本身的平均收益率是可以计算得到的固定值,在合成投资组合时,由于配置的权重不同,引起了投资组合的收益率以及方差的不同)。
现在让我们通过图形化来观察一下投资组合有哪些特性。为了更直观地分析,我们对效用-收益坐标轴进行变换:横轴为收益率的标准差,纵轴为期望收益率。
通过可视化之后,你将观察到它们形成了特征像“子弹”那样的抛物线,位于线上的每一个蓝色点,都代表了不同权重配比下的一个投资组合。我们把抛物线上的半部分称作有效边界。对于拥有相同风险(方差)的两个点,投资者会追求更高的期望收益率。
实际上,随着构成投资组合的股票数量不断增加,子弹区域会被逐渐填充满,下图是有4只股票组合按不同权重组成的投资组合特征图形。
此时有效边界仍然有效,因为在其他位置的所有点,都能在有效边界找到一个风险相同,确有更高收益的对应点。
关于如求解有效边界,涉及到向量计算、拉格朗日乘子与二次规划问题。幸运的是,Python的第三方库已经包含了现成的方法可供调用。我们下面将略作简单说明。
首先根据已知条件,我们有了(或者我们可以通过简单计算得到)以下数据:
1、股票均价向量 P:(p1,p2 ,...,pn),记录着n只股票指定交易日内的各自均价;
2、股票方差向量 S2:记录着n只股票各自收益率的离散程度
3、n * n 的协方差矩阵 C:记录着n只股票相互收益率变化趋势之间的相关程度。
另外,我们假设一个带求解的可变向量 w:(w1,w2 ,...,wn),记录着股票的配置比例(权重)。
由此我们得到:
投资组合的期望收益R = wT · P(按w对各股票期望收益加权平均)
投资组合的方差V = w · C ·wT,之所以不使用 wi2Si2 ,是因为简单的加权平方,只考虑了资产本身的离散程度,而遗漏了资产相互间的相关影响,因此我们引入C 这个 N x N 的协方差矩阵:
等价于:
它的对角线的值代表每个资产的自身的方差,而对角线以外的值则是代表资产之间的方差。
那么结合我们刚才说到的投资组合图形,我们需要找的,就是图中方差最小的那个点,也即最左侧的那一点,也就是使投资组合方差 w · C · wT 最小化。
这里我假设各位都已经把那些大学里艰涩难懂的线性代数,微积分等数学知识以往的差不多了,因此并不做具体推导,后续我可能会把具体推导过程挂在网盘上供有兴趣的同学下载。在这里不做展开。
代码实现
我们可以利用Cvxopt库来求解得到最左侧的红点所对应的权重分配,具体代码如下:
通过该方法,我们得到了最小方差的权重分配参数 w 向量:
在下一章中,我们将会展示如何在量化交易回测中应用上述方法。本篇首发于微信公众号“数据夕拾”,赶快搜索一下关注吧。