Code前端首页关于Code前端联系我们

Python量化交易讲座:实现最优投资组合的马科维茨模型

terry 2年前 (2023-09-25) 阅读数 52 #后端开发

投资股票总是存在收益和风险的不确定性。对于理性投资者来说,他们倾向于在风险和收益之间取得平衡。对于单只股票来说,利用夏普比率进行回测可以很好地综合考虑收益与风险的关系。在投资多股票投资组合时,基金经理经常出现的一个问题是如何分配仓位?

本文将与大家分享一个经典模型——投资组合均值方差理论的马科维茨模型。让我们学习如何使用马科维茨模型来确定多种资产的最佳投资比例。

马科维茨模型简介

1952年,芝加哥大学的经济学家·马科维茨运用数学中的均值和方差的概念,定义了资产组合的回报和风险两个关键因素,系统地发展了资产组合和选择问题。 ,标志着现代投资组合理论(MPT)的开始。

该理论认为,由于资产投资的风险在于回报的不确定性,因此回报率可以视为随机变量。投资组合的预期收益是随机变量的期望值,收益的波动性由随机变量来表示。它以方差/标准差表示,是投资组合风险的衡量标准。

各种优化后的投资组合因此被表示在一个二维平面上,横坐标为波动率,y轴为回报率,形成一条曲线。这条曲线高于最小方差点的部分就是著名的马科维茨投资组合“有效前沿”(Efficient Frontier),相应的投资组合称为有效投资组合。 Python量化交易进阶讲堂:Markowitz模型实现最优投资组合

根据投资组合理论,我们可以执行以下优化过程来配置多个股票(资产)的投资组合:

  • 获取更多股票数据并分析股票收益和波动性
  • 生成大量随机权重返回/风险组合
  • 找到风险最小时的投资组合
  • 找到有效前沿(efficient frontier)
  • 找到夏普率较高的随机组合,即回报与风险点之间的平衡点

计算个股回归

首先我们选取5只个股:002372伟星新材、000876新希望、000851高虹股份、600797浙大600797浙大网60新材分析,并以列表格式保存代号。下载这5只股票的收盘价数据,并将它们合并成一个表格。

 """
             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
"""
复制代码

然后计算每只股票的回报。这里计算对数回报。具体方法可以在宣传册《股票交易策略:收益与风险维度度量策略效果》的这一部分找到。

"""
              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
"""
复制代码

让我们可视化每只股票的回报直方图来了解分布情况。可以看出,各群体的分布形状为近视正态分布,但仍存在“肥尾”现象。 Python量化交易进阶讲堂:Markowitz模型实现最优投资组合" data-src="https://user-gold-cdn.xitu.io/2020/4/4/171442e2d13a8272?imageView2/0/w/1280/h/960/format/webp/ignore-error /1" height="20" data-width="1016" data-height="765" />

当然,您还可以可视化个股每日叠加收益率曲线,了解一年的收益率走势情况如下: Python量化交易进阶讲堂:Markowitz模型实现最优投资组合

计算协方差矩阵

在构建最优投资组合的过程中,计算投资组合协方差矩阵是非常关键的一步,我们可以使用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
"""
复制代码

投资组合风险与收益

投资组合风险取决于各个投资组合中资产收益的相关性,因此除了计算协方差矩阵外,还需要计算年化收益回报率.回报率(平均值)资产组合是投资组合中个股的回报率(平均值)的权重之和,总和与平均值。投资组合的预期回报。

接下来,我们可以使用蒙特卡罗方法随机生成多组权重,并根据权重计算投资组合收益和投资组合波动率。需要注意的是,这里的权重范围是0-1,权重之和是1。

设置这个过程重复5000次,也就是说,你会得到5000种收益和波动率的组合。样本数量越多,可以覆盖的不同权重组合就越多,包括常用的等权重投资组合和市值加权投资组合。然后将数据可视化为散点图。如下图:Python量化交易进阶讲堂:Markowitz模型实现最优投资组合

图中横坐标是代表风险的标准差,纵坐标是收益率,每个点代表投资组合的A情况。马科维茨投资组合理论认为,理性投资者最终会在风险和回报之间做出选择,总是寻求在给定风险水平或给定回报水平下最大化预期回报。努力最小化预期风险。因此,只有有效前沿上的点才是最有效的投资组合。 Python量化交易进阶讲堂:Markowitz模型实现最优投资组合

最优投资组合

接下来,作为理性投资者,我们选择有效前沿上的某个点。有点像投资组合。

首先,我们找到一个风险最小的投资组合(GMV 投资组合),并将其绘制在收益-风险图上。如下图: Python量化交易进阶讲堂:Markowitz模型实现最优投资组合

接下来给大家介绍一个可以综合考虑收益和风险的经典指标——夏普比率。

夏普比率计算假设的每个风险单位产生的超额收益。这是评价基金业绩的标准化指标。

接下来,我们计算与上述蒙特卡罗模拟组合相对应的夏普比率,并将其绘制为回报风险方差图中的第三个变量。在这里,颜色的视觉提示用于表达夏普比。比率。如下图: Python量化交易进阶讲堂:Markowitz模型实现最优投资组合

我们发现,离散点图左上方越远,夏普比越高,夏普比越高,组合权重分布越好。然后首先找到夏普比率 (MSR) 最大的投资组合,并将其绘制在回报风险方差图上。如下所示: Python量化交易进阶讲堂:Markowitz模型实现最优投资组合

我们提取最大投资组合夏普比率对应的权重,并将其转换为 Numpy 数组,如下所示: [0.12617847 0.74273907 0.04905298‷‷9❙‷9‷9‷92 rom 这里包含的5股例子可见。 12.6%权重买入002372伟星新材,74.3%权重买入000876新希望,4.9%权重买入000851高虹股票,0.5%权重买入600797浙大王,7.6%权重买入000651格力电器。对于这样的组合,根据以往的数据可以分析出该组合的年收益率为72%,波动性为42.6%,夏普比率为1.61。

总结

马科维茨的投资组合理论虽然涉及很多假设,但重要的是它揭示了“资产的预期收益由其自身风险决定”的结论。同时,有效边界也证实了风险与回报成正比。如果你想要更高的回报率,你就必须承担更多的风险,但有效前沿上的投资组合才是最具成本效益的投资组合。

作者:元宵大师
链接:https://juejin.im/post/5e883bd36fb9a03c341d9a4a
来源:版权归掘金所有商业转载请联系作者授权。非商业转载请注明来源。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门