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

理论基础

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

而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 巨人网络连续涨停一月

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值