[转载]Python量化交易平台开发教程系列0-引言

原文出处:http://vnpy.org/2015/03/04/20150304_Python%E9%87%8F%E5%8C%96%E4%BA%A4%E6%98%93%E5%B9%B3%E5%8F%B0%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8B%E7%B3%BB%E5%88%970-%E5%BC%95%E8%A8%80/

 

为什么用Python来开发量化交易平台

目前本人所在的公司一共有三款平台,分别基于C++, C#和Python。其中C#和Python平台都是由交易员开发;C++平台则是由专职IT团队作为一个通用平台开发,内部组件进行了封装(交易员不可见),对外提供行情、交易的API用于策略开发(除了C++ 外也包括C#和Python可用的API)。

理论上这款C++平台应该是最为稳定和强大的,由专业人士设计,同时采用封装核心,暴露API,支持组件模块开发,linux服务器运行的形式。

但是在实际运用中,交易团队表达了一个强烈的观点:这个平台实在是太难用了!

  1. 由IT团队设计的API功能非常强大,但是也太过繁琐,导致学习曲线极为陡峭。
  2. 为了追求速度,没有设计原生GUI(本来就为了在Linux服务器上跑),但是今天绝大多数的非超高频(追求微秒级延迟的那种)交易策略,几乎都需要有人实时监控,你总不能让交易员盯着个linux shell上不断print出来的内容或者盘中去翻日志吧,这个运维风险就扛不起。尽管可以作为插件的形式开发GUI,但C++本身的GUI开发还是较为复杂的,非专业IT很难搞的定。
  3. 交易员团队的需求变化很快,通常等不及IT去排班开发,最好是今天收盘有个点子,明天开盘就能开始接实盘数据验证,没问题后天就能上实盘。比如去年四季度的分级基金套利机会就是稍纵即逝,那段时间如果能快速开发完成一套专门的监控套利系统,抓住的利润绝对会比用excel接wind数据来的多不少。
  4. 某些业务逻辑确实太过复杂,交易员想解释让IT明白,无奈IT并不是太擅长某些金融领域(比如期权高频套利的整个业务框架),交流成本太高。

用web开发来做比较的话,C++实现的量化交易平台像是java在网络开发领域的地位,强大(几乎无所不能)、稳定(无数大公司的支持),但是也很臃肿(你一两个人开发试试)。

以上的原因促成了我坚持使用Python开发一个交易平台,这款平台的定位好比于node.js为前端工程师(用户体验的直接缔造者)提供了一个简洁又不失强大的后端平台,主要的目标用户群是中小型量化团队(根据我的经验,绝大部分的券商自营、期货资管和基金量化部门都不大)、专业的交易员团队(可以雇得起少量专职IT)以及一部分打算从互联网领域转行来的程序猿们(Python在互联网公司用的不少)。

Python在量化平台开发方面的优缺点

优点

  1. 动态语言的快速开发特性,封接口有boost.Python,写GUI有PyQt,时间序列有numpy,等等,几乎你想干的事都有现成的库可以用,这里吐槽下公司大牛自己写C++里的简单移动平均(SMA)算法,确实比常规实现快不少,但似乎对pnl没什么直接帮助。
  2. 学习成本低,这点算是个共识了吧?
  3. 真需要低延迟的时候,胶水语言很容易通过其他语言拓展:cython, ctypes, boost.Python等等。
  4. 运行速度足够快,也许和C++比起来确实慢了不少,但是就我的经验来看,这点速度延迟对90%的策略pnl毫无影响。

缺点

  1. GIL,该死的全局锁导致Python无法有效利用多核CPU的性能,尽管可以通过拓展绕过去,但还是没有其他语言原生多线程利用多核的方案来的简便。
  2. 没有静态类型检查,重构的时候确实有点痛苦,不过一个良好的编程范式可以有效解决这个问题。
  3. 不适合用来搞超高频策略(追求微秒级延迟的差异),得承认这点Python确实搞不过C++。常规基于TICK级数据的策略没问题。

为什么会有这个系列

2015年的春节期间突然萌发了启动一个开源量化交易平台开发框架项目的想法,原因包括:

  1. 国内很多的机构和个人量化投资者,在受够了一些商业软件的束缚后(TB、金字塔等)想基于柜台API进行直接开发,然后在C++的.h头文件、网上一些不成体系的开发指南、不知道如何构建程序核心架构等等问题中赚的一头雾水后放弃。
  2. 国外有相当多类似的项目,比如AlgoTrader、Tradelink、Marketcetera等等开源交易平台有着大量的用户和活跃的社区。目前国内据我所知只有海风的AT平台项目(基于C#),QuantBox项目当前更多只是一个柜台API的统一化封装(当然封装的非常漂亮,有兴趣的建议直接看看源代码)。
  3. 在本人的整个求学经历中,发现最佳的学习方式之一就是自己当老师,当你试着把某种知识教给别人时,你对这种知识的掌握会更加细致深入。
  4. 抛砖引玉,本人是交易员出身,编程算是半路出家,不专业的地方很多,通过这个项目和业内人士多多交流。
  5. TB之类的商业软件不算,国内目前最大量化交易社区应该是C#(交易)和Matlab(研发),而能兼顾交易和研发的Python社区居然十分弱小,实在是不能忍。

授人以鱼不如授人以渔,目前这个项目vn.py已经发布在了github上,包含了基于华宝证券LTS API的Python封装和事件驱动引擎,鱼竿准备好了,剩下的就是学习如何钓鱼。一方面也是因为自己之前在学习过程中遇到的最大问题之一就是目前国内缺乏一个成体系的量化平台开发教程,所以发布项目后的下一步工作就是编写这个教程系列。

系列内容安排

整个系列文章目前预计包含的内容如下:

  1. 类CTP交易API的工作原理
  2. 类CTP交易API的Python封装设计
  3. vn.py项目中API封装的编译,其他交易API的封装
  4. 事件驱动引擎原理和使用
  5. 华宝LTS交易平台开发:登陆、订阅市场行情
  6. 华宝LTS交易平台开发:交易功能
  7. 华宝LTS交易平台开发:持仓、交易、下单监控

联系作者

本人的知乎号:用Python的交易员,可以通过知乎私信联系到我,一些和开源项目、教程相关的问题交流也会发在知乎上。

转载于:https://www.cnblogs.com/MMonica/p/5188218.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在 Ubuntu 12.04 Server 中安装图形用户界面

From: http://blog.163.com/crazy20070501126/blog/static/12865946520128301144531/ 使用ubuntu server安装lamp主机非常的方便,只要在安装系统的步骤中选择就是了 。但是很多时候我需要在图形界面下管理主机更加方便。今天的教程就是教大家安装图形界面。 【方法…

[Redux/Mobx] 在redux中,什么是store?

[Redux/Mobx] 在redux中,什么是store? 单一数据源,整个应用数据保存的地方 个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

flask-whooshalchemy需要注意的一点

在学习mega—tutorial时全文搜索模块遇到了问题,那就是使用全文搜索查询出来的数据为空的列表,输出了sql语句后发现where后没有条件,困扰了许久,后来才发现是自己不细心,在进行全文索引时应该将数据库中的数据删除&…

[Redux/Mobx] Redux由哪些组件构成?

[Redux/Mobx] Redux由哪些组件构成? (这道题应该本意是Redux由哪些部分组成) State:Redux中的数据Reducer:这是Redux的核心,内部处理接受到action后到返回新的state的逻辑;reducer可以进行嵌套,一个store…

linux下添加用户的命令--useradd

From: http://hi.baidu.com/amenmen/item/010142991caf6bd87b7f0101 给你一整比较完整的方案你试下,看有用没。。 [rootlinux ~]# useradd [-u UID] [-g initial_group] [-G other_group] \ > -[Mm] [-c 说明栏] [-d home] [-s shell] username 参数&…

Maven实战(Maven+Nexus建立私服【Linux系统】)

准备工作 下载及配置Maven3:http://www.cnblogs.com/leefreeman/archive/2013/03/05/2944519.html 下载Nexus:http://nexus.sonatype.org/downloads/ 安装配置Nexus Nexus提供了两种安装方式,一种是内嵌Jetty的bundle,只要你有JRE…

[Redux/Mobx] 在React中你是怎么对异步方案进行选型的?

[Redux/Mobx] 在React中你是怎么对异步方案进行选型的? 小项目使用简单的redux-thunk方案,增加的代码量极少,只有两个api,上手成本低大项目使用基于redux-saga的dva.js,它简化了redux-saga的操作,使用上更加直观&…

青少年如何使用 Python 开始游戏开发

From: http://www.oschina.net/translate/beginning-game-programming-for-teens-with-python 这是一篇由教程团队成员Julian Meyer发表的文章,一个12岁的python开发人员。你可以在Google和Twitter上找到他。 你可曾想过如何创建视频游戏吗?它不像你想象的那么复杂…

[Redux/Mobx] Redux中异步action和同步action最大的区别是什么?

[Redux/Mobx] Redux中异步action和同步action最大的区别是什么? 同步action:执行了dispatch函数之后,对应的reducer纯函数立即得到执行,reducer执行完了之后,state立即就改变了,此时用store.getState函数&…

求解ax + by = c 这类方程

基础知识: 1.对于任意的axbyc, 如果我们知道有一组解x0, y0; 那么 x1 x0kb(bb/gcd(a,b)), y1 y0-ka(aa/gcd(a,b)); 求解ax by c 的过程如下: 1.首先我们利用Egcd求出axbyg(g gcd(a,b))的解。 利用此算法我们可以求出三个数g, x, y 2.然后…

ubuntu server修改系统时区和系统时间

From: http://gaoke0820.blog.163.com/blog/static/2166496520121118113743252/ 修改系统时区: sudo nano /etc/timezone 输入:Asia/Shanghai 也可以使用以下命令打开交互式界面来更改系统时区: sudo dpkg-reconfigure tzdata 修改系统时间&…

Vue3中的混入(mixins)

本文主要介绍Vue3中的混入(mixins)。 目录 一、在普通写法中使用混入:二、在setup写法中使用混入: 混入是Vue中一种用于在组件中共享可复用功能的特性。在Vue 3中,混入的使用方式有所改变。 一、在普通写法中使用混入…

[Redux/Mobx] redux它的三个原则是什么?

[Redux/Mobx] redux它的三个原则是什么? 单一数据源: 整个应用的只有一个store,store的state存在于唯一的object tree上state只读:state不可操作,要修改state,需要触发action,让reducer函数中返回一个全新…

android 打电话

startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:xxxxxxxxxxx")));转载于:https://www.cnblogs.com/hsji/p/5192191.html

[Redux/Mobx] redux-saga和redux-thunk有什么本质的区别?

[Redux/Mobx] redux-saga和redux-thunk有什么本质的区别? saga 自己基本上完全弄了一套 asyc 的事件监听机制。虽然好的一方面是将来可以扩展成 worker 相关的模块,甚至可以做到 multiple threads 同时执行,但代码量大大增加。如果只是普通的…

RTSP协议

From: http://www.cnblogs.com/Jimmly/archive/2009/07/27/1531999.html RTSP是由Real network 和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议。 实时流协议(RTSP)建立并控制一个或几个时间同步的连续流媒体,如音频和…

[Redux/Mobx] 在redux中,什么是reducer?它有什么作用?

[Redux/Mobx] 在redux中,什么是reducer?它有什么作用? reducer的作用 : 根据 action 对象的type 来更新状态. reducer的工作方式 : 接收一个 state 参数, 作为初始的 state 接收一个action对象, 在函数体中用 switch 语句 判断 action 的ty…

win7 下的 cmdhere 及其他

From: http://hi.baidu.com/su_xue_2008/item/80aa62d01455b9bf33db9099 对xp命令行熟悉的朋友都知道xp下有个小工具叫cmdhere. 它给文件夹右键菜单加上了一个"cmdhere" 选项, 点击即可打开控制台, 并且控制台的当前位置, 已经是右键点击的文件夹位置. 它只是一个很小…

CSS3 动画 思维导图

思维导图在新窗口打开浏览 转载于:https://www.cnblogs.com/weaming/p/5193044.html

[Redux/Mobx] 什么是redux?说说你对redux的理解?有哪些运用场景?

[Redux/Mobx] 什么是redux?说说你对redux的理解?有哪些运用场景? Redux是一个数据管理的库,它除了将数据存储在单一数据源中之外,还确定了变更数据、读取数据的方式,以此来明确了数据的来源,方…