量化投资第二次作业——配对交易策略
量化投资第二次作业——配对交易策略
原始回测结果分析
根据学号,我分到的是$C26$化学原料及化学制品制造业,但该股票池中有$358$支股票,代码运行时间过长(跑一次几十分钟),我就斗胆换成了$C28$化学纤维制造业,初始代码跑出的结果如下:
可以看出初始回测的结果并不是很尽如人意,策略收益率为$-17.594%$,仅仅略高于基准收益率。同时,最大回撤很大,几乎从头回撤到尾。我试着分析这个结果的原因。一个可能的原因是配对交易策略基于两只股票的价差在长期具有均值回复性,当这种均值回复性在短期可能是会出现背离的,也可能回复时间过长,对资产持有者造成很大的压力。因此,我们需要对模型进行优化,是之能够处理短期的背离。于是,我找到了误差修正模型。
误差修正模型
模型原理
协整检验得到的时间序列可以解释变量之存在的长期关系,但却忽略了协整变量之间可能存在的短期偏离现象,这种短暂偏离可以使用误差修正模型($Error Correction Model$) 进行修正。误差修正模型 (简称 $ECM$模型) 于 1978 年由$ Davidson$、$Hendrt$、$Srba$ 和 $Yeo$四位学者提出,因此该模型亦被称为 $DHSY $模型。一阶误差修正模型推导如下:
假定时间序列${X_t }$ 和 ${Y_t}$之间具有协整关系,其表达式为:
$$
Y_t=\alpha_0+\alpha_1 X_t+\varepsilon_t
$$
其中,$\alpha_1$为$Y_t$关于$X_t$的长期系数 (即:协整系数),但是在金融市场中,会出现很多非均衡状态。可以用一阶滞后自回归模型来描述这种关系,假设关系表达式如下:
$$
Y_t=\beta_0+\beta_1 X_t+\beta_2X_{t-1}+\mu Y_{t-1}+\varepsilon_t
$$
其中,$\beta_1$为$Y_t$关于$X_t$的短期系数,$\varepsilon_t$是均值为$0$、方差为$\sigma^2$的白噪声序列。该模型说明$Y_t$的取值不仅与$X_t$的取值有关,还与$X_{t-1}$的取值有关。再对上式进行差分处理,可以整理得到:
$$
\Delta Y_t=\beta_1 \Delta X_t-\lambda(Y_{t-1}-\alpha_1’X_{t-1}-\alpha_0’)+\varepsilon_t
$$
其中:
$$
\lambda=1-\mu,\ \ \ \alpha’0=\frac{\beta_0}{1-\mu},\ \ \ \alpha_1’=\frac{\beta_1+\beta_2}{1-\mu}
$$
记$t-1$期的误差修正项为:
$$
ecm{t-1}=Y_{t-1}-\alpha_1’ X_{t-1}-\alpha_0’
$$
则一阶误差修正模型可表示为:
$$
\Delta Y_t=\beta_1 \Delta X_t-\lambda ecm_{t-1} +\varepsilon_t
$$
其中,误差修正项的系数 $0 <λ < 1$,反映了对于短期偏离均衡关系的调整强度。$ecm_{t-1}$的修正作用为:当$Y_{t-1}$大于其长期均衡$\alpha_1’ X_{t-1}+\alpha_0’$的值(即:$ecm_{t-1}$为正)时,$-\lambda\ ecm_{t-1}$为负,可以使$\Delta Y_t$减小,从而使得$Y_t$值向均衡水平回归;当$Y_{t-1}$小于其长期均衡$\alpha_1’ X_{t-1}+\alpha_0’$的值(即:$ecm_{t-1}$为负)时,$-\lambda\ ecm_{t-1}$为正,可以使$\Delta Y_t$增大,从而使得$Y_t$值向均衡水平回归。以此,可以起到修正作用。
代码介绍
我们首先照旧进行协整性检验,得到具有协整性的股票对,这些股票对具有稳定的长期关系。在此基础上,对这些股票对应用误差修正模型,以解决其短期偏离的问题。
在代码中,我们采用如下表达式:
$$
\Delta Y_t=\beta_0+\beta_1 \Delta X_t-(1-\mu)Y_{-1}+(\beta_1+\beta_2)X_{-1}+\varepsilon_t
$$
其中,$\Delta Y_t$代表股票$Y$一阶差分后的对数价格,$\Delta X_t$代表股票$Y$一阶差分后的对数价格,$Y_{-1}$代表股票$Y$的一阶滞后,$X_{-1}$代表股票$X$的一阶滞后。
具体的求解方法就是以$\Delta{Y_t}$为因变量,$\Delta X_t$、$Y_{-1}$、$X_{-1}$为自变量进行$OLS$多元回归,相关代码如下:
回归代码:
1 | for pair in pairs: |
通过观察拟合优度$R^2$,我发现误差修正模型的拟合优度普遍低于之前的一元回归,部分情况$R^2$过低,需要进行剔除,故我对回归结果进行筛选,只选取$R^2$大于$0.3$进行交易,代码如下:
1 | ppairs = context.ols_result.keys() |
交易代码:
和原始的代码一样,我也是将观察值与估计值作差得到误差项,根据误差项的大小进行决策。误差项的计算代码如下:
1 | stock_de, stock_inde = pair # 当pairs里还有pvalue的时候,需要调整写法 |
优化结果分析
可以看出,经过优化之后策略的收益率有了明显的提升,同时最大回撤与最大回撤持续期都有效降低。其他指标如波动率、阿尔法、贝塔、夏普率等也有一定的提升。另一个明显的差异是策略收益曲线较之前变得更加“平稳”了,究其原因,可能是误差修正模型进行了第二次筛选,使得满足配对要求的股票对进一步减少,进而交易的频率减少了,某种方面来说提高了交易的“质量”;另一方面,新模型的交易信号可能还有改进的空间,或许不应该以一倍的标准差为界限,可能存在更独特的交易信号。
完整代码如下:
1 | from youngquant.api import * |