中信期货研究|商品量化专题报告 报告要点 本文将AR(N)模型和卡尔曼滤波模型结合对期货价格进行预测,主要分为三部分,第一部分详细介绍了卡尔曼模型的原理和公式推导,第二部分介绍了复合模型和具体策略的构建,第三部分在黑色、有色金属、能化和农副产品四大板块上进行回测。 期货择时系列(四)基于卡尔曼滤波的策略研究(上) 投资咨询业务资格: 证监许可【2012】669号 摘要:卡尔曼滤波是一种利用线性系统状态方程,通过系统输入输出观测数值,对系统状态 进行最优估计的算法,将其运用在价格时序预测中,其预测值能迅速逼近价格真实值。本文将AR(N)模型和卡尔曼滤波模型结合对价格进行短期预测后发现,不仅从时效性还是准确率,复合模型和常见的技术指标相比都有了显著提升。 在黑色、有色金属、能源化工和农副产品四大板块上回测后发现,复合模型对波动率较为敏感,波动越强,盈利能力越强;在波动率较低的情况下,会出现持续亏损,造成短期较大回撤。在本金占用率维持在15%的情况下,策略年化收益率达到3.43%,夏普比率达到0.68,手续费占初始本金的8.96%。 除农副产品板块外,黑色、有色金属和能源化工板块品种的持仓周期基本都能控制在日内,农副产品板块品种波动率较低,持仓周期基本控制在3-4个交易日左右。回测结果较好的品种有RB、CU和RU,这三个品种在维持较高交易频次的同时还能维持较高的年化收益率。回测结果较差的品种有MA、ZN和A,这三个品种对波动率最为敏感,在面对不利行情时,净值会迅速下跌。 本篇报告对信号过滤未做过多考虑,会在下篇报告中针对价格波动率较低时,策略出现较大回撤的情况进行改良。 风险提示:本报告中所涉及的资产配比和模型应用仅为回溯举例,并不构成推荐建议。 商品量化组 研究员:魏新照 021-80401773 weixinzhao@citicsf.com 从业资格号F3084987 投资咨询号Z0016364 重要提示:本报告难以设置访问权限,若给您造成不便,敬请谅解。我司不会因为关注、收到或阅读本报告内容而视相关人员为客户;市场有风险,投资需谨慎。 目录 摘要:1 一、卡尔曼滤波4 (一)卡尔曼滤波的介绍4 (二)卡尔曼滤波器算法4 (三)本次策略研究初衷8 二、回测标的及数据说明8 (一)回测品种的选择和费率设置9 (二)回测时间区间及数据处理9 (三)各类指标参数选择9 三、策略构建和回测结果9 (一)策略构建10 1)模型构建10 2)策略进出场规则设定11 (二)策略在不同板块的回测结果11 1)黑色板块11 2)有色金属板块13 3)能源化工板块16 4)农副产品板块18 5)全市场21 四.总结和展望22 参考文献24 免责声明25 图表目录 图表1:回测品种库9 图表2:卡尔曼模型预测价格VS实际价格VS均价11 图表3:黑色板块单品种回测净值变化12 图表4:黑色板块单品种回测结果12 图表5:黑色板块回测净值变化13 图表6:黑色板块回测结果13 图表7:有色金属板块单品种回测净值变化13 图表8:有色金属板块单品种回测结果14 图表9:有色金属板块回测净值变化15 图表10:有色金属板块回测结果15 图表11:能源化工板块单品种回测净值变化16 图表12:能源化工板块单品种回测结果17 图表13:能源化工板块回测净值变化17 图表14:能源化工板块回测结果18 图表15:农副产品板块单品种回测净值变化18 图表16:农副产品板块单品种回测结果20 图表 17:农副产品板块回测净值变化..................................................... 21 图表 18:农副产品板块回测结果......................................................... 21 图表 19:策略全市场回测净值变化....................................................... 21 图表 20:策略全市场回测结果........................................................... 22 一、卡尔曼滤波 (一)卡尔曼滤波的介绍 卡尔曼滤波(Kalmanfiltering)是一种利用线性系统状态方程,通过系统输入输出观测数值,对系统状态进行最优估计的算法。RudolfEmilKalman于1960年发表论文《ANewApproachtoLinearFilteringandPredictionProblems》,此后卡尔曼滤波正式走入大众视野。卡尔曼滤波较维纳滤波 (Wienerfilter)有着里程碑式的突破,维纳滤波只适用于平稳随机过程,且应用时需要得到全部过去观测值,而卡尔曼滤波不受限于这2点,因此应用也更广泛。 在介绍算法之前,作者先使用一个简单的体重测量例子做个直观解释,方便读者理解。假设现在需要估算同学A在k时刻的实际体重,首先需要根据k-1时刻的体重,来预测k时刻的体重。因为体重很难在短期发生显著改变,因此个人认为k时刻的体重和k-1时刻的体重基本是一样的,假设是60kg,有±2kg的误差。然后,在体重称上得出k时刻的体重为61kg,因为体重称不一定准确,所以设定了±1kg的误差。现在有两个体重值来估算同学A在k时刻的真实体重,分别为60kg和61kg。依据2个值的误差和协方差,我们可以得出卡尔曼增益K (KalmanGain),此处K为:√22=0.89,卡尔曼增益后续会详细解释。因此k 22+12 时刻的实际体重的最优值为:60+0.89*(61-60)=60.89,且该最优值的偏差为: √(1−0.89)∗22=0.66。其中2就是k时刻个人预测体重时的偏差,得出的 0.66可以被看成是进入k+1时刻后在k时刻算出的最优值的偏差,该值对应了k时刻体重称的误差1。之后,每次测算体重,都用这个体重称和个人经验去估计体重,这就是卡尔曼滤波的过程。 (二)卡尔曼滤波器算法 根据上文的简单例子可以发现,线性动态系统可以用2个线性方程来描述, 这2个方程分别为状态方程和观测方程,如下: 状态方程: 𝑥�=𝐴𝑥𝑘−1+𝐵𝑢𝑘−1+𝑞𝑘−1 观测方程: Zk=𝐻𝑥�+𝑟� 状态方程的作用是估计出先验的状态,其中𝑥�代表了k时刻的系统状态, 𝑢�代表了k时刻对系统的控制量,矩阵A和B是系统参数矩阵,分别代表了状态转移矩阵和控制量转移矩阵,如果需要做卡尔曼滤波的对象没有控制量输入, 𝐵𝑢�这一项可以被省略。观测方程中Zk代表了k时刻的测量值,矩阵H是测量系统的参数矩阵。这两个方程中𝑞�和𝑟�分别代表了估计和测量的噪音,都满足高斯分布,Q和R代表了这2个噪音的方差。 卡尔曼滤波就是通过综合考虑了由以上2个方程得出的估计值和测量值, 迭代出不确定性最小的数值。其实现过程可以细分为5步,这5步可以用5个公式来进行描述,如下: � 1.𝑋̅̂ =𝐴𝑋̂𝑡−1 +𝐵𝑈𝑡−1 2.𝑃̅�=𝐴𝑃𝑡−1𝐴�+� 3.𝐾� =𝑃̅𝑡𝐻� 𝐻𝑃̅𝑡𝐻𝑇+� � 4.𝑋̂�=𝑋̅̂ +�(� −𝐻𝑋̅̂) � � � 5.𝑃�=(�−𝐾𝑡𝐻)𝑃̅�(I为单位矩阵) 来细看每一个公式,首先是第一个公式,基于t-1时刻的状态以及控制量对t时刻的状态进行估计。第二个公式是利用t-1时刻得出的最优估计值的协方差和估计方差得出t时刻公式(1)的先验状态估计的协方差矩阵,单看公式难以理解,因此对公式进行了详细的推导,如下: 𝑃̅�为先验状态估计的协方差矩阵,所以: 𝑃̅=𝑐𝑜𝑣(𝑋̅̂,𝑋̅̂)=𝐸[(𝑋̅̂ −�)(𝑋̅̂ � −�] ��� ��� 𝑡) 其中(𝑋̅̂−�)可以被称为先验误差𝑒̅,所以: ��� 𝑒� =(𝑋̅̂ −𝑋𝑡) � =(𝐴𝑋̂𝑡−1+𝐵𝑈𝑡−1+𝑊)−(𝐴𝑋𝑡−1+𝐵𝑈𝑡−1) =𝐴(𝑋̂𝑡−1−𝑋𝑡−1)+� =𝐴𝑒𝑡−1+� 所以: 𝑃̅�=𝐸(𝑒𝑡̅𝑒𝑡̅𝑇) =𝐸[(𝐴𝑒𝑡−1+𝑊)(𝐴𝑒𝑡−1+𝑊)𝑇] 𝑡−1 =𝐸[(𝐴𝑒𝑡−1+𝑊)(𝑒�𝐴�+𝑊𝑇)] =𝐸(𝐴𝑒𝑡−1𝑒�𝐴�+𝐴𝑒𝑡−1𝑊�+𝑊𝑒�𝐴�+𝑊𝑊𝑇) 𝑡−1𝑡−1 𝑡−1 =𝐸(𝐴𝑒𝑡−1𝑒�𝐴𝑇)+0+0+𝐸(𝑊𝑊𝑇) =𝐴𝑃𝑡−1𝐴�+� 通过第二个公式,得出先验状态估计的协方差,即先验状态估计的不确定性。在理解第三个公式之前,先解释一下第四个公式,如下: � 𝑋̂�=𝑋̅̂ +�(� −𝐻𝑋̅̂) � � � 公式中的𝐾�就是卡尔曼增益,这个公式非常直观地展示了卡尔曼增益在卡尔曼滤波中的作用,它是将估计值和观测值融合起来的权重。那卡尔曼增益是怎么求得呢,公式三就是卡尔曼增益的求解公式。卡尔曼增益的本质是将先验估计状态和测量值的协方差结合考虑后使最优状态估计的方差最小时的参数值,因此求解公式中存在求导的概念,具体推导过程,如下: 首先𝑃�是最优状态估计的协方差,所以: ̂̂̂ ̂� 𝑃�=𝑐𝑜𝑣(𝑋𝑡,𝑋𝑡)=𝐸[(𝑋�−𝑋𝑡)(𝑋�−𝑋𝑡)] 其中(𝑋̂�−𝑋𝑡)可以被称为后验误差𝑒𝑡,所以: 𝑒�=𝑋̂�−𝑋� =[𝑋̅̂+�(�−𝐻𝑋̅̂)]−� ����� =[𝑋̅̂+�(𝐻�+𝑉)−�𝐻𝑋̅̂−� ������ =(𝑋̅̂−�)−�𝐻(𝑋̅̂−�)+�� ������ =(�−𝐾𝑡𝐻)(𝑒𝑡̅)+𝐾𝑡� 所以: 𝑃�=𝐸(𝑒�𝑒𝑡𝑇) � =�[((�−𝐾𝑡𝐻)(𝑒𝑡̅)+𝐾𝑡𝑉)((�−𝐾𝑡𝐻)(𝑒𝑡̅)+𝐾𝑡𝑉)] � =𝐸[(�−𝐾𝑡𝐻)𝑒𝑡̅𝑒𝑡̅𝑇(�−𝐾𝑡𝐻)�+(�−𝐾𝑡𝐻)𝑒𝑡̅𝑉𝑇𝐾� � +𝐾𝑡𝑉𝑒𝑡̅𝑇(�−𝐾𝑡𝐻)�+𝐾𝑡𝑉𝑉𝑇𝐾𝑇] � =(�−𝐾𝑡𝐻)𝑃̅𝑡(�−𝐾𝑡𝐻)�+0+0+𝐾𝑡𝑅𝐾� =𝑃̅�−𝐾𝑡𝐻𝑃̅�−𝑃̅𝑡𝐻𝑇𝐾�+𝐾𝑡𝐻𝑃̅𝑡𝐻𝑇𝐾�+𝐾𝑡𝑅𝐾� ��� 因为求导求最小值,所以�满足公式:𝑑𝑡𝑟(𝑃𝑡)=0,𝑡𝑟(�)为最优状态估 �𝑑(𝐾𝑡)� 计协方差矩阵对角线上元素之和,也就是方差之和,所以: �𝑡𝑟(𝑃𝑡) � 𝑑(�)=0 ��� 𝑑𝑡𝑟(𝑃̅�−𝐾𝑡𝐻𝑃̅�−𝑃̅𝑡𝐻𝑇𝐾�+𝐾𝑡𝐻𝑃̅𝑡𝐻𝑇𝐾�+𝐾𝑡𝑅𝐾𝑇) −=0 𝑑(𝐾𝑡) 𝑑𝑡𝑟(𝑃̅𝑡) 𝑑𝑡𝑟(𝐾𝑡𝐻𝑃̅𝑡)𝑑𝑡𝑟(𝑃̅𝑡𝐻𝑇𝐾𝑇)𝑑𝑡𝑟(𝐾𝑡𝐻𝑃̅𝑡𝐻𝑇𝐾𝑇) −−�+� 𝑑(𝐾𝑡) 𝑑(𝐾𝑡) � �𝑡𝑟(𝐾𝑡𝑅𝐾𝑇) +=0 𝑑(𝐾𝑡) 𝑑(𝐾𝑡) 𝑑(𝐾𝑡) 0−(𝐻𝑃̅𝑡)�−(𝐻𝑃̅𝑡)�+2𝐻𝑃̅𝑡𝐻𝑇𝐾�+2𝑅𝐾�=0 𝐻𝑃̅𝑡𝐻𝑇𝐾�+𝑅𝐾�=(𝐻𝑃̅𝑡)� 𝑃̅𝑡𝐻� � 𝐾�=𝐻𝑃̅𝐻�+� 以上就是公式三的全部推导过程。公式五是结合公式三和刚刚推导过程中 的公式𝑃�=𝑃̅�−𝐾𝑡𝐻𝑃̅�−𝑃̅𝑡𝐻𝑇𝐾�+𝐾𝑡𝐻𝑃̅𝑡𝐻𝑇𝐾�+𝐾𝑡𝑅𝐾�得到的,具体如下: ��� �