跨品种套利策略:

本策略根据计算滚动的.过去的30个bar的均值正负0.5个标准差得到布林线
并在最新价差上穿上轨来做空价差,下穿下轨来做多价差
并在回归至上下轨水平内的时候平仓

获取数据:

# 获取两个品种的收盘价时间序列closes=ContextInfo.get_market_data(['close'], stock_code=ContextInfo.trade_pair, period = ContextInfo.period, count=31)if closes.empty:return

制作指标:

up_closes = closes[ContextInfo.trade_pair[0]]['close']
down_closes = closes[ContextInfo.trade_pair[1]]['close']
# 计算价差
spread = up_closes[:-1] - down_closes[:-1]
#spread=0
# 计算布林带上下轨
up = np.mean(spread) + 0.5 * np.std(spread)
down = np.mean(spread) - 0.5 * np.std(spread)
# 计算价差
if (up_closes[-1] is None) or (down_closes[-1] is None):spread_now=0
else:spread_now = up_closes[-1] - down_closes[-1]

策略代码:

#coding:gbk
'''
回测模型示例(非实盘交易策略)本策略根据计算滚动的.过去的30个bar的均值正负0.5个标准差得到布林线
并在最新价差上穿上轨来做空价差,下穿下轨来做多价差
并在回归至上下轨水平内的时候平仓
'''import numpy as npdef init(ContextInfo):ContextInfo.trade_pair=['rb00.SF','hc00.SF']ContextInfo.position_tag = {'long':False,'short':False}         #初始化持仓状态ContextInfo.set_universe(ContextInfo.trade_pair) # 设置标的期货合约对应股票池ContextInfo.accid = '103427'def handlebar(ContextInfo):index = ContextInfo.barposbartimetag = ContextInfo.get_bar_timetag(index)print(timetag_to_datetime(bartimetag,'%Y-%m-%d %H:%M%S'))# 获取两个品种的收盘价时间序列closes=ContextInfo.get_market_data(['close'], stock_code=ContextInfo.trade_pair, period = ContextInfo.period, count=31)if closes.empty:returnup_closes = closes[ContextInfo.trade_pair[0]]['close']down_closes = closes[ContextInfo.trade_pair[1]]['close']# 计算价差spread = up_closes[:-1] - down_closes[:-1]#spread=0# 计算布林带上下轨up = np.mean(spread) + 0.5 * np.std(spread)down = np.mean(spread) - 0.5 * np.std(spread)# 计算价差if (up_closes[-1] is None) or (down_closes[-1] is None):spread_now=0else:spread_now = up_closes[-1] - down_closes[-1]#无交易时若价差上(下)穿布林带上(下)轨则做空(多)价差position_up_long = ContextInfo.position_tag['long']position_up_short = ContextInfo.position_tag['short']if not position_up_long and not position_up_short:if spread_now > up:#开空code1,开多code2sell_open(ContextInfo.trade_pair[0],1,ContextInfo,ContextInfo.accid)buy_open(ContextInfo.trade_pair[1],1,ContextInfo,ContextInfo.accid)ContextInfo.position_tag['short'] = Trueif spread_now < down:#开多code1,开空code2buy_open(ContextInfo.trade_pair[0],1,ContextInfo,ContextInfo.accid)sell_open(ContextInfo.trade_pair[1],1,ContextInfo,ContextInfo.accid)ContextInfo.position_tag['long'] = True# 价差回归时平仓elif position_up_short:if spread_now <= up:#平空code1,平多code2buy_close_tdayfirst(ContextInfo.trade_pair[0],1,ContextInfo,ContextInfo.accid)sell_close_tdayfirst(ContextInfo.trade_pair[1],1,ContextInfo,ContextInfo.accid)ContextInfo.position_tag['short'] = False# 跌破下轨反向开仓if spread_now < down:#开多code1,开空code2buy_open(ContextInfo.trade_pair[0],1,ContextInfo,ContextInfo.accid)sell_open(ContextInfo.trade_pair[1],1,ContextInfo,ContextInfo.accid)ContextInfo.position_tag['long'] = Trueelif position_up_long:if spread_now >= down:#平多code1,平空code2sell_close_tdayfirst(ContextInfo.trade_pair[0],1,ContextInfo,ContextInfo.accid)buy_close_tdayfirst(ContextInfo.trade_pair[1],1,ContextInfo,ContextInfo.accid)ContextInfo.position_tag['long'] = Falseif spread_now > up:#开空code1,开多code2sell_open(ContextInfo.trade_pair[0],1,ContextInfo,ContextInfo.accid)buy_open(ContextInfo.trade_pair[1],1,ContextInfo,ContextInfo.accid)ContextInfo.position_tag['short'] = TrueContextInfo.paint('short_spread',int(spread_now > up),-1,0,'noaxis')ContextInfo.paint('long_spread',int(spread_now < down),-1,0,'noaxis')

国信证券学习系列(7)相关推荐

  1. 国信证券学习系列(4)

    机器学习篇章,本章不过时脚本小子,机器学习最核心的是机器,是模型. 学习,无非就是找些有的没的因子扔进去,但说实话,机器学习,太过容易过拟合,容易无效化.回测好看的一笔,实盘垃圾的不行. 获取训练数据 ...

  2. 国信证券学习系列(1)

    软件不错,满足了我对股票,期货,期权的全部要求.而且数据可以提供下载,简直没话说了. 数据清洗问题,我其实很早以前就在思考这个问题,回测,到底在测什么?什么样的数据可以用来回测?什么样的回测才是好的回 ...

  3. 国信证券学习系列(6)

    行业轮动策略: 本策略每隔1个月定时触发计算1000能源(399381.SZ).1000材料(399382.SZ).1000工业(399383.SZ).1000可选(399384.SZ).1000消费 ...

  4. 国信证券学习系列(5)

    网格策略,号称胜率100%的策略,只要扛得住回撤,怎么说呢,它包含了最简单的思想,大道至简,真的是没有什么复杂的,原理清晰,思路简单.可以明确知道我挣的是那笔钱,为什么获利?为什么亏损?可能唯一要关注 ...

  5. 国信证券学习系列(3)

    日内回转策略:做T策略 择时交易: if date[-8:-3] != '14:55':if macd > 0 and macd_pre < 0:# 根据MACD>0则开仓,小于0则 ...

  6. 国信证券学习系列(2)

    获取指数池: def init(ContextInfo):#设置股票池stock300 =ContextInfo.get_stock_list_in_sector('沪深300')ContextInf ...

  7. 国信证券学习系列(8)

    我为什么要用国信,就是这个原因,可以做期权,期货,股票,etf,可转债的回测.满足了我所有的需要,我要做指数增强.通常的做法是股票和期货.但实际上,股票和期权做组合,成本更低. (1)认沽期权和认购期 ...

  8. 数据结构学习系列文章合集

    数据结构学习系列文章目录 前言 1.稀疏数组和队列 稀疏数组和二位数组的转换 数组队列的实现 环形队列的介绍与实现 2.链表 单链表的增.删.改.查 总结 前言 学习数据结构记录,作为自己的笔记,同时 ...

  9. OpenCV学习系列教程第五篇:测试和提高代码的效率

    Opencv-Python学习系列教程第五篇 来自opencv-python官方学习文档,本人谨做翻译和注释,以及一些自己的理解 本文由作者翻译并进行代码验证,转载请注明出处~ 官方文档请参阅:htt ...

最新文章

  1. c# 第六课 linq
  2. VMWare ubuntu虚拟机异常关闭打开报错:该虚拟机似乎正在使用中(下班虚拟机最好关闭,免得又异常关闭导致问题)(千万别在虚拟机下win+L锁屏,解锁后就打不开虚拟机了)
  3. 【枭·音频】声随意动——浅谈《暗影火炬城》声音设计
  4. 第20讲:代理的基本原理和用法
  5. java跳转画面后画面白了_如何跳转指定页面后再次跳转到另一页面或原来的页面...
  6. ArcGIS生成根据点图层生成等值面并减小栅格锯齿的操作步骤
  7. 安卓9.0马达框架分析
  8. 苹果x人脸识别突然失灵_教你解决mac电脑键盘失灵的问题
  9. ECCV 2020,一种灵活高效的权重生成网络框架
  10. 一键打造全栈式小程序开发者!
  11. GeoTools——shp转geojson
  12. chromebook开发php,玩转chromebook
  13. 20 道 Redis 面试题,面试官能问的都被我找到了
  14. php如何判断一个类是否存在,PHP利用判断类是否存在函数class_exists用法的简单示例...
  15. Linux下安装NFS共享文件资源
  16. 18个Java开源CMS系统一览
  17. linux发送短信的脚本,shell监控系统资源并通过短信报警的脚本
  18. Java 版spark Streaming 维护kafka 的偏移量
  19. sql语句中的or用法(及与and和in区别)
  20. 破解58同城字体反爬

热门文章

  1. PAT-2019年冬季考试-乙级-7-3String复读机
  2. 云时代下,传统和新型存储的博弈已经开始
  3. 关于R语言显示“Warning message: In normalizePath(path.expand(path), winslash, mustWork) : path[1]=”问题的解决办法
  4. 01- NumPy 数据库 (数据库)
  5. 资本资产定价模型与证券市场线
  6. Matlab:数学之美--绘制分形图形
  7. 【每天学点Python】案例三:BMR计算器
  8. MIT的《深度学习》精读(17)
  9. javascript中childNodes与children的区别
  10. 地图分幅编号C 语言编程,地图分幅编号实验报告讲解