多因子策略-APT模型
作者:互联网
导语:APT(Arbitrage pricing theory)定价理论是CAPM的一个推广,它们都是均衡状态下的模型,不同的是:CAPM把收益单纯的归为市场变化这一个因子引起的。APT把收益归因在不同的因子上面。本文旨在运用多元线性回归选股的方法,构建多因子策略。
阅读前需要了解:
线性回归模型,理解深度:level-0
APT模型,理解深度:level-0
备注:以上达到了解程度即可,即知道内容的思想,应用场景,输入输出。不需要证明。对于知识点本身,暂时安装一个外部链接,量化课堂将会自己产生内容覆盖,敬请期待。
多因子选股策略在之前的初阶教程中有所提及。对于因子的选取,我们当时做了一些简单的处理,例如人工选股以及等权重等。
今天小编带着大家研究一下如何运用多元线性回归选股的方法。
首先,我们来看一下多元线性回归模型:
多元线性回归简介
在线性回归分析中,如果有两个或两个以上的自变量,就称为多元线性回归。事实上,一种现象常常是与多个因素相联系的,由多个自变量的最优组合共同来预测或估计因变量,比只用一个自变量进行预测或估计更有效,更符合实际。因此多元线性回归比一元线性回归的实用意义更大,尤其在选股模型中,股价的涨跌的影响因素一般来说不止一个。
从数学的角度来说,我们假设因变量是自变量X1,X2,X3..Xk的线性函数,用方程来表示就是:
Yi=β0+β1X1i+β2X2i+...+βkXki+εi
Yi=β0+β1X1i+β2X2i+...+βkXki+εiYi=β0+β1X1i+β2X2i+...+βkXki+εi
其中Yi表示因变量(被解释变量)的第i个观测值,而Xki则是第k个自变量(解释变量)的第i个观测值,是自变量Xk的系数,Ei是第i组观测值的残差项。在金融领域,beta0有时候会写成ααα,用方程来表示就是:
Yi=α+β1X1i+β2X2i+...+βkXki+εi
Yi=α+β1X1i+β2X2i+...+βkXki+εiYi=α+β1X1i+β2X2i+...+βkXki+εi
然而,字母的改变并不会影响模型的本质。
多元线性回归通常采用普通最小二乘法(OLS)进行估计,普通最小二乘估计法的思路是改变
β0,β1,β2,...,βk
β0,β1,β2,...,βkβ0,β1,β2,...,βk
使得残差的平方和最小。其参数估计结果为:
β=(X′X)−1X′Y
β=(X′X)−1X′Yβ=(X′X)−1X′Y
其中
β=(β0,β1,β2,...,βk)′
β=(β0,β1,β2,...,βk)′β=(β0,β1,β2,...,βk)′
⎡⎣⎢⎢⎢⎢⎢11⋮1X11X21⋮Xn1X12X22⋮Xn2……⋱…X1kX2k⋮Xnk⎤⎦⎥⎥⎥⎥⎥
⎡⎣⎢⎢⎢⎢⎢11⋮1X11X21⋮Xn1X12X22⋮Xn2……⋱…X1kX2k⋮Xnk⎤⎦⎥⎥⎥⎥⎥[1X11X12…X1k1X21X22…X2k⋮⋮⋮⋱⋮1Xn1Xn2…Xnk]
Y=(Y1,Y2,Y3,...,Yn)′
Y=(Y1,Y2,Y3,...,Yn)′Y=(Y1,Y2,Y3,...,Yn)′
好,这个模型就介绍到这里,我们这里只要知道这个多元线性回归的一种用法就行了:现在你猜测,一件事情可能被好几个因素所影响,那么可以尝试一下线性模型。
关于这个模型的详细介绍,大家可以参阅聚宽量化课堂的数学部分(敬请期待)。
套利定价理论(APT)
套利定价理论认为,套利行为是现代有效率市场(即市场均衡价格)形成的一个决定因素。如果市场未达到均衡状态的话,市场上就会存在无风险套利机会。并且用多个因素来解释风险资产收益,并根据无套利原则,得到风险资产均衡收益与多个因素之间存在(近似的)线性关系,其定价方程是:
ri=α+β1F1i+β2F2i+...+βkFki+εi
ri=α+β1F1i+β2F2i+...+βkFki+εiri=α+β1F1i+β2F2i+...+βkFki+εi
其实小编总觉的那些口口声声说套利的,其实根基都是建立在统计之上,给我感觉就像城市建立在流沙之上。
在我的理解里(或者本篇文章的体系下),Arbitrage pricing theory定价理论是CAPM的一个推广,由APT给出的定价模型与CAPM一样,都是均衡状态下的模型,不同的是CAPM嘛,其实你把市场变化看成一个因子也行,只不过CAPM把收益单纯的归为市场变化这一个因子引起的。APT把收益归因在不同的因子上面。
是股票i的收益率, 是第i个股票第k个因子的值,这个方程和多元线性回归模型的方程是一致的,因此可以用线性回归的方法来估计参数并根据当前的因子值预测未来的收益。
那么我们应该如何选择因子呢?
如何选择因子?
根据入门级内容,我们可以先主观的选定如下因子:
那么,是不是直接使用这些因子进行回测就高枕无忧了呢?事实上并不是的,细心的读着可能会发现,这些因子中的一部分本来就存在一定的相关关系,比如roe和inc_return。这两者具有高度相关性。这个现象被称作“多重共线性”,指的是线性回归模型中的解释变量之间彼此之间度相关,从而使模型失真。那么多重共线性应该如何处理呢?
多重共线性怎么办?
主流的解决方法有如下几种:
1)排除引起共线性的变量:找出引起多重共线性的解释变量,将它排除出去,以逐步回归法得到最广泛的应用。
2)差分法:时间序列数据、线性模型:将原模型变换为差分模型。
3)减小参数估计量的方差:岭回归法;等等等等。
这几种方法大家都可以尝试一下,以后我们深入讨论。小编这里做一个简(偷)化(懒),以第一种方法为例,讲述如何排除引起共线性的变量。就实排除的方法也有很多种,比如相关系数法、修正的R方法、主成分分析法、人工判断法等。我们继续简化,用相关系数法进行处理。思路是采用因子的数据,直接计算普通的相关系数,然后从相关系数较大的几个因子中选择一个。参见下表:
有没有发现roe和inc_return的相关系数0.99十分显眼?把这个inc_return拉出去砍了!去掉后结果如下图所示:
还可以发现net_profit_to_total_revenue和net_profit_margin相关性也很大,而且eps和roa相关性也较大,我们继续手起刀落手起刀落。结果如下图所示:
等等!上图有个误杀的,想了想,还有用eps吧。roa君,手动再见!
在删掉了相关性较大的因子之后,终于选出了9个因子:
eps(每股收益EPS(元))
adjusted_profit(扣除非经常损益后的净利润(元))
inc_return(净资产收益率(扣除非经常损益)(%))
operation_profit_to_total_revenue(营业利润/营业总收入(%))
net_profit_margin(销售净利率(%))
gross_profit_margin(销售毛利率(%))
ga_expense_to_total_revenue(管理费用/营业总收入(%))
goods_sale_and_service_to_revenue(销售商品提供劳务收到的现金/营业收入(%))
inc_total_revenue_year_on_year(营业总收入同比增长率(%))
策略实现
我们选择了沪深300 作为股票池,我们暂且认为,这些股票池里面的股票性质相似,因此我们假设同一个因子对这些股票起到的贡献是相同的(未来会针对这一假设推翻)。
选定一个调仓频率。比如每个季度,我们设定一个调仓日期,然后每到调仓日进行回归分析和调仓。
回归主要分析因子对股票(所有股票)的重要程度是多少。那么到底是谁和谁回归呢?
下图表示单个股票单只因子的取法。对于单只股票的单个因子,t1日的因子值和t1~today期间的平均对数收益率return 1组成了一组观测值,t2日的因子值和t2-t1时期的平均对数收益率return 2组成了一组观测值,一直到t4日的因子值和t4-t3时期的平均对数收益率return 4组成了一组观测值。
如果我们取N支股票,滚动向前的4期财报数据(讲道理的话,年报和下一年的一季报几乎一起公布,所以有效的数据只有三期?这里我们暂且认为有4期吧),对于单个因子,可以得到4N个观测值,用这4N的观测值可以回归出因子1在这段时期(t4-today)对这 N支股票的影响。然后将所有的待选因子采取这样的方法,放到同一个回归方程里,估出方程的回归系数,即β_1,β_2…β_k。
以上的话有点绕口,但是小编写了半天,其实也没啥好方法,就把它们画出来了:
先从(3)看起,有没有觉得跟上述时间轴图很像呢?没错,他代表一只股票关于一个因子的时间序列数据。
当我们将N只这样的股票数据排个队,便得到了图(2)。这些数据都是关于一个因子的,此时已经可以做单因子回归了。
我们把这样的很多因子叠在一起,即图(1)就是我们所需要的全部数据啦。
最后是预测。用最近发布的因子,比如图中的t1时刻公布的数据,预测各个股票未来的日均对数收益率,选择预期日均收益率较大的一些股票进行持仓。
这个是小编的回测结果,每次选取预测最好的前20只股票进行回归:
自2006年至今的绝对收益率为579.21%,同期的基准收益率为231.64%。我把收益率的数据导出,放到excel表格里面看看超额收益率
可以看出,这个策略收益总体能超越大盘,有正的alpha,可以尝试往对冲策略这个方向发展,但是超额收益其实跟择时也有很大的关系。在2008年那波熊市之前,超额收益率做了一个过山车被吐回来了。真正产生超额收益率的是09至15年的牛市顶峰。虽然看似15年以后超额收益率回撤挺大。但是由于比例尺放大了造成的。我们贴一个从15年开始的回测:
可以看到基本上策略与基准打平。但是别忘了15年这么牛熊一折腾,基差由正基差变成负基差了诶,所以真正的跑起对冲来,还是有基差可以吃的。
老师,收益率不高回撤大啊,能不能再给力点啊?
你们一个二个的想干嘛。真想找好策略,得自己去挖啊。
作为一个演示策略,啥参数都没调,其实已经像模像样了:)
未来你可以改进方向:
- 扩充股票池,扩充因子,不要只选沪深300,沪深300可能起作用的因子都是偏价值的,但是成长系的白马黑马股统统没考虑啊,妖股小市值也没有入池啊。这些小伙伴可以都带上一起玩耍。
- 因子的筛选再考究些,比如分两步筛选,第一步入选百只左右的因子,然后按照某种统计方法将因子筛出。
- 目前函数回测进行调仓的日期是固定的63天,但是随着时间的推移,原来在1月份的调仓的日期慢慢就偏移到2月3月去了,我们可以固定一个日期进行回测。等等?!难上文所说的07年和15年效果不好是偏移造成的?待我修改修改再回测。
- 我们可以把商榷一下假设。不太可能一个因子对所有股票的影响都是一样的,所以可以对单独的股票单独寻找因子回归嘛。
- 对很多细节可以提高,比如对传入的因子进行数学处理,等等。
- 本策略此如果能够结合择时策略,收益会更加好。这个择时策略就留给各路英雄尝试了~
好了,进阶篇之运用多元线性回归法选股策略就介绍到这里了,如果有兴趣,克隆代码块,自己修补一下。
标签:...,模型,APT,因子,线性,多因子,+...+,回归 来源: https://blog.csdn.net/m0_55389447/article/details/117547766