BigQuant使用文档

137-配对交易策略(Pairs Trading)

由qxiao创建,最终由qxiao 被浏览 167 用户

绩效截图

我们先来看一个策略回测曲线,年化20%,最大回撤只有十几个点,交易不是特别频繁,但胜率极高。

这就是一个配对交易策略,只买两只票。下面我们详细介绍!

\

配对策略的交易规则

  • 对于股价有长期协整关系的两只股票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/9ffce3ba-c4c4-46e0-987b-da130b31b876

\

评论
  • 这个策略交易的中信银行金额比例远超过交通银行,需要调整一致才合理吧
  • 感谢反馈,我更新了下 回测的 成交比率限制参数,结果就正常了,买入的金额也是一致的。非常感谢您的反馈!
{link}