[rar文件] Quicklib程序化交易Python框架和工具2.08
QuickLib开发的初衷 我在基金公司长期开发量化平台的过程中积累了不少心得和体会,也在CTP的开发群中认识了很多朋友,其中包括了本身就在基金公司任职并尝试开发的程序员,有丰富经验的量化交易平台开发者,也有为了满足自己交易进行开发的爱好者。他们大多数是用C++进行底层开发,有一些人会用JAVA、C#、Python、R、matlab等。但大多数人都必须自己从事底层开发,开发底层的周期是如此漫长,以至于很多自由交易者在开发过程中不得不脱离了策略本身。很多都是在开发底层1年后才开始做策略。开发时常常并没有考虑封装,和没有考虑封装使得策略和底层代码分离的重要性。导致即使开发完成了也留有一大堆BUG,在后期开发策略的过程中不断修复BUG。甚至有朋友学习开发半年后,由于最初架构设计不完善,需要推倒重来。开发者们都认为C++开发的程序运行效率较高,经常为了优化微乎其微的性能,耗费几天的时间。但在我看来,他们并不知道什么样的性能才能满足自己的要求,导致了过度优化。 对真正专业机构来说,除了高频策略以外,也很少直接用C++做策略开发的。通常是C++由程序员做底层的封装,然后由一种比较容易上手的编程语言做策略开发,这是比较科学高效的开发策略模式。而有一种不太科 学的模式是,使用C++开发策略,比如基金公司有10个研究员每个人提出10个策略,交给专业的程序员做开发,那么程序员就需要开发100个策略,还需要后期不断根据要求修改,这样的开发模式简直是噩梦。 重复造轮子是没有意义的,为了要让交易者可以尽快进入到开发策略,我设计了Quicklib系列,其中包括: 期货CTP PYTHON框架 A股 CTP2 PYTHON框架 集监控和管理与一身的监控器库,可以实现跨平台,并计划提供多种编程语言的支持 资管平台的期货交易库 2017.1.2 QuickLib作者: QQ:147423661 林 --------------------------------------------------------------- (1)指标模块可以自己写,也可以直接引用第三方库,例如talib 下载地址 https://pypi.python.org/pypi/TA-Lib (2)回测模块,不是本库的重点,符合就和目前的文华财经,TB等软件没区别了。但可以采用2种方式实现策略的回测。 1>采用第三方平台回测,再用QuickLib实现策略和获得优化的参数,可以做到多品种高效率运行。 2>自己编写回测模块,这个比较简单,具体方式是,在原有逻辑基础上,一条条读取历史行情记录(例如.txt,xls,csv文件,淘宝有卖,也可以用本库的TICK数据收集例子收集),回测完毕,再加载到其它第三方Python图形库(例如商业绘图库 DISLIN、网络图NetworkX、图形库Mahotas)中显示,例如坐标Z表示收益,X表示参数1,Y表示参数2. DISLIN下载:https://en.wikipedia.org/wiki/DISLIN (3)pandas 将是我们最敢兴趣的主要库。它包含高级的数据结构和精巧的工具,使得在Python中处理数据非常快速和简单。pandas建造在NumPy之上,它使得以NumPy为中心的应用很容易使用。 例如: * 支持自动或明确的数据对齐的带有标签轴的数据结构。这可以防止由数据不对齐引起的常见错误,并可以处理不同来源的不同索引数据。 * 整合的时间序列功能。 * 以相同的数据结构来处理时间序列和非时间序列。 * 支持传递元数据(坐标轴标签)的算术运算和缩减。 * 灵活处理丢失数据。 * 在常用的基于数据的数据库(例如基于SQL)中的合并和其它关系操作。 《使用Python Pandas处理亿级数据》 http://www.justinablog.com/archives/1357 (4)其它常用库 python数据挖掘领域工具包 http://qxde01.blog.163.com/blog/static/67335744201368101922991/ Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy。其中Numpy是一个用python实现的科学计算包。包括: 一个强大的N维数组对象Array; 比较成熟的(广播)函数库; 用于整合C/C++和Fortran代码的工具包; 实用的线性代数、傅里叶变换和随机数生成函数。 SciPy是一个开源的Python算法库和数学工具包,SciPy包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。其功能与软件MATLAB、Scilab和GNU Octave类似。 Numpy和Scipy常常结合着使用,Python大多数机器学习库都依赖于这两个模块,绘图和可视化依赖于matplotlib模块,matplotlib的风格与matlab类似。Python机器学习库非常多,而且大多数开源,主要有: 1. scikit-learn scikit-learn 是一个基于SciPy和Numpy的开源机器学习模块,包括分类、回归、聚类系列算法,主要算法有SVM、逻辑回归、朴素贝叶斯、Kmeans、DBSCAN等,目前由INRI 资助,偶尔Google也资助一点。 项目主页: https://pypi.python.org/pypi/scikit-learn/ http://scikit-learn.org/ https://github.com/scikit-learn/scikit-learn 2. NLTK NLTK(Natural Language Toolkit)是Python的自然语言处理模块,包括一系列的字符处理和语言统计模型。NLTK 常用于学术研究和教学,应用的领域有语言学、认知科学、人工智能、信息检索、机器学习等。 NLTK提供超过50个语料库和词典资源,文本处理库包括分类、分词、词干提取、解析、语义推理。可稳定运行在Windows, Mac OS X和Linux平台上. 项目主页: http://sourceforge.net/projects/nltk/ https://pypi.python.org/pypi/nltk/ http://nltk.org/ 3. Mlpy Mlpy是基于NumPy/SciPy的Python机器学习模块,它是Cython的扩展应用。包含的机器学习算法有: l 回归 least squares, ridge regression, least angle regression, elastic net, kernel ridge regression, support vector machines (SVM), partial least squares (PLS) l 分类 linear discriminant analysis (LDA), Basic perceptron, Elastic Net, logistic regression, (Kernel) Support Vector Machines (SVM), Diagonal Linear Discriminant Analysis (DLDA), Golub Classifier, Parzen-based, (kernel) Fisher Discriminant Classifier, k-nearest neighbor, Iterative RELIEF, Classification Tree, Maximum Likelihood Classifier l 聚类 hierarchical clustering, Memory-saving Hierarchical Clustering, k-means l 维度约减 (Kernel) Fisher discriminant analysis (FDA), Spectral Regression Discriminant Analysis (SRDA), (kernel) Principal component analysis (PCA) 项目主页: http://sourceforge.net/projects/mlpy https://mlpy.fbk.eu/ 4. Shogun Shogun是一个开源的大规模机器学习工具箱。目前Shogun的机器学习功能分为几个部分:feature表示,feature预处理,核函数表示,核函数标准化,距离表示,分类器表示,聚类方法,分布,性能评价方法,回归方法,结构化输出学习器。 SHOGUN 的核心由C++实现,提供 Matlab、 R、 Octave、 Python接口。主要应用在linux平台上。 项目主页: http://www.shogun-toolbox.org/ 5. MDP The Modular toolkit for Data Processing (MDP) ,用于数据处理的模块化工具包,一个Python数据处理框架。 从用户的观点,MDP是能够被整合到数据处理序列和更复杂的前馈网络结构的一批监督学习和非监督学习算法和其他数据处理单元。计算依照速度和内存需求而高效的执行。从科学开发者的观点,MDP是一个模块框架,它能够被容易地扩展。新算法的实现是容易且直观的。新实现的单元然后被自动地与程序库的其余部件进行整合。MDP在神经科学的理论研究背景下被编写,但是它已经被设计为在使用可训练数据处理算法的任何情况中都是有用的。其站在用户一边的简单性,各种不同的随时可用的算法,及应用单元的可重用性,使得它也是一个有用的教学工具。 项目主页: http://mdp-toolkit.sourceforge.net/ https://pypi.python.org/pypi/MDP/ 6. PyBrain PyBrain(Python-Based Reinforcement Learning, Artificial Intelligence and Neural Network)是Python的一个机器学习模块,它的目标是为机器学习任务提供灵活、易应、强大的机器学习算法。(这名字很霸气) PyBrain正如其名,包括神经网络、强化学习(及二者结合)、无监督学习、进化算法。因为目前的许多问题需要处理连续态和行为空间,必须使用函数逼近(如神经网络)以应对高维数据。PyBrain以神经网络为核心,所有的训练方法都以神经网络为一个实例。 项目主页: http://www.pybrain.org/ https://github.com/pybrain/pybrain/ 7. BigML BigML 使得机器学习为数据驱动决策和预测变得容易,BigML使用容易理解的交互式操作创建优雅的预测模型。BigML使用BigML.io,捆绑Python。 项目主页: https://bigml.com/ https://pypi.python.org/pypi/bigml http://bigml.readthedocs.org/ 8. PyML PyML是一个Python机器学习工具包, 为各分类和回归方法提供灵活的架构。它主要提供特征选择、模型选择、组合分类器、分类评估等功能。 项目主页: http://cmgm.stanford.edu/~asab/pyml/tutorial/ http://pyml.sourceforge.net/ 9. Milk Milk是Python的一个机器学习工具箱,其重点是提供监督分类法与几种有效的分类分析:SVMs(基于libsvm),K-NN,随机森林经济和决策树。它还可以进行特征选择。这些分类可以在许多方面相结合,形成不同的分类系统。 对于无监督学习,它提供K-means和affinity propagation聚类算法。 项目主页: https://pypi.python.org/pypi/milk/ http://luispedro.org/software/milk 10. PyMVPA PyMVPA(Multivariate Pattern Analysis in Python)是为大数据集提供统计学习分析的Python工具包,它提供了一个灵活可扩展的框架。它提供的功能有分类、回归、特征选择、数据导入导出、可视化等 项目主页: http://www.pymvpa.org/ https://github.com/PyMVPA/PyMVPA 11. Pattern Pattern是Python的web挖掘模块,它绑定了 Google、Twitter 、Wikipedia API,提供网络爬虫、HTML解析功能,文本分析包括浅层规则解析、WordNet接口、句法与语义分析、TF-IDF、LSA等,还提供聚类、分类和图网络可视化的功能。 项目主页: http://www.clips.ua.ac.be/pages/pattern https://pypi.python.org/pypi/Pattern 12. pyrallel Pyrallel(Parallel Data Analytics in Python)基于分布式计算模式的机器学习和半交互式的试验项目,可在小型集群上运行,适用范围: l focus on small to medium dataset that fits in memory on a small (10+ nodes) to medium cluster (100+ nodes). l focus on small to medium data (with data locality when possible). l focus on CPU bound tasks (e.g. training Random Forests) while trying to limit disk / network access to a minimum. l do not focus on HA / Fault Tolerance (yet). l do not try to invent new set of high level programming abstractions (yet): use a low level programming model (IPython.parallel) to finely control the cluster elements and messages transfered and help identify what are the practical underlying constraints in distributed machine learning setting. 项目主页: https://pypi.python.org/pypi/pyrallel http://github.com/pydata/pyrallel 13. Monte Monte ( machine learning in pure Python)是一个纯Python机器学习库。它可以迅速构建神经网络、条件随机场、逻辑回归等模型,使用inline-C优化,极易使用和扩展。 项目主页: https://pypi.python.org/pypi/Monte http://montepython.sourceforge.net 14. Orange Orange 是一个基于组件的数据挖掘和机器学习软件套装,它的功能即友好,又很强大,快速而又多功能的可视化编程前端,以便浏览数据分析和可视化,基绑定了 Python以进行脚本开发。它包含了完整的一系列的组件以进行数据预处理,并提供了数据帐目,过渡,建模,模式评估和勘探的功能。其由C++ 和 Python开发,它的图形库是由跨平台的Qt框架开发。 项目主页: https://pypi.python.org/pypi/Orange/ http://orange.biolab.si/ 15. Theano Theano 是一个 Python 库,用来定义、优化和模拟数学表达式计算,用于高效的解决多维数组的计算问题。Theano的特点: l 紧密集成Numpy l 高效的数据密集型GPU计算 l 高效的符号微分运算 l 高速和稳定的优化 l 动态生成c代码 l 广泛的单元测试和自我验证 自2007年以来,Theano已被广泛应用于科学运算。theano使得构建深度学习模型更加容易,可以快速实现下列模型: l Logistic Regression l Multilayer perceptron l Deep Convolutional Network l Auto Encoders, Denoising Autoencoders l Stacked Denoising Auto-Encoders l Restricted Boltzmann Machines l Deep Belief Networks l HMC Sampling l Contractive auto-encoders Theano,一位希腊美女,Croton最有权势的Milo的女儿,后来成为了毕达哥拉斯的老婆。 项目主页: http://deeplearning.net/tutorial/ https://pypi.python.org/pypi/Theano 16. Pylearn2 Pylearn2建立在theano上,部分依赖scikit-learn上,目前Pylearn2正处于开发中,将可以处理向量、图像、视频等数据,提供MLP、RBM、SDA等深度学习模型。Pylearn2的目标是: Researchers add features as they need them. We avoid getting bogged down by too much top-down planning in advance. A machine learning toolbox for easy scientific experimentation. All models/algorithms published by the LISA lab should have reference implementations in Pylearn2. Pylearn2 may wrap other libraries such as scikits.learn when this is practical Pylearn2 differs from scikits.learn in that Pylearn2 aims to provide great flexibility and make it possible for a researcher to do almost anything, while scikits.learn aims to work as a “black box” that can produce good results even if the user does not understand the implementation Dataset interface for vector, images, video, ... Small framework for all what is needed for one normal MLP/RBM/SDA/Convolution experiments. Easy reuse of sub-component of Pylearn2. Using one sub-component of the library does not force you to use / learn to use all of the other sub-components if you choose not to. Support cross-platform serialization of learned models. Remain approachable enough to be used in the classroom (IFT6266 at the University of Montreal). 项目主页: http://deeplearning.net/software/pylearn2/ https://github.com/lisa-lab/pylearn2 还有其他的一些Python的机器学习库,如: pmll(https://github.com/pavlov99/pmll) pymining(https://github.com/bartdag/pymining) ease (https://github.com/edx/ease) textmining(http://www.christianpeccei.com/textmining/) 更多的机器学习库可通过https://pypi.python.org/pypi查找。 2017.1.22 QucikLib MD2.08 TD2.07 (1)将数据存储结构由hash更改为STL的hashmap,不必再主动设置缓冲区大小,性能几乎没改变,内存占用减小。 (2)从配置文件读取合约订阅,请等待下个版本更新。请使用订阅函数订阅合约 2016.12.20 QuickLib 2.07 MD增加了回调MD_OnForQuote,增加了查询价格SubscribeForQuoteRsp方法 TD增加了回调TD_OnMaxOrderVolume,增加了QryQueryMaxOrderVolume方法 整理了读取交易时间,行情时间读取的字符打印排列,更加美观 2016.12.16 QuickLib 2.05 修复BUG,部分系统MD错误的BUG,增加了TD部分的回调功能,更改并整理了MD消息驱动的回调方式。 2016.12.1 QuickLib期货行情2.02 本例子增加了4个方法 API版本 GetApiVersion() 交易日 GetTradingDay() 注册行情服务器地址 RegisterFront() 注册名字服务器 RegisterNameServer() 2016.11.26 QuickLib 2.00 增加了多个回调函数,见例子“QuickLibConsoleDemo读配置文件订阅行情下单交易例子(暂时取消线程池,改用函数订阅)” 2016.11.16 QuickLib 1.68d 提升了性能,10个品种订阅,打印每笔数据的情况下,酷睿双核E8400 CPU占用在0.4%,由于i7 4790K性能是E8400 的4倍多,估计在0-0.2%之间CPU占用率。打印到屏幕占用大量CPU,如果关闭打印,估计10个合约订阅的CPU占用接近0%。 本例是对QuickLib例子"QuickLibConsoleDemo读配置文件订阅行情下单交易例子(暂时取消线程池,改用函数订阅)"(本例采用TICK驱动) 的修改,改为订阅函数进行订阅,原例读取配置文件进行订阅的方法等待下一版本升级 2016.11.15 更改了Python例子的代码, 即将QuickLibConsoleDemo读配置文件订阅行情下单交易例子改为QuickLibConsoleDemo读配置文件订阅行情下单交易例子(采用线程池) 采用了线程池实现策略计算 2016.11.14 QucikLib(期货行情交易接口)1.68 增加了Tick事件驱动的支持,根据OnTick方法判断Tick是否到来,若无新Tick,则一致阻塞状态, 此方法提高了性能。 2016.11.8 QuickLib(期货行情交易接口) 1.67 增加了查询合约保证金比例的方法 QryExchangeMarginRate 增加了按资金比例下单的方法InsertOrderByRate 2016.11.7 QuickLib(期货行情交易接口) 1.66 增加了3个方法 (1)取消订阅(行情库) UnSubscribeMarketData (2)行情登录(行情库) Login (3)退出行情登陆(行情库) Logout 版本是测试版,请评估下python取得行情是否正常 2016.11.5 QuickLib(期货行情交易接口) 1.65 增加了拒收数据时间的设置方法,在相关行情调用的例子中补充的该方法的使用示例 更新了文档 2016.10.29 QuickLib(期货行情交易接口)1.63 优化了代码,大幅提升了性能 取消了历史遗留的品种订阅数限制 完全永久免费 2016.10.16 Quicklib(期货行情交易接口)1.62 删除了2个不成熟的例子,并简化了配置文件中的字段 2016.9.21 Quicklib(期货行情交易接口) 1.61 (1)更新库兼容性 (2)增加了查询持仓的函数方法(包括 今日多单、非今日多单、今日空单、非今日空单、总多单、总空单持仓) (3)增加了控制台动态更新时打印显示持仓的方法 2016.9.19 Quicklib(期货行情交易接口)1.60 (1)增加了《QuickLibConsoleDemo查询持仓和可用资金,权益的例子》 (2)增加了方法 QryBalance(查询动态权益,静态权益) (3)增加了防范QryAvailable查询可用资金 Quicklib(期货行情交易接口)1.51 修复了调用MA,内存占用不断增加的问题 Quicklib(期货行情交易接口)1.50 更新了官方的库支持,修正了登录初始化市场行情时,偶尔退出的错误。 Quicklib(期货行情交易接口)1.42 修复了setup.py 的参数,使得运行setup.bat可以正常编译成.exe成程序,可顺利运行 1.编译环境: (1)Python2.7,我在Python2.7.6版本下测试无错误。 (2)PyQT4,我使用的是PyQt4.11 for Py2.7 x32。这个是界面程序(有对话框的例子引用了Qt库,必须安装才能编译;控制台例子不需要安装这个) (3)pywin32-210.win32-py2.7 (p2exe) (4)wingide5.1.8 这个是IDE工具编辑器 (5)Python(x,y)2.7.6这个是插件集合,注意要和Python2.7.6版本一致。 2.文件说明: (1)QuickLibDemo.py是期货订阅和交易例子的源代码文件,其他.py文件是引用的库文件 可直接在控制台或pyhton环境运行该脚本(QuickLibDemo.py)或编译成可执行文件(QuickLibDemo.exe) (2)“make_exe编译成应用程序.bat”可生成可执行程序QuickLibDemo.exe,可以在开盘时间直接运行。非开盘时间运行提示出错。可以使用计划任务-》新建基本计划任务在开盘时间定时开启(适合日内,高频等交易)。若采用多日的价格数据可改代码,取消收盘后退出代码,持续运行。并将价格数据时间序列保持在内存中。 (3)生成二进制可执行文件(.exe)在QuickLib-20160605类似的文件夹中。 (4)2016.7月以后注意官方网站http://www.quicklib.cn 的库函数和说明文档的更新,会增加支持各周期的价格数据的调用,以及直接各种指标类的直接调用。 (5)其中止损函数,指标函数、周期价格调用函数 版本为演示,请等待后续版本封装完成 (6) QuickLibSimple.py是例子的主程序,可以在python环境下作为脚本运行。 (7)运行make_exe.bat批处理调用p2exe将QuickLibDemo.py编译成QuickLibDemo.exe 的Windows 32位应用程序,并打包发布在QuickLib_20160618这样格式的文件夹内。直接拷贝该文件夹到其他Windows环境可直接运行无需安装Python
用户评论