欢迎你们订阅《Python实战-构建基于股票的量化交易系统》小册子,小册子会陆续推出与小册内容相关的专栏文章,对涉及到的知识点进行更全面的扩展介绍,而且会有选择地收录至小册中,更便于广大读者查阅知识点。数组
股票投资中收益和风险始终存在着不肯定性,对于理性投资者来讲,他们倾向于在风险和收益之间达到均衡点。对于单只股票来讲,在回测中使用夏普比率能够很好地去综合考虑收益与风险之间的关系。而对于多只股票组合投资时,会引入基金经理经常须要考虑的问题——仓位如何分配?bash
本文给你们分享一个经典的模型——Markowitz均值-方差投资组合理论模型,一块儿来了解下如何运用Markowitz模型在多种资产上肯定最优的投资比例。微信
1952年,美国芝加哥大学的经济学家Markowitz,应用了数学中的均值、方差概念来定义资产组合中收益和风险这两个关键因素,从而系统地阐述了资产组合和选择问题,标志着现代资产组合理论(Modern Portfolio Theory,简称MPT)的开端。markdown
该理论认为,因为资产投资的风险在于收益的不肯定性,所以可将收益率视为一个随机变量,投资组合的指望收益是该随机变量的指望值,收益的波动率用随机变量的方差/标准差来表示,以此衡量投资组合的风险。优化
因而,在波动率为横坐标、收益率为纵坐标的二维平面中描绘各类优化投资组合,从而造成了一条曲线。这条曲线在最小方差点以上的部分就是著名的Markowitz投资组合“有效前沿”(Efficient Frontier,有效边界),对应的投资组合称为有效投资组合。spa
根据投资组合理论,咱们能够对多只股票(资产)的组合配置进行如下的优化过程:code
首先咱们选取002372伟星新材、000876新但愿、000851高鸿股份、600797浙大网新、000651格力电器这5只股票进行分析,而且将代码名称以列表格式存储。下载这5只股票的收盘价数据,而且合并至表格中。orm
""" 002372 000876 000851 600797 000651 trade_date 2019-01-02 14.63 7.40 5.03 7.30 35.80 2019-01-03 14.25 7.42 5.12 7.26 35.92 2019-01-04 14.49 7.52 5.49 7.51 36.65 2019-01-07 14.90 7.82 5.79 7.77 36.48 2019-01-08 15.18 7.60 5.79 7.67 36.34 2019-01-09 15.30 7.73 5.80 7.69 37.51 2019-01-10 15.37 7.60 5.84 7.61 37.76 ... ... ... ... ... ... 2019-01-11 15.49 7.64 5.67 7.74 37.73 2019-01-14 15.45 7.77 5.74 7.68 37.68 2019-01-15 15.87 7.77 5.58 7.99 38.78 2019-01-16 16.07 7.64 5.46 7.86 39.31 """ 复制代码
而后计算每一个股票的收益率,此处计算的是对数收益率,具体方法可参考小册《股票交易策略:收益与风险维度度量策略效果》这一节。ci
""" 002372 000876 000851 600797 000651 trade_date 2019-01-03 -0.026317 0.002699 0.017734 -0.005495 0.003346 2019-01-04 0.016702 0.013387 0.069774 0.033856 0.020119 2019-01-07 0.027902 0.039118 0.053204 0.034035 -0.004649 2019-01-08 0.018618 -0.028536 0.000000 -0.012954 -0.003845 2019-02-20 0.040290 0.023878 -0.009285 -0.012136 0.008258 ... ... ... ... ... ... 2019-11-18 0.015429 0.047883 0.003650 0.032485 0.002206 2019-11-19 0.034841 0.029960 0.032261 0.010899 0.007936 2019-11-20 -0.018854 -0.018676 -0.012423 -0.038679 -0.010142 """ 复制代码
咱们可视化每只股票收益率的直方图,了解一下分布状况。可见每支股票的分布形状是近视正态分布,但仍然有“肥尾”现象。get
固然也能够可视化出个股的每日叠加的收益率曲线,了解一年中的收益率走势状况,以下所示:
在构建最优的投资组合过程当中,计算投资组合的协方差矩阵是很是关键的一步。咱们能够运用Pandas内置的cov()方法计算协方差矩阵。以下所示:
""" 002372 000876 000851 600797 000651 002372 0.180281 0.040032 0.042272 0.022727 0.030380 000876 0.040032 0.293750 0.046080 0.085311 0.013274 000851 0.042272 0.046080 0.282092 0.161818 0.052123 600797 0.022727 0.085311 0.161818 0.245785 0.034793 000651 0.030380 0.013274 0.052123 0.034793 0.113990 """ 复制代码
投资组合的风险取决于投资各组合中资产收益率的相关性。所以除了计算协方差矩阵以外,还须要计算年化收益率。以下所示:
""" 002372 -0.118489 000876 0.939151 000851 0.015777 600797 0.273381 000651 0.490995 dtype: float64 """ 复制代码
根据理论,风险须要分散,每一个股票都会有必定比例的投资权重。一个资产组合的收益率(均值),为组合中个股收益率(均值)的权重之和。
当咱们给定相应的投资比例以后,计算投资组合的指望收益率时,首先要将每只股票的收益率乘上对应的权重,而后加权、求和再平均后便可计算所得该组合投资的指望收益。
接下来咱们能够用蒙特卡洛法随机生成多组权重,并根据权重计算出组合收益率和组合波动率。须要注意到此处的权重系数范围在0-1之间,而且权重系数总和为1。
设定此过程重复5000次,即获得5000种组合收益率和波动率,当样本数越多就越能覆盖到各类权重组合,包括经常使用的等权重投资组合、市值加权投资组合。而后将数据可视化为散点图。以下所示:
图中横坐标是表明风险的标准差,纵坐标是收益率,每个点都表明着一种投资组合的状况。Markowitz投资组合理论认为,理性的投资者最终是在风险和收益之间作出选择,老是在给定风险水平下追求指望收益最大化,或者是在给定收益水平下追求指望风险作最小化。所以只有在有效边界上的点才是最有效的投资组合。
接下来咱们做为理性的投资者来选择有效边界上的某一点做为投资组合。
首先咱们找到最小风险组合(GMV portfolio),并绘制在收益-风险的散点图中。以下所示:
接下来介绍一个可以同时对收益与风险加以综合考虑的经典指标——夏普比率(Sharpe Ratio)。
夏普比率计算的是每承受一单位的风险所产生的超额回报,它是基金绩效评价标准化指标。
接下来咱们计算上述蒙特卡洛模拟的组合所对应的夏普比率,并将之做为第三个变量绘制在收益-风险的散点图中,此处采用颜色这一视觉线索来表征夏普比率。以下所示:
咱们发现散点图上越往左上方,越具备较高的夏普比率,而越高夏普率,说明该组合的权重分配越优。接着开始找到夏普比率最大的组合(MSR),将其绘制在收益-风险的散点图中。以下所示:
咱们提取出最大夏普比率投资组合对应的权重,并转化为Numpy数组,以下所示: [0.12617847 0.74273907 0.04905298 0.00580558 0.07622391]
由此处5只股票组成的例子可知。12.6%的权重买002372伟星新材,74.3%的权重买000876新但愿,4.9%的权重买000851高鸿股份,0.5%的权重买600797浙大网新,7.6%的权重买000651格力电器。这样的组合,根据以往数据,能够分析得出组合年化收益率为72%,波动率为42.6%,夏普率为1.61。
虽然Markowitz的投资组合理论中涉及到不少假设状况,但重要的是它揭示了“资产的指望收益由其自身的风险的大小来决定”这个结论。同时有效边界上也印证了风险与收益成正比,要想更高的收益率就须要承担更大的风险,但投资组合在有效边界上,则是性价比最高的组合。
以上策略及涉及到的股票仅用于教学,不构成任何投资建议!投资需谨慎,入市有风险!!!
正在考虑是否要把本专栏内容加推到小册子中(包括实现的源码),感兴趣的朋友们欢迎给我留言建议!人数多的话就加推!
更多的量化交易内容欢迎你们订阅小册阅读!!
同时也欢迎你们关注个人微信公众号【元宵大师带你用Python量化交易】了解更多Python量化交易相关内容