理论基础

马科维茨的投资组合(均值-方差、有效边界)模型最早采用了风险资产的期望收益率(均值)和用方差(或标准差)代表的风险来研究资产组合和选择问题。理论上来说可以通过投资组合规避非系统性风险。

而Alpha策略则是找出某种可以超越大盘收益率的选股策略,再做空对应大盘的股指期货等衍生品,就可以稳定产生收益,且可以规避系统性风险。

所以将两者结合,利用马科维茨的理论选股规避非系统性风险,再套入Alpha策略,进行对冲,规避系统性风险,从而产生稳定收益。这个策略看起来很美好,但是否能真正奏效,我们来实际模拟一下。

主要利用的工具

Matlab建立模型、R做简单可视化。

所利用的数据范围

沪深三百的300支股票的收盘价数据、沪深三百股指收盘价数据(对比构建的投资组合收益率)

数据时间范围

2012年1月——2017年11月

建立模型过程如下:

第一步

将沪深三百300支股票 2012.1.1--2013.1.1的收盘价导出。

这样其实可以构成一个245*300(245是因为2012年大约有245个交易日)的收盘价矩阵。

然后计算每支股票的日收益率,得出一个新的244*300的收益率矩阵。

求得的日收益率是用复利计算,也就是用

注:其中的股票肯定存在有些股票在数据区间还未上市或者停牌的情况,这部分数据显示为空值。则进行初步筛选,比如这一年超过1/3空值的股票去掉,不进入这一次的组合中;对其余低于1/3空值的股票,在空值中插入该股票在2012.1.1——2013.1.1时间内非空值数据的均值,比如股票A每日价格为:9.53,9.31,(停牌),9.99,则停牌那天的数据插入

,即数据变为9.53,9.31,9.61,9.99。(这种方法值得商榷)

第二步

计算每支股票的期望收益率以及300支股票之间的协方差,这样就构成了一个300*300的矩阵(300支股票,但是如果存在第一步注中的空值超过1/3的股票,那就<300了)。

Matlab有函数可以算。

注意 协方差需要得到一个协方差矩阵,横轴纵轴都是股票,矩阵中(i,j)位置就代表股票i和股票j的协方差,(i,i)就代表方差。

第三步

Matlab有一系列的金融函数,包括资产组合(也就是有效边界)的这个函数,即:portopt

[PortRisk,PortReturn,PortWet] = portopt(ExpReturn,ExpCovariance,N)

输入期望收益率矩阵(ExpReturn,第一步中244*300的矩阵)和协方差矩阵(ExpCovariance,第二步中300*300的矩阵),以及需要多少个点(N)来组成你的图像。

输出横坐标:风险(标准差),纵坐标:期望收益率,还有很重要的:在某个点这些股票的权重分配。

输出的都是一个300*1的矩阵。

这样有效边界就画出来了。

然后就要找最优市场组合点,即CML和有效边界的切点,设定无风险利率为0.03,再找切点就可以了。找切点可以用夏普比,因为刚刚函数的输出不是有300个点吗,计算这300个点的夏普比,最大那个点,就是切点了。这样就可以做出图1了。(收益率和标准差都年化过了)图1 有效边界

离奇的权重

特别有趣,沪深300中大部分股票分配的权重都是0!切点的最佳市场组合大概只有二十支股票有分配权重,这有很重要的意义!如果300支股票都有权重,那现实中很难有一个投资人有财力和精力去投资300支股票,但是只有20支,就完全具有操作空间了。

对冲和收益

先利用马科维茨的有效边界理论在沪深三百中选股,由此确定之后买入股票的权重,同时做空对应的沪深300期货进行对冲,并在之后过程中逐月向前滚动得出新的最优投资组合,继续做空期货对冲,实现规避系统性风险的目的。最终计算收益率,思路示意图如图1所示:图2 策略思路图

选择了2012年1月——2017年11月5年的数据进行回测,不算很短了,防止了一定程度上的过拟合,最终均值方差策略选出的股票与沪深300股指的每月年化收益率,如图3所示,可以看出红色柱还是明显高于绿色柱的。图3 收益率对比

图ut3

对冲策略重要的不是看我们选股策略的收益率,而是看比对应的股指期货收益率高出多少,高出的部分才是真正的收益率(因为卖空了股指期货),所以把每个红条减去绿条才是,如图4所示。图4 策略收益率

一些建仓参数设置

在这里对冲时,没有选择最简单的等价值对冲,而是根据组合的

来选择需要卖空的股指期货。所以就引出来了以下的

的计算和现金的配置

(1)建仓合约选择

为简化模型,且设置策略全部为买入 30 天后平仓,所以本组在建仓合约的选择上全部选择下月合约,合约份数:

(2)Beta参数设定

在投资过程中,投资组合的系统风险用 Beta 系数来计量,通过以大盘整体为参照物,用投资组合的风险收益率与整个大盘的平均风险收益率作比较,可以得出如下公式:

式中,Cov 为协方差函数,

分别反映投资组合与大盘整体的风险收益率,

反应大盘总体的价格波动,这里用沪深 300 股指度量。

(3)现金及交易成本预留

在本模型中,总资金的用途划为三部分,分别为购买股票的资金、购买期货的保证金和补贴亏损保证金的部分。最终决定初始保证金规模为期货总价值的15%,补贴亏损的现金占购买期货总价值的 10%。

动态调整期货头寸

在本模型中,用前一年的股票价格选出投资组合及配置权重后,可根据

计算每次 Beta 值。

籍此在每 30 天会动态调整 Beta 系数值,从而改变购买期货的总价值。

Beta 稳定性

经计算,由均值方差选股策略选出的股票组合,Beta 标准差为 0.1502,波动较大,但是通过分析 Beta 与沪深 300 股指的同步走势,我发现正好解释了之前产生的一些疑问。

当发现马科维茨选股策略选股得出的收益率很高时,就产生一定疑问:在2015 年股灾期间,所选出的股票组合收益仍然远高于沪深 300 指数。 但是通过分析 Beta 与沪深 300 指数的同步走势发现,在 2015 年股灾期间,均值方差模型所选股票的 Beta 值不断下降,且达到最低点 Beta=0.1626。这个数值正好说明在这段时间,所选股票与大盘相关性差。当大盘暴跌时,选出的股票却只是小跌甚至略微盈利,这就解释了为什么股灾期间,所选股票仍能获得较大超额收益率。 Beta和大盘的走势如图5:图5 Beta和沪深三百指数走势对比

现金配置比例

总资产主要用来购买股票和期货,而用来购买期货的部分又包含了保证金和用来补贴期货亏损的部分。首先,决定初始保证金规模为期货总价值的15%,补贴亏损的现金占购买期货总价值的 10%。

现在,假设用来购买股票的部分为 x,购买期货的为 y,则有

根据公式:

所以,购买期货的现金

联立(1)、(2)、(3)解得x、y

策略就是这样,但是其实还是有好多问题,还是有可能存在过拟合问题。这5年的回测时间还是不算很长。现在得出的收益率也是经过一定的调参的,比如选股时间现在是利用一年的数据选股,之前用过三个月的、半年的,但效果一般。还是那句话,没有永远赚钱的策略,所以现在这个策略实际有多少收益率就不一定了。

可能买不到想要的价格。那个收益率最高的那个月,其实是因为刚好买入了一支连续涨停一个月的股票——巨人网络,可以看图6。这就导致了可能买不进去..

采用的插值法,是否有更好的方法替代。图6 巨人网络连续涨停一月

利用python构建马科维茨_利用马科维茨投资组合模型建立Alpha策略相关推荐

  1. 利用python进行数据分析_利用python进行数据分析复现(1)

    一直以来,都想学习python数据分析相关的知识,总是拖拖拉拉,包括这次这个分享也是.<利用python进行数据分析 第2版>是一次无意之间在简书上看到的一个分享,我决定将很详细.一直都 ...

  2. 利用python画曲线_利用python画出AUC曲线的实例

    以load_breast_cancer数据集为例,模型细节不重要,重点是画AUC的代码.1XS免费资源网 直接上代码:1XS免费资源网 from sklearn.datasets import loa ...

  3. 利用python制作拼图_利用python制作拼图小游戏的全过程

    开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 关注公众号:Python学习指南,回复"拼图"即可获取源码 环境搭建 安装P ...

  4. 利用python画曲线_利用Python绘制血药浓度-时间曲线——口服吸收一室模型

    血药浓度-时间曲线一般是通过拟合所测定的血药浓度点而画出来的,但是在某些时候,如阅读文献时,我们需要根据别人报道的PK参数来画出药时曲线.Python语法简单,拥有丰富的开源库,下面尝试通过Pytho ...

  5. 利用python实现冒泡排序_利用python实现冒泡排序

    1.先生存一个随机数组成的list 2.然后进行排序,把大的元素放在后面,小的元素放在前面,最终实现从小到大排列 首先生存一个随机数组成的list import random # print(sys. ...

  6. 基于python的系统构建_利用python构建一个简单的推荐系统

    摘要: 快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫. 本文将利用python构建一个简单的推荐系统,在此之前读者需要对pandas和numpy等数据分析包有所了解. 什 ...

  7. python推荐_利用Python构建一个简单的推荐系统

    原标题:利用Python构建一个简单的推荐系统 摘要:快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫.在此之前读者需要对pandas和numpy等数据分析包有所了解. 什么 ...

  8. python推荐系统-利用python构建一个简单的推荐系统

    摘要: 快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫. 本文将利用python构建一个简单的推荐系统,在此之前读者需要对pandas和numpy等数据分析包有所了解. 什 ...

  9. python量化——利用python构建Fama-French三因子模型

    工具介绍 在构建模型之前,首先介绍所需的工具. import pandas as pd import tushare as ts pro = ts.pro_api() import statsmode ...

最新文章

  1. 美团BERT的探索和实践 | CSDN原力计划
  2. Window下JDK安装教程
  3. Web前端培训分享:前端开源平台介绍
  4. 2017年最新的全国省市sql数据
  5. java中getup用法_你还在 Java 代码中写 set/get 方法?赶快试试这款插件吧!
  6. mysql屏蔽_MySQL中的企业数据屏蔽
  7. PowerDesigner16.5汉化破解版安装教程(含安装文件、汉化包、破解文件)
  8. 记一次为公司搭建maven私服的过程
  9. 关于Qt的dateTime和时间戳转化数据不对的问题
  10. 【通俗易懂系列】深度可分离卷积
  11. 英特尔显卡不支持自定义分辨率N卡解决办法
  12. css button三角形,CSS实现三角形的播放器按钮图标
  13. 阿里云官方出品:全面总结阿里云云原生架构方法论与实践经验
  14. uiautomator2+ tesseract 智能识别文字实现手游辅助外挂,打怪刷装备快人一步
  15. artemis服务_Artemis安装
  16. 手机抓包+注入黑科技HttpCanary——最强大的Android抓包注入工具
  17. 代码随想录训练营day27
  18. Ecshop 扯淡问题
  19. 北京国税 计算机代码,京国税[1995]227号 北京市国家税务局转发国家税务总局关于使用出口退税计算机管理软件有关问题的通知的通知...
  20. 礼金记账本安卓_份子钱记账本下载-份子钱记账本最新版下载(暂未上线)_预约_飞翔手机下载站...

热门文章

  1. Hark的数据结构与算法练习之锦标赛排序
  2. 不需要解压使用对pdf文件进行压缩
  3. java9推迟_甲骨文宣布Java 9将会推迟到明年7月发布
  4. ZOHO:游刃于快时代的“慢公司”
  5. java long to int_java int 转 Long
  6. php开启sockets模块,php开启php_sockets扩展
  7. 贺世界智能网联汽车大会-速锐得V8翻开智能驾驶汽车新篇章
  8. windows防火墙规则_如何在Windows防火墙中创建高级防火墙规则
  9. 你还有“不撞南墙不回头”之心吗?
  10. 数据科学和机器学习中的优化理论与算法(下)