近期突发奇想,想对统计套利在商品期货市场的应用进行一些初步尝试,不是什么新方法,如《圣经》中的一句老话:太阳底下没有新鲜事。只希望能抛砖引玉,得到更多前辈的指导。废话不多,直入正题:

一、基本原理

原理很简单,对于服从正态分布的随机序列,两端属于小概率区域,中间属于大概率区域。那么问题就简单了,只需要寻找或构建一个满足正态分布的期货品种或者套利组合,在价格出现在下图灰色区间时介入,在价格回归到白色区域时获利退出。概率分布图组合走势图

二、构建组合

期货市场单一品种容易出现单边走势,并不适合该方法,因此选择利用对冲套利组合。套利很多模式,跨期、跨品种、跨市场皆可。由于数据量庞大,需要借助工具,选择了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统计套利_统计套利初步尝试——组合建立(一)相关推荐

  1. python统计套利_统计套利(二),利用协整关系进行配对交易【原文】

    之前我们谈到了利用两只股票之间的相关系数进行配对交易,但我们能通过两只相关性较高的股票对之间的差价图看出,相关性高他们之间的价差并不一定会是一个平稳序列,简单来说我们无法利用这个不收敛的价差来进行套利 ...

  2. split函数python统计英文单词_统计一篇英文文章单词个数,取出出现频次前10的单词(Python实现)...

    题目: 用python实现统计一篇英文文章内每个单词的出现频率,并返回出现频率最高的前10个单词及其出现次数. 常规解法 怎么判定单词? 1 不是字母的特殊字符作为分隔符分割字符串 (避免特殊字符的处 ...

  3. 数据统计 测试方法_统计测试:了解如何为数据选择最佳测试!

    数据统计 测试方法 This post is not meant for seasoned statisticians. This is geared towards data scientists ...

  4. adobe怎么统计字数_统计数据显示,6 月份桌面 Linux 市场份额攀升至历史新高 | Linux 中国...

    新的一个月,也带来了网络分析公司 NetMarketshare 的新的 Linux 市场份额统计,它们显示 Linux 和 Ubuntu 的使用量连续第四个月上升. 来源:https://linux. ...

  5. mysql数据库统计人数_统计人数 数据库

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  6. python统计套利_清华编程高手尹成带你基于算法实践python量化交易

    清华编程高手尹成带你基于算法实践python量化交易 量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种"大概率"事件以制定策 ...

  7. python词频统计代码_机器学习必备宝典-《统计学习方法》的python代码实现及课件...

    <统计学习方法>可以说是机器学习的入门宝典,许多机器学习培训班.互联网企业的面试.笔试题目,很多都参考这本书.本站根据网上资料用python复现了课程内容,并提供本书的代码实现.课件下载. ...

  8. python 数据分析论文_数据分析-任务:论文作者统计

    2.1 任务说明 任务主题:论文作者统计,统计所有论文作者出现评率Top10的姓名: 任务内容:论文作者的统计.使用 Pandas 读取数据并使用字符串操作: 任务成果:学习 Pandas 的字符串操 ...

  9. python不及格人数_下面 if语句统计“成绩(score)优秀的男生以及不及格的男生”的人数,正确的语句是____________。_学小易找答案...

    [多选题]常用的经济结构分析方法有( ) [多选题]计量经济学检验主要是检验模型是否符合计量经济方法的基本假定.检验内容包括( ) [填空题]Python语言是一种解释型 语言,它不需要编译,它的执行 ...

最新文章

  1. 使用reflector对.NET反编译
  2. linux 增加 ip_conntrack_max 造成 内核内存问题
  3. 禁用人脸识别四个月后,旧金山人证明了他们的先见之明
  4. 23个经典JDK设计模式(转)
  5. SRM6.1安装配置指南
  6. c语言程序设计编程解读,C语言程序设计第三次实验报告解读
  7. 为KindEditor编辑器中的内容增加样式,使得自定义前台页面显示效果与编辑器效果一致
  8. oracle 数据库备份
  9. 风控趋势|隐私计算几大落地场景与三方数据市场
  10. NYOJ96 - n-1位数
  11. 原生JavaScript事件详解
  12. Javascript之旅——第九站:吐槽function
  13. jsp实现购物车结算页面
  14. 推荐一些小而美的互联网公司
  15. 计算年龄:DATEDIF函数
  16. 财报出炉,阿里大涨的背后 —— 凤凰终将涅槃?
  17. Unity Kinect运行 FaceTracking 场景 c++ Runtime Error
  18. 三、Eureka注册与发现之Eureka Comsumer
  19. windows远程命令执行
  20. EI收录中国期刊目录 各个版本的含义及收录例子-12年初版

热门文章

  1. 5. 下面c语言的标识符中,哪个是不合法__________.,C语言作业题(浙大版)
  2. html怎么设置荧光边框,前端|网页制作秘密武器 之发光边框
  3. 软件学院宣传视频制作日志——演员招募阶段
  4. 想知道Amazon在德国缴多少税吗?
  5. 基于Android智能电视的应用程序的布局
  6. Neither ‘setup.py‘ nor ‘pyproject.toml‘ found
  7. el-select样式两种修改方式index.html或popper-append-to-body加popper-class
  8. java反射invoke方法的使用
  9. 文艺复兴+英国现代教育
  10. mac画图工具 OmniGraffle (三)基础绘图和模具