137-配对交易策略(Pairs Trading)
由qxiao创建,最终由qxiao 被浏览 206 用户
绩效截图
我们先来看一个策略回测曲线,年化12.4%,最大回撤18个点,交易不是特别频繁,但总体是一个正收益系统的策略
这就是一个配对交易策略,只买两只票。下面我们详细介绍!
\
配对策略的交易规则
- 对于股价有长期协整关系的两只股票X和Y, 可以通过历史数据回归计算两只股票的股价关系,即 Y = a*X + b, 得到相关系数a和残差项b;
- 如果两个股票所属同一行业,我们可以认为两者的股价未来应该保持上述关系,即序列 zscore=(b-mean(b,N))/std(b,N) 存在比较稳定的均值回归特性,保持在-1和1之间往复震荡;
- 当zscore小于-1时, Y股票低估,此时卖出X, 全仓买入Y;
- 当zscore大于 1时, X股票低估,此时卖出Y, 全仓买入X;
策略构建步骤
1、确定股票池和回测时间
- 通过证券代码列表输入要回测的两只股票,以及回测的起止日期
2、获取历史价格数据
- 通过输入特征列表输入 close/adjust_factor 因子,指定获取股票的收盘价真实价格。
- 通过基础特征抽取模块获取股票的价格数据。
- 通过缺失数据处理模块删去有缺失值的数据。
3、确定买卖原则
- 当zscore小于-1时,卖出X股票, 全仓买入Y;
- 当zscore大于 1时,卖出Y股票, 全仓买入X;
4、模拟回测
- 通过 bigtrader 模块中的初始化函数定义交易手续费和滑点;
- 通过 bigtrader 模块中的盘前处理函数每日用当日之前的历史数据计算一次zscore变量序列,并存放在context.zscore 变量中;
- 回测第一天用过去240个自然日的历史数据计算,后面每日用于计算zscore的历史数据逐日递增;
- 通过 bigtrader 模块中的主函数(handle_data函数)查看每日zscore值,按照买卖原则执行相应的卖出/买入操作。
\
模块介绍
通过close / adjust_factor as close 抽取价格因子
抽取有高相关性的两只股票,分别为中信银行(601998)、交通银行(601328)
将价格数据转换下格式,转换成日期、股票1、股票2这三列数据。
通过回归(ols)得到价格的残差,并通过残差确定交易信号
执行交易信号
\
代码克隆
https://bigquant.com/codesharev3/52dcca45-0e9c-4fcd-8d18-d55b89f16b8e
\