博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
配对(套利)交易之二,符合配对规则回测
阅读量:4294 次
发布时间:2019-05-27

本文共 1455 字,大约阅读时间需要 4 分钟。

最初是计划使用股票进行测试的,之前写的策略也大多是基于股票的,但发现米框目前已经不支持股票卖空了,(2年前有这个功能的).所以又修改为期货的版本.可是呢,米框对期货的支持真的太弱了,回测框架各种报错,还都是完全看不懂的报错,提示信息没啥参考意义.只能通过调整时间区间,找到合适的测试区间来完成回测.坦率讲,只能借鉴下思路.

上一篇文章提到过,目前大部分回测,其实只做到了 "y=x"的水平,包括掘金量化提供的官方教程.实际这种价差概率出现非常小的.大部分都是y=ax+b的形式.

思路如下:

筛选有协整关系股票1,2

price_1

price_2

使用线性回归LinearReg模型

y_predict=LinearReg().fit(price_1,price_2).predict(price_1)

y_predict是使用线性回归预测股票2的价格(对应price_2)

可以得到残差e=diff=y-y_predict

残差符合正态分布,0均值,所以将"y-y_predict"整体看做一个组合(或一个投资标的),按照低买高卖的原则操作

主要纠结点在于:这里的买卖,对应了原始股票(期货)1,2的什么操作,这是需要思考的(也就是应该买那个,卖哪个)

定义:diff=y-y_predict

定义上下界:

up=diff.mean()+diff.std()

down=diff.mean()-diff.std()

操作:高于上界买入,低于卖出

 

假如低于下界:

应当买入组合(y-y_predict)=>(price_2-(a*price_1+b))=>(以价格price_2买入1份股票2 + 以价格price_1卖出a份的股票1-b截距项)

所以:买入实际应当买入2.卖出1,那么截距如何处理?考虑到我们实际买卖过程中,只能操作股票1和股票2,操作不了其他了,所以截距应当算作diff的一部分,

也就是说:真实diff=y-ax=price_b-a*price_a=原始diff+b

那么买入数量呢?由于每一份组合的消耗资金为abs(原始diff+b),所以份数num=cash/abs(原始diff+b)

所以买入股票1:1*num

卖出股票2:a*num

对以上整体重新梳理下:

第一步:协整关系股票1,2

第二步:用price_2=y,price_1=X,线性回归计算系数a,截距b

第三步:计算diff序列:price_2-a*price_1,计算上下界:up=diff.mean()+std(),down=diff.mean()-diff.std()(std的倍率自己控制)

第四步:对每日价格计算diff,比对up和down,低于down则,买入num份2,卖出num*a份1.高于up则卖出num份2,买入num*a份1(和买入相反),num的计算为cash/价格diff(其实价格的diff就是一份组合消耗的现金净值,考虑卖出得到的钱和买入钱的对冲效果,abs是考虑到保证金的消耗,即使卖出得到了钱,但是也需要消耗保证金,所以卖出也是有限制的,并未无限卖出无限得到现金)

代码和回测:

套利可以做事情其实还是挺多的,

优化性的:动态判断2只股票(期货)是否存在协整关系,存在构造组合,低买高卖.并且要持续检查协整关系,一旦关系不在成立并且超过一定时间则清空组合.避免黑天鹅带来的大回撤.

并且基于均值回归也可以结合网格(个人认为网格才是所有策略or指标中最为犀利的)进行操作.高抛低吸.

 

转载地址:http://yhyws.baihongyu.com/

你可能感兴趣的文章
一路编程,一路迷茫,一路醒悟,接着迷茫,再醒悟再迷茫
查看>>
架构师修炼之道
查看>>
学习java与.net二者互通对比你从中获取的知识更多
查看>>
JAVA WebService开发入门引入
查看>>
教机器去感受:表情符号&深度学习
查看>>
facebook分享购物的代码测试
查看>>
ASP.NET(C#)常用数据加密和解密方法汇总
查看>>
Java连接各种数据库的实例
查看>>
怎样保持一个良好的开发状态
查看>>
Eclipse控制台中的中文输出乱码问题
查看>>
tomcat环境中file.encoding的修改方法
查看>>
mybatis association 复杂类型联合操作
查看>>
CSS图标ICO参考
查看>>
ueditor1_4_3-utf8-jsp 配置实现上传图片的功能
查看>>
大学生应该常去的网站
查看>>
Java与C/C++异构平台的本地通信(Java也可以操作硬件)
查看>>
美程序员低薪雇中国人编程 自己上班网购看视频
查看>>
为你推荐10款开发常用的代码编辑器
查看>>
Ubuntu linux下的命令大全
查看>>
解析敏捷软件开发知识体系 分享国外敏捷转型实践案例
查看>>