原 【策略研究】跨品种价差套利策略(附源码)

跨品种价差套利简介

套利原理

​ 通俗地讲,就是两个合约相关性很好,突然市场出了一个bug,破坏了两个合约之间的平衡状态,进场套利;等待市场回复,平仓出场。即均值回复思想。

价差套利

​ 价差套利的前提是做出商品期货品种间同一月份的价格之间的价差,并且画出价差的时间序列图,分析价差,寻找合理的价差范围,超出合理的价差变动范围时如何进行操作。

套利标的的选取

​ 我们选取同为黑钢产业的主要产品,热轧卷板与螺纹钢作为套利标的。

​ 首先,从价格走势上来看,二者价格趋势上一致性非常高,基本处于同涨同跌局面,如下图所示,2014年至2017年热轧卷板与螺纹钢价格指数,相关性达到0.924。二者成本从铁矿石到钢坯这个阶段几乎一样,只是在最终的轧制成材阶段出现了分化。

​ 其次,二者价格的季节性也表现出较高的一致性。热轧卷板和螺纹钢的年内高点普遍出现在4月,次高点出现在7月,而10月不管是热轧卷板还是螺纹钢都倾向于出现年内低点。在较一致的季节性特点下,二者的价格强弱也有一定的规律可循。一般情况下,1、2月热轧卷板的表现会略强于螺纹钢,但是之后二者比价会逐步走低,也就是螺纹钢相对于热轧卷板会逐步变强。而这种强弱关系一般到10月会达到一个极致,之后热轧卷板会再度重新变得相对强一点。

​ 为了防止未来函数的引入,在这里我们选取“HC1701”与“RB1701”作为套利观察合约

​ 图示分为两部分,上图为2016-04-01至2016-12-31的两标的合约日线收盘价的数据,经计算,相关性系数为0.988,下图为两者价差的走势,上下界分别为均值加减两倍标准差。

​ 可以看出价差在上下界之外会再次回归,这就成为了我们的交易机会,不过,均值周期需要缩短,以增加交易次数。另外,我们用2017-04-01至2017-12-31的“HC1801”与“RB1801”作为标的合约,进行回测。

跨品种价差套利策略实现(基于掘金量化平台)

策略思想

  • 获取过去的30个交易日的bar的均值正负2个标准差得到上下界。

  • 用最新价差来判断开仓方向,上穿上轨来做空价差,下穿下轨来做多价差。

  • 回归至上下轨水平内的时候平仓。

策略主要步骤实现

订阅数据

subscribe(symbols=symbols, frequency='1d', count=31, wait_group=True)(symbols=symbols, frequency='1d', count=31, wait_group=True)

​ 订阅数据需要在定义init函数里面设置,并调用subscribe函数,这里注意,我们需要通过计算前三十根bars来作为开平仓的标准,并在当前bar上做出开平仓操作,所以需要获取31根bar:

  • symbols 需要设置订阅的标的代码。

  • frequency需设置订阅数据的周期级别,这里设置1d 表示以一天为周期。

  • count需要设置获取的bar的数量

数据获取

data_rb = context.data(symbol=symbol, frequency='1d', count=31, fields='close') = context.data(symbol=symbol, frequency='1d', count=31, fields='close')

​ 订阅数据之后,需要获取已经订阅的数据来进行操作,这时需调用context.data函数:

  • symbols 需要设置订阅的标的代码。

  • frequency需设置订阅数据的周期级别,这里设置1d表示以一天为周期。

  • count需要设置获取的bar的数量

  • fields需要设置返回值的种类

策略回测分析

回测报告

分析

​ 我们选取了2017年4月至2017年11月作为回测周期,“HC1801”与“RB1801”作为标的合约,价差均值周期设为30,可以看出:

  • 胜率(具有盈利的平仓次数与总平仓次数之比)达到了56.25%。

  • 卡玛比率(年化收益率与历史最大回撤之比)是使用最大回撤率来衡量风险。采用最大回撤率来衡量风险,关注的是最极端的情况。卡玛比率越高表示策略承受每单位最大损失获得的报酬越高。在这里卡玛比率超过了4。

  • 夏普比率(年化收益率减无风险收益率的差收益波动率之比)超过1.5,也即承受1单位的风险,会有超过1.5个单位的收益回报

  • 策略收益曲线相当稳定,最大回撤极小,缺点是交易次数少,很长时间无交易。

  1. 跨品种套利策略源码(期货):
  1. # coding=utf-8
  2. from __future__ import print_function, absolute_import, unicode_literals
  3. from gm.api import *
  4. import numpy as np
  5. '''
  6. 本策略根据计算滚动的.过去的30个1min的bar的均值正负2个标准差得到布林线
  7. 并在最新价差上穿上轨来做空价差,下穿下轨来做多价差
  8. 并在回归至上下轨水平内的时候平仓
  9. 回测数据为:SHFE.rb1801和SHFE.hc1801的1min数据
  10. 回测时间为:2017-09-01 08:00:00到2017-10-01 16:00:00
  11. '''
  12. def init(context):
  13. # 进行套利的品种
  14. context.goods = ['SHFE.rb1801', 'SHFE.hc1801']
  15. # 订阅行情
  16. subscribe(symbols=context.goods, frequency='60s', count=31, wait_group=True)
  17. def on_bar(context, bars):
  18. # 获取两个品种的时间序列
  19. data_rb = context.data(symbol=context.goods[0], frequency='60s', count=31, fields='close')
  20. close_rb = data_rb.values
  21. data_hc = context.data(symbol=context.goods[1], frequency='60s', count=31, fields='close')
  22. close_hc = data_hc.values
  23. # 计算价差
  24. spread = close_rb[:-1] - close_hc[:-1]
  25. # 计算布林带的上下轨
  26. up = np.mean(spread) + 2 * np.std(spread)
  27. down = np.mean(spread) - 2 * np.std(spread)
  28. # 计算最新价差
  29. spread_now = close_rb[-1] - close_hc[-1]
  30. # 无交易时若价差上(下)穿布林带上(下)轨则做空(多)价差
  31. position_rb_long = context.account().position(symbol=context.goods[0], side=PositionSide_Long)
  32. position_rb_short = context.account().position(symbol=context.goods[0], side=PositionSide_Short)
  33. if not position_rb_long and not position_rb_short:
  34. if spread_now > up:
  35. order_target_volume(symbol=context.goods[0], volume=1, order_type=OrderType_Market,
  36. position_side=PositionSide_Short)
  37. print(context.goods[0], '以市价单开空仓一手')
  38. order_target_volume(symbol=context.goods[1], volume=1, order_type=OrderType_Market,
  39. position_side=PositionSide_Long)
  40. print(context.goods[1], '以市价单开多仓一手')
  41. if spread_now < down:
  42. order_target_volume(symbol=context.goods[0], volume=1, order_type=OrderType_Market,
  43. position_side=PositionSide_Long)
  44. print(context.goods[0], '以市价单开多仓一手')
  45. order_target_volume(symbol=context.goods[1], volume=1, order_type=OrderType_Market,
  46. position_side=PositionSide_Short)
  47. print(context.goods[1], '以市价单开空仓一手')
  48. # 价差回归时平仓
  49. elif position_rb_short:
  50. if spread_now <= up:
  51. order_close_all()
  52. print('价格回归,平所有仓位')
  53. # 跌破下轨反向开仓
  54. if spread_now < down:
  55. order_target_volume(symbol=context.goods[0], volume=1, order_type=OrderType_Market,
  56. position_side=PositionSide_Long)
  57. print(context.goods[0], '以市价单开多仓一手')
  58. order_target_volume(symbol=context.goods[1], volume=1, order_type=OrderType_Market,
  59. position_side=PositionSide_Short)
  60. print(context.goods[1], '以市价单开空仓一手')
  61. elif position_rb_long:
  62. if spread_now >= down:
  63. order_close_all()
  64. print('价格回归,平所有仓位')
  65. # 涨破上轨反向开仓
  66. if spread_now > up:
  67. order_target_volume(symbol=context.goods[0], volume=1, order_type=OrderType_Market,
  68. position_side=PositionSide_Short)
  69. print(context.goods[0], '以市价单开空仓一手')
  70. order_target_volume(symbol=context.goods[1], volume=1, order_type=OrderType_Market,
  71. position_side=PositionSide_Long)
  72. print(context.goods[1], '以市价单开多仓一手')
  73. if __name__ == '__main__':
  74. '''
  75. strategy_id策略ID,由系统生成
  76. filename文件名,请与本文件名保持一致
  77. mode实时模式:MODE_LIVE回测模式:MODE_BACKTEST
  78. token绑定计算机的ID,可在系统设置-密钥管理中生成
  79. backtest_start_time回测开始时间
  80. backtest_end_time回测结束时间
  81. backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POST
  82. backtest_initial_cash回测初始资金
  83. backtest_commission_ratio回测佣金比例
  84. backtest_slippage_ratio回测滑点比例
  85. '''
  86. run(strategy_id='strategy_id',
  87. filename='main.py',
  88. mode=MODE_BACKTEST,
  89. token='token_id',
  90. backtest_start_time='2017-09-01 08:00:00',
  91. backtest_end_time='2017-10-01 16:00:00',
  92. backtest_adjust=ADJUST_PREV,
  93. backtest_initial_cash=500000,
  94. backtest_commission_ratio=0.0001,
  95. backtest_slippage_ratio=0.0001)

文章来源:掘金量化交易平台,转载请注明出处!

----------------------------------------------------------------------------------------------------------------------------------------------------------

更多经典股票/期货量化策略源码查看:

1 双均线策略(期货)  量化策略源码 https://www.myquant.cn/docs/python_strategyies/153
2 alpha对冲(股票+期货)  量化策略源码 https://www.myquant.cn/docs/python_strategyies/101
3 集合竞价选股(股票) 量化策略源码 https://www.myquant.cn/docs/python_strategyies/102
4 多因子选股(股票)  量化策略源码 https://www.myquant.cn/docs/python_strategyies/103
5 网格交易(期货)  量化策略源码 https://www.myquant.cn/docs/python_strategyies/104
6 指数增强(股票)  量化策略源码 https://www.myquant.cn/docs/python_strategyies/105
7 跨品种套利(期货)量化策略源码 https://www.myquant.cn/docs/python_strategyies/106
8 跨期套利(期货) 量化策略源码 https://www.myquant.cn/docs/python_strategyies/107
9 日内回转交易(股票)量化策略源码 https://www.myquant.cn/docs/python_strategyies/108
10 做市商交易(期货) 量化策略源码 https://www.myquant.cn/docs/python_strategyies/109
11 海龟交易法(期货) 量化策略源码 https://www.myquant.cn/docs/python_strategyies/110
12 行业轮动(股票) 量化策略源码 https://www.myquant.cn/docs/python_strategyies/111
13 机器学习(股票) 量化策略源码 https://www.myquant.cn/docs/python_strategyies/112

《算法导论 第三版英文版》_高清中文版

《深度学习入门:基于Python的理论与实现》_高清中文版

《深入浅出数据分析》_高清中文版

《Python编程:从入门到实践》_高清中文版

《Python科学计算》_高清中文版

《深度学习入门:基于Python的理论与实现》_高清中文版

《深入浅出数据分析》_高清中文版

《Python编程:从入门到实践》_高清中文版


策略研究品价差套策(源码)相关推荐

  1. 2014年最新720多套Android源码2.0GB免费一次性打包下载

    之前发过一个帖子,但是那个帖子有点问题我就重新发一个吧,下面的源码是我从今年3月份开始不断整理源码区和其他网站上的android源码,目前总共有720套左右,根据实现的功能被我分成了100多个类,总共 ...

  2. wemall商城15套商用源码即将开放免费下载,点击预约

    2013年,wemall商城1.0开源版上线,开源中国PHP商城类下载量第一. 2015年,wemall商城开启商业版步伐,wemall分销商城.多店铺分销.水果版等15套商城系统接连上线. 8年来, ...

  3. 源码交流网,提供50套商业源码免费下载

    源码交流网,提供50套商业源码免费下载 源码交流网(www.100oa.com).改版后重出江湖,50套精品商业源码免费下载,您要做的,就是把本广告在各大技术论坛上发10个同样的广告,好消息让更多的人 ...

  4. 拿走不谢!4100套iOS源码,40G!

    我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 大家好,我是免费哥. 今天给大家带来的学习资料是:4100套iOS源码 资料 ...

  5. 四千GB电脑技术高清视频教程和23万套各类源码模板

    四千GB电脑技术高清视频教程和23万套各类源码模板 1.二千多GB各类电脑技术高清视频教程 2.17万本电脑技术相关的电子书籍 3.23万套各类VIP源码.商业源码.泄密源码.破解源码 4.一万多套淘 ...

  6. 150套JSP源码--免费下载

    150套JSP源码 免费下载  适用于学习 百度云下载地址: 链接:https://pan.baidu.com/s/1J7-O9k6o8f5dFh71VzCpuA  提取码:zb7p 如下载地址失效请 ...

  7. [转]2014年最新810多套android源码2.46GB免费一次性打包下载

    转载自:http://www.eoeandroid.com/thread-497046-1-1.html 感谢该博客主人无私奉献~~ 下面的源码是从今年3月份开始不断整理源码区和其他网站上的安卓例子源 ...

  8. 转--2014年最新810多套android源码2.46GB免费一次性打包下载

    转载自:http://www.eoeandroid.com/thread-497046-1-1.html 感谢该博客主人无私奉献~~ 下面的源码是从今年3月份开始不断整理源码区和其他网站上的安卓例子源 ...

  9. 最新释梦ds网八套模板源码+教程 全部功能可用

    介绍: 修复发卡功能,分站功能,解密文件. 完全无加密     内涵八套模板      带有详细安装步骤,经测试全部功能可用      1.可作为个人发卡网使用      2.分站功能可能,无限分站 ...

最新文章

  1. 云主机和物理机PK图
  2. hdu2.1.1 最小公倍数
  3. Erlang vs Java memory architecture (zz)
  4. 【C#公共帮助类】JsonHelper 操作帮助类, 以后再也不用满地找Json了,拿来直接用...
  5. quagga源码分析--路由信息处理zebra-rib
  6. 计算机应用计算机电算化题库,2014年浙江省会计电算化客观题题库
  7. 【英语学习】【WOTD】sleuth 释义/词源/示例
  8. Python框架篇之Django(路由系统URL、视图函数views)
  9. summernote使用实例,解决了小图标方框显示问题
  10. H3C防火墙——回环流量问题(内网终端通过外网IP访问内部服务器)
  11. QuickPart : 用户控件包装器 for Office SharePoint Server 2007
  12. Codeforces 631E 斜率优化
  13. 数字图像处理 冈萨雷斯 资源下载
  14. 预览psd文件的看图器_消防安全防火知识手抄报,涂色线稿多彩设计,word自带PSD排版...
  15. iOS动画和特效(二)UIKit力学行为
  16. 如何控制局域网网速_无线路由器如何限制局域网网速 无线路由器限制局域网网速方法【介绍】...
  17. webapp(WebRoot)目录下的jsp访问不了webapp目录的css文件的问题解决
  18. 清除Svchost.exe
  19. 字节跳动,野心十足,十年有可能打败腾讯成为第二个互联网巨头吗?
  20. 8月11日 网工学习 APR协议 传输层协议 TCP UDP 数据封装转发全过程

热门文章

  1. PostgreSQL pg_resetwal处理机制
  2. 基于JAVA外卖点餐系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  3. h5调用安卓原生相机、相册、电话、录像,且兼容安卓系统8.0
  4. 数字电路-与或非门应用
  5. 电脑怎么批量把flac转换为mp3
  6. 中国信通院陈金桥:5G全面商用,今年底用户数有望冲击1000万
  7. ANR机制及问题分析
  8. 2022-2028年中国航空轮胎行业市场发展潜力及投资风险预测报告
  9. Gis之矢量图与栅格图的区别
  10. Mac电脑用的DVD刻录软件