python统计套利_统计套利初步尝试——组合建立(一)
近期突发奇想,想对统计套利在商品期货市场的应用进行一些初步尝试,不是什么新方法,如《圣经》中的一句老话:太阳底下没有新鲜事。只希望能抛砖引玉,得到更多前辈的指导。废话不多,直入正题:
一、基本原理
原理很简单,对于服从正态分布的随机序列,两端属于小概率区域,中间属于大概率区域。那么问题就简单了,只需要寻找或构建一个满足正态分布的期货品种或者套利组合,在价格出现在下图灰色区间时介入,在价格回归到白色区域时获利退出。概率分布图组合走势图
二、构建组合
期货市场单一品种容易出现单边走势,并不适合该方法,因此选择利用对冲套利组合。套利很多模式,跨期、跨品种、跨市场皆可。由于数据量庞大,需要借助工具,选择了Python(matlab也可以)。以ag1906和au1906为例,构建基本分析框架代码如下:
import pandas as pd
import numpy as np
import time
import matplotlib.pyplot as plt
from sklearn.linear_model import Lasso,LassoCV,LassoLarsCV
import statsmodels.tsa.stattools as ts
path01=r'file:///D:/chenbin.zeng/privacy/test_data/ag1906.csv'
data01=pd.read_csv(path01,encoding='gb18030',header =0,names =['time','open','high','low','close','volume','oi'],engine='python',sep=',')
path02=r'file:///D:/chenbin.zeng/privacy/test_data/au1906.csv'
data02=pd.read_csv(path02,encoding='gb18030',header =0,names =['time','open02','high02','low02','close02','volume02','oi02'],engine='python',sep=',')
data01['time']=pd.to_datetime(data01['time'])
data01.set_index(data01['time'],inplace=True)
data01=data01.drop(['time'],axis=1)
data02['time']=pd.to_datetime(data02['time'])
data02.set_index(data02['time'],inplace=True)
data02=data02.drop(['time'],axis=1)
data=pd.concat([data01,data02],axis=1)
data=data.dropna(axis=0,how='any')
data['价差']=data['close']-data['close02']
data=data.drop(['open','high','low','volume','oi','open02','high02','low02','volume02','oi02','close','close02'],axis=1)
data=data['2019-01-01':'2019-04-03']
data.index=data.index.strftime('%Y-%m-%d-%H-%M')
mean=data.mean().values
std = data.std().values
def normfun(x,mu,sigma):
pdf = np.exp(-((x - mu)**2)/(2*sigma**2)) / (sigma * np.sqrt(2*np.pi))
return pdf
x=data['价差'].values
y=normfun(x,mean,std)
plt.plot(x,y)
测试结果如下图:
貌似效果不错,但是我们再来看一下该价差的时间的序列图:
data.plot()
可以看出该组合的协整性并不强,因此在组合选择前,我们还需要先做一步协整性检验。
stationary_test_p = ts.adfuller(data['价差'])
print(stationary_test_p)
(-0.47209833187081945, 0.8973472782402288, 16, 31116, {'1%': -3.4305601761006317, '5%': -2.8616328922776977, '10%': -2.5668194437034035}, 100090.26246500436)
可见P值较大,说明该组合并不适合该套利策略。理想的状态应该是非常接近下面这种图形的。这就要看大家构建组合的本事了,而且组合也会具有一定的时效性,一个组合也很难做到长期如此。
三、本章总结
经实践,对于组合选取上的一些个人理解如下:
1、统计套利属于利用大概率赚小钱的策略,因此如何预防黑天鹅,即如何止损,是一个还没有想得太透彻的问题。
2、单一组合套利入场时机出现并不多,为了提高资金利用率应该建立多对套利组合的组合。
3、套利幅度的选取直接关系到套利机会出现次数的频率(幅度越大,频率越小)。为达到总收益最大化,还应对套利幅度进行优化。
4、如果采取高频套利,那么交易成本不容忽视。为保证成交,按市价挂单,来回一轮交易滑点至少在4个点,手续费也是单边交易的两倍。因此,基本要6个点以上的价差才会有利润。如何低成本的减少滑点(。。。请不要告诉我自己搭建物理网络这样的办法,如果有人肯给我融资倒可以考虑考虑)也是目前一个重要挑战。
—————————————————分割线——————————————————
按照上述思路,建立组合并搭建了一个利用API接口的自动交易程序。回测效果还挺满意,不过这种资金曲线什么的太虚了,就不贴出来了。初步准备实盘测试一年。(注:该账号中后续会陆续加入新的策略,因此不能完全反应上诉方案的效果。)2019-03-28~~2019-04-03
python统计套利_统计套利初步尝试——组合建立(一)相关推荐
- python统计套利_统计套利(二),利用协整关系进行配对交易【原文】
之前我们谈到了利用两只股票之间的相关系数进行配对交易,但我们能通过两只相关性较高的股票对之间的差价图看出,相关性高他们之间的价差并不一定会是一个平稳序列,简单来说我们无法利用这个不收敛的价差来进行套利 ...
- split函数python统计英文单词_统计一篇英文文章单词个数,取出出现频次前10的单词(Python实现)...
题目: 用python实现统计一篇英文文章内每个单词的出现频率,并返回出现频率最高的前10个单词及其出现次数. 常规解法 怎么判定单词? 1 不是字母的特殊字符作为分隔符分割字符串 (避免特殊字符的处 ...
- 数据统计 测试方法_统计测试:了解如何为数据选择最佳测试!
数据统计 测试方法 This post is not meant for seasoned statisticians. This is geared towards data scientists ...
- adobe怎么统计字数_统计数据显示,6 月份桌面 Linux 市场份额攀升至历史新高 | Linux 中国...
新的一个月,也带来了网络分析公司 NetMarketshare 的新的 Linux 市场份额统计,它们显示 Linux 和 Ubuntu 的使用量连续第四个月上升. 来源:https://linux. ...
- mysql数据库统计人数_统计人数 数据库
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- python统计套利_清华编程高手尹成带你基于算法实践python量化交易
清华编程高手尹成带你基于算法实践python量化交易 量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种"大概率"事件以制定策 ...
- python词频统计代码_机器学习必备宝典-《统计学习方法》的python代码实现及课件...
<统计学习方法>可以说是机器学习的入门宝典,许多机器学习培训班.互联网企业的面试.笔试题目,很多都参考这本书.本站根据网上资料用python复现了课程内容,并提供本书的代码实现.课件下载. ...
- python 数据分析论文_数据分析-任务:论文作者统计
2.1 任务说明 任务主题:论文作者统计,统计所有论文作者出现评率Top10的姓名: 任务内容:论文作者的统计.使用 Pandas 读取数据并使用字符串操作: 任务成果:学习 Pandas 的字符串操 ...
- python不及格人数_下面 if语句统计“成绩(score)优秀的男生以及不及格的男生”的人数,正确的语句是____________。_学小易找答案...
[多选题]常用的经济结构分析方法有( ) [多选题]计量经济学检验主要是检验模型是否符合计量经济方法的基本假定.检验内容包括( ) [填空题]Python语言是一种解释型 语言,它不需要编译,它的执行 ...
最新文章
- shell脚本将命令的输出结果赋值给变量
- 录音文件下载_音频转文字怎么转?大家都说好用的手机APP:录音转文字助手
- 硬核!一文梳理经典图网络模型
- SpringMVC系列(二): SpringMVC各个注解的使用
- MapReduce V1:Job提交流程之JobTracker端分析
- 【软件开发底层知识修炼】十五 快速学习GDB调试二 使用GDB进行断点调试
- C/C++判断操作系统(Win10,Win8.1WinServer等等)-完整源码及思路
- dd实现Linux转移,linux命令-dd {拷贝并替换}
- 计算机硬件专业知识西瓜视频,2019年中电脑硬件榜单,空调西瓜+电脑助你当个快乐肥宅...
- 计算机应用基础教材提纲,《计算机应用基础》课程教学大纲
- 防止浏览器嗅探音视频--blob对象在audio和video标签中的使用
- 微星小飞机怎么显示帧数?方法介绍
- 输入法里打出特殊符号
- CentOS安全运维检查命令
- 在计算机上配置dns,常见设备和系统上配置DNS的方法DNS服务器 -电脑资料
- 全国青少年软件编程(Scratch)一级2019考试测试卷最后一道编程题!
- ros android 方案,ROS + Android
- 阻塞队列(一):ArrayBlockingQueue
- java中常用的加密工具
- 详解 masm + textpad 编译环境的搭建