策略不给力?来一发卡尔曼滤波

发布于: 雪球转发:24回复:54喜欢:87
转载自ricequant量化社区胡良勇 的帖子:
网页链接

我和卡尔曼滤波的渊源要从我开始尝试做配对交易开始说起。
配对交易是八十年代中期华尔街著名投行Morgan Stanley的数量交易员Nunzio Tartaglia成立的一个数量分析团队提出的一种市场中性投资策略。具体说来,其是指从市场上找出历史股价走势相近的股票进行配对,当配对的股票价格差(Spreads)偏离历史均值时,则做空股价较高的股票同时买进股价较低的股票,等待他们回归到长期均衡关系时,进行相应的平仓操作,从而获取股票价格收敛的报酬。
在进行配对交易前,我们一般都是通过检验两个股票标的之间是否具有协整关系,从而确定它们是否适合作为配对交易的标的。基于协整理论,可以预期二者之间的偏离或波动是暂时的,在长期内会由于二者股价的调整而回复到均衡关系。所以我们可以通过协整估计得到其残差序列,基于残差序列的平稳特性,从而建立合适的头寸在均值回复时获取利润。
但是开始实现这个策略的时候,我发现传统的配对交易策略,其配对比率一般固定在某一个恒定的值,但是随着时间的推移,最优的Hedge Ratio必然会发生变化,如果继续使用某一段时间估计出的最优对冲比率继续进行交易,会出现样本外表现不尽如人意的地方,换句话说就是出现了样本内过拟合了。为了克服这个缺点,我发现算法工程师们引入了Kalman Filter的思想,来改善配对交易策略的表现。那它到底效果如何呢,这就是我们今天主要探讨的方面。
我们先来看看卡尔曼滤波的来源。。。。。。

卡尔曼滤波和其他著名理论(例如傅里叶变换、泰勒级数)一样,都是以发明人的名字命名的。其是匈牙利的数学家,1930年出生于匈牙利首都布达佩斯。1953年,1954年于麻省理工学院分别获得了电机工程学士及硕士学位。1957年于哥伦比亚大学获得博士学位。现在的卡尔曼滤波器,正是源于他的博士论文和1960年发表的论文《A New Approach to Linear Filtering and Prediction Problems》
只闻其名,不闻其人,这不是我的style,那先让我们来一睹大侠风范吧!

<看!这迷离的小眼神.....>

滤波是什么?
为了进一步加深大家对滤波的理解,继续普及一下滤波的含义:
所谓滤波,就是从混合在一起的诸多信号中提取出所需要的信号。信号可以简单的分为两种:确定性信号与随机信号。对于确定性信号使用常规滤波就可以,而随机信号的滤波一般根据有用信号和干扰信号的功率谱设计滤波器,一般有维纳滤波器和卡尔曼滤波器。随机信号的滤波说得直白一些就是如何更准确的进行估计。
卡尔曼滤波是什么?
简单地说,卡尔曼滤波器是一个最优化的自回归数据处理算法(Optional recursive data processing algorithm),其有5条核心的公式。卡尔曼滤波器对于解决大部分问题,是最优效率最高甚至最有用的。
卡尔曼滤波的基本思想
以K-1时刻的最优估计为准,预测K时刻的状态变量,同时又对该状态进行观测,得到观察变量,再在预测与观测之间进行分析,或者说是以观测量对预测量进行修正,从而得到K时刻的最有效的状态估计,借鉴wikipedia,其基本原理用可以表示为:


让我们举两个经典的例子来加深对卡尔曼滤波思想的理解
1.航海定位
在海图作业中,航海长通常以前一时刻的船位为基准,根据航向、航速和海流等一系列因素下推算下一个船位,但是这并不能保证船位就一定在推算的位置上,所以还需要选择适当的方法,比如通过仪器的观测来推算船位。初始推算值和观测值一般都不一样,航海长需要通过对观察值和推算值的分析和判断来选择一个可靠的船位作为船舰的当前位置。这便类似于卡尔曼滤波思想的本质,航海长的经验判断便是卡尔曼滤波思想中的基于历史数据的预测值,而罗盘提供的信息便对应于卡尔曼滤波中的观测值,在基于丰富经验的预测值与通过仪器得到的观测值的双重保险下,航海长更加精确地确定了实际位置,有效地避免了海际迷航<坏笑>

2. 温度测量
假设我们要研究一个房间的温度,以一分钟为时间单位。根据经验判断,这个房间的温度在前后一分钟应该是不变的,即假设温度是恒定的。但是经验不是完全可以相信的,可能存在上下几度的偏差,为了计算简便,我们假设该偏差是高斯白噪声。另外,为了使我们的判断更加准确,我们在房间里放置了一个温度计,但温度计也会有测量误差,这个误差同样也是高斯白噪声。现在我们要做的就是根据我们自己的经验而得到的预测值与通过温度计的测量值及它们各自的白噪声来估计出房间的实际温度。关于温度测定的具体实例,大家GOOGLE就能很方便的找到了,此处不赘述。

此处我们只考虑最基本的卡尔曼滤波的方程形式---无控制的离散型卡尔曼滤波。由于知乎输入公式比较麻烦,此处贴图代过。

写到这里,想必大家对Kalman Filter有了一个大概的认识,那它又是如何应用到金融上的呢?我们先来看几个简单例子
房间温度估计的实现
紧接上面的例子,我们来实现一下房间温度的估计结果:

源代码可以通过链接
网页链接
得到

卡尔曼率波估计移动平均值
我们有时候会使用移动平均值来估计明天的实现值,关于时间窗口的选择一直都是令人头疼的问题,时间选取太短会存在波动过大,无法很好的刻画,时间过长则会导致移动平均线的估计值过于平滑,无法有效的跟踪真实值的变动。今天我们用卡尔曼滤波法来实现看看它的表现情况,并与移动平均法进行简单的比较。
由于看的不是很清楚,我们放大后半部分,以便更细致的观察比较:


代码链接地址:卡尔曼滤波思想的经典应用
不难发现,kalman filter估计值(蓝线)在整个样本期,对于估计上证综指(绿线)明天的真实值比其他均线的效果更好,更能贴近沪深上证综指的运行轨迹。但天下没有免费的午餐,我们并不能完全消除过度拟合的问题,但是卡尔曼滤波至少相比于移动平均更加严谨,而且效果更优
说了好多废话,我们现在来看看其在配对交易中的策略表现
当正式应用到配对交易当中时,我们主要是利用卡尔曼滤波来估计标的股票对之间的beta值和alpha值,传统的配对交易策略都是选定某一段时间作为时间窗口,计算出该指定时间窗口内的alpha值和beta值,并且假设配对股票对之间的价格在未来的一段时间内依然会满足收敛关系。但是现实中,标的股票对之间的股价并不总是一直有效的收敛。为了更好的把握二者之间的走势关系,我们需要动态调整它们之间的参数值,以更好的适应股票价格的变化,降低交易风险。
我们通过协整检验发现股票对['000029.XSHE', '600036.XSHG']在2015年具有协整关系,故可以用来作为配对交易的标的。用卡尔曼滤波估计的结果显示二者的参数值(beta,alpha)随着时间的推移变化是巨大的,如果我们只是一味地使用恒定的alpha和beta值进行交易,会出现什么状况呢?接下来让我们来观测二者的结果有什么差异。首先我们看一下卡尔曼滤波应用到参数值的估计时,其估计的参数变化过程,如下:
接着我们先来看看传统的恒定对冲比率配对交易的回测表现:
让我们继续看看使用卡尔曼滤波方法的配对交易策略的回测结果:

比较二者不难发现,在时间轴相同的情况下进行回测发现,恒定比率的配对交易策略,在后期基本没有什么作用了,并不能触发交易指令,价差也并没有按照预期收敛。而这其实是在利用未来数据基础上的结果(注:这里15年全年是进行协整检验的时间,而15年之后是预测的时间,为了更多的触发配对交易,这里使用了一些未来数据,所以不难想象如果没有未来数据,表现更差)相比之下,卡尔曼滤波法进行配对交易效果好很多,并且至少能维持正的收益。由于股灾的发生,导致回测大了许多。如果没有连续千古跌停,我想效果会更好。顺便提一下,以上的阈值都是1.5倍标准差。
那为了更深入的研究配对交易,我们继续使用OLS法来进行对冲比率的计算,但是这次我们把恒定的对冲比率更改为不断滚动的值。接下来我们继续看一下结果,滚动的对冲比率相比于恒定的看其表现如何。

我们发现,当对冲比率滚动时,用OLS进行配对交易的表现与卡尔曼滤波的表现差不多,并且开仓平仓的时间点都是一样的,只是由于参数的估计值的差异,开仓头寸有略微差别。
写到这里,如果大家对如何实现感兴趣,想自己去完善这个交易策略,戳我!戳我!戳我!
网页链接
第一次发文>_<,如有什么错误,烦请大家批评指正!\
公号id:Ricequant
$乐视网(SZ300104)$    $众和股份(SZ002070)$    $万科A(SZ000002)$   
@2分之1自旋  @RanRan @东边的小石头 @铁公鸡金融 @魏员外 @坚信价值  @一只特立独行的猪   @股民老K   @502的牛 @骑行夜幕的统计客  @非典型伪价值投机    @量化钢铁侠 @linnany  @持有封基   @炒饭锅锅  @william_hsu  @Younge @从头做小弟 @飞泥翱空 @胖咪咪

精彩讨论

全部讨论

2016-06-04 21:41

我刚赞助了这篇帖子 1 雪球币,也推荐给你。

2016-06-03 22:17

2016-06-03 20:37

量化入门的话推荐Ernest Chan那两本书,一些基本知识包括这里的kalman filter都包括了

2016-06-03 20:18

卡尔曼滤波,我天天搞这个

2016-06-03 20:03

2016-06-03 19:55

卡尔曼滤波一样没解决样本内样本外的问题。。。