Jupyter Notebook实现从IB接口历史数据获取,写入数据库,策略回测和实盘交易
刚好有个同学问怎么实现IB盈透历史数据获取,和策略回测和实盘交易。想着熟悉vnpy2.0操作,就用Jupyter Notebook都是跑了一边。VNPY2.0的整体架构设计很有扩展性,而且调用也比起v1.0先进清晰很多,引擎加载调用非常方便。讲讲注意点:IB盈透接口历史数据大多是要收费订阅的,如果收费会有报错信息提示,这里找个免费的作为使用。另外vnpy是按照最大6个月历史数据设计的。数据库定义有
使用Jupyter NoteBook进行IB查询和交易,以及使用算法交易示例
在搞好IB盈透接口后,试了下客户端交易,但是最终目的还是使用程序化交易。发现vnpy已经提供的Script_engine来支持Jupyter NoteBook 交易的,而且非常方便调用。这里就用写了基于VNPY包,用代码实现IB盈透下的查询和交易,和一个TWVP算法交易。Script_engine的大多操作都是针对main_engine的封装,类似的逻辑,其他交易相关App,也可以用类似方法调用,
从统计学来看,有限样本的回测结果能说明些什么
最近在看一本友人推荐的陈博士的《算法交易: 致胜策略和原理》一书,虽然书名很神棍,其实内容是很实际结合理论的,不少内容击中了我现在困惑的痛点。本文是学习书中《1.3 统计学在回测程序上的应用:假设检验》一节的理解,对概率论很久没研究,如果理解错误请指教。在交易策略设计优化完成后,都会放入一个测试集进行回测,但是不论怎么样收集,用于回测的数据集是始终是有限的,而且,无论我们计算的统计指标是什么,诸如
一个关于风险和投资组合的内部知识分享文档
最近在小组内部做了一次关于风险和投资组合的内部知识分享, 主要使用了PPT和Jupyter Notebook。把PPT和Jupyter Notebook都传到我的Github 分享,有兴趣可以看看https://github.com/BillyZhangGuoping/MarketDataAnaylzerbyDataFrame/tree/master/Risk%20and%20Portfolio%
VNPY 价差交易模块的使用学习
本文主要说说VNPY的价差模块的简单使用,至于自开发算法什么暂不涉及。VNPY提供价差交易模块,其实还是挺好用的,先说说使用,再说说代码。进入之后的界面如下图:使用思路:- - 定义价差组合:定义一组价差组合,可以是一个主动腿,一个或者多个被动腿 |- -指定针对价差组合算法,系统默认是Sniper交易算法,VNPY提供算法模板,可以自己新增 &nb
变点理论CUSUM在择时交易中的应用
之前看到一篇文章,变点理论CUSUM在量化交易中;列了一堆数据和公式,说结果不错。链接如下:https://max.book118.com/html/2017/0726/124391946.shtm 或者这个,就是整理版,有很详细的公式推导,不过代码写的不清不楚的,应该没写完。https://wizardforcel.gitbooks.io/python-quant-uqer/134.html 花
变点理论CUSUM在择时交易中的应用
之前看到一篇文章,变点理论CUSUM在量化交易中;列了一堆数据和公式,说结果不错。链接如下:https://max.book118.com/html/2017/0726/124391946.shtm 或者这个,就是整理版,有很详细的公式推导,不过代码写的不清不楚的,应该没写完。https://wizardforcel.gitbooks.io/python-quant-uqer/134.html 花
我的GitHub地址
https://github.com/BillyZhangGuoping/MarketDataAnaylzerbyDataFrame
VNPY参数优化功能v1版本中的一个更新参数批量生成方法
VNPY的参数优化功能,是策略优化的重要功能。主要就是按照范围生成批量的参数组合,然后成批跑完,选出最优的方法的。在ctaBaclesting.py中的addParameter方法提供了批量导入参数的方法。就是这样一个参数一个参数填入。addParameter会按照1为初始,5为介绍,2为步进,生成[1,3,5]参数队列setting.addParameter('barMins',
VNPY参数优化功能v1版本中的一个更新参数批量生成方法
VNPY的参数优化功能,是策略优化的重要功能。主要就是按照范围生成批量的参数组合,然后成批跑完,选出最优的方法的。在ctaBaclesting.py中的addParameter方法提供了批量导入参数的方法。就是这样一个参数一个参数填入。addParameter会按照1为初始,5为介绍,2为步进,生成[1,3,5]参数队列setting.addParameter('barMins',
为VNPY的K线序列管理工具ArrayManager增加对数收益率队列
在做策略建模的时候,经常需要把K线转换为可以正态分布数据,这样可以使用那些很牛吼吼的数学模型进行挖掘。实现很简单c = ln(t1/t0)像相信研究可以看看这个https://www.zhihu.com/question/30113132在VNPY的K线序列管理工具ArrayManager,可以加入下面代码。按照属性返回百分比序列@property def percentLog(sel
为VNPY的K线序列管理工具ArrayManager增加对数收益率队列
在做策略建模的时候,经常需要把K线转换为可以正态分布数据,这样可以使用那些很牛吼吼的数学模型进行挖掘。实现很简单c = ln(t1/t0)像相信研究可以看看这个https://www.zhihu.com/question/30113132在VNPY的K线序列管理工具ArrayManager,可以加入下面代码。按照属性返回百分比序列@property def percentLog(sel
Mann-Kendall算法用于金融品种长周期趋势判断和变点检测,以及策略思路
之前在研究用机器学习库Sci-kit做计算指标(特征值)和金融产品趋势(分类)关系学习的时候,对于如何判断趋势,是直接使用当前之后5根k线close值做线性回归,如果拟合的P值可信的直线斜率向上则是上涨,斜率向下则是下跌。具体代码可以见之前我之前blog。在vnpy有个网友讨论,为什么用这样方法判断趋势的时候;我做了些搜索,才发现判断一组时序队列的趋势并不是一个简单的事情,虽然人眼看很直接,但是数
Mann-Kendall算法用于金融品种长周期趋势判断和变点检测,以及策略思路
之前在研究用机器学习库Sci-kit做计算指标(特征值)和金融产品趋势(分类)关系学习的时候,对于如何判断趋势,是直接使用当前之后5根k线close值做线性回归,如果拟合的P值可信的直线斜率向上则是上涨,斜率向下则是下跌。具体代码可以见之前我之前blog。在vnpy有个网友讨论,为什么用这样方法判断趋势的时候;我做了些搜索,才发现判断一组时序队列的趋势并不是一个简单的事情,虽然人眼看很直接,但是数
另一个视角,使用对数化数据,计算非价位指标
之前在做时序数据整理时候学习时候,发现很多代码都行情数据做了对数化处理。学习了下,发现是另一个视角。https://www.zhihu.com/question/20831196/answer/16324269知乎查了,这个答案比较全。在很多计算中(例如做极大似然的时候),取对数可以将本来需要做的乘法变成加法;取对数可以避免数值巨大,计算机难于处理的困难;与对数有关的数据可以反映出物理量尺度的变化
另一个视角,使用对数化数据,计算非价位指标
之前在做时序数据整理时候学习时候,发现很多代码都行情数据做了对数化处理。学习了下,发现是另一个视角。https://www.zhihu.com/question/20831196/answer/16324269知乎查了,这个答案比较全。在很多计算中(例如做极大似然的时候),取对数可以将本来需要做的乘法变成加法;取对数可以避免数值巨大,计算机难于处理的困难;与对数有关的数据可以反映出物理量尺度的变化
如果使用Joinquant做实盘行情数据,有一个比较大bug的要注意
在我之前文章中,讲了用Joinquant做数据源,链接:http://blog.itpub.net/22259926/viewspace-2643621/ ,但是在我用作数据源做实盘交易的时候, 发下一个很危险的bug,更新下。如下图,如果运行行情数据下载时候,是在交易日中的话比如2点半,如果填写的endDate是当天,那么返回数据会自动填充到下午3点交易时候。
如果使用Joinquant做实盘行情数据,有一个比较大bug的要注意
在我之前文章中,讲了用Joinquant做数据源,链接:http://blog.itpub.net/22259926/viewspace-2643621/ ,但是在我用作数据源做实盘交易的时候, 发下一个很危险的bug,更新下。如下图,如果运行行情数据下载时候,是在交易日中的话比如2点半,如果填写的endDate是当天,那么返回数据会自动填充到下午3点交易时候。
利用Scikit-learn机器学习库的特征分类进行vnpy期货量化交易(代码)
代码如下,回测效果很好,test集合也基本100%中,但是总有哪里不对劲。各位帮忙看看。我也放在我的GitHub里面。已经加了注释,运行时候会有warning 信息。# encoding: UTF-8 import warnings warnings.filterwarnings("ignore") from pymongo&nbs
利用Scikit-learn机器学习库的特征分类进行vnpy期货量化交易(简介)
这个算是一个小坑,因为我也还在学习过程中,代码慢慢完善。一开始在python 2.7,vnpy 1.9.2环境中实现。后面在python 3.7也基本实现,增加支持了xgboost。代码写的繁杂,多多抱歉。首先说说Scikit-learn是Python语言中专门针对机器学习应用而发展起来的一款开源框架,相对于现在深度学习库tensorflow,由于Scikit-learn本身不支持深度学习,也不支