发布于vn.py社区公众号【vnpy-community】

 

原文作者:用Python的交易员 | 发布时间:2020-07-20

 

和其他软件项目一样,vn.py同样也是建立在诸多前人工作的成果之上,这些项目中凝结的知识和经验给了vn.py许多启发,有些是技术选型的方向,有些是新功能的灵感,也有些是社区运营的思路。

最近几个月在vn.py社区中,开始出现越来越多围绕系统架构和技术体系方面的讨论,而不仅仅是过去围绕策略和交易相关的话题,可能也意味着我们社区成员的整体水平进入了一个更高的阶段?知其然后,更希望知其所以然。

满足用户需求一向是我们的主要工作目标,所以接下来打算做一个围绕vn.py技术架构相关的系列文章,希望能帮助大家去了解其中的诸多技术细节。作为第一篇文章,本文中我们先来看看两个影响了vn.py主要技术选型的项目:MatlabAlgoTrader

 

Matlab

 

官网:www.mathworks.com

类型:商业软件

国家:美国

语言:Java/C++/Fortran

启发:编程语言

Matlab本身相信不用我过多介绍了,我本人在大学金融工程课程中唯一接触过的编程语言就是Matlab。几乎所有的作业论文,不管是数据建模、期权定价还是策略回测,基于Matlab的矩阵运算功能以及内置金融模块,都能够相当方便的完成出来,多花点心思的话还能进一步开发出定制化的UI界面工具(如下图所示):

description

2012年毕业进入工作后,却很快发现了Matlab的一个重要短板:针对数值运算设计的Matlab在事件驱动编程方面相当薄弱,无法作为实盘交易程序的核心。搞定了数据分析,搞定了策略回测,但却倒在了最终的实盘交易。

无奈之下只能去寻找新的编程语言,筛选标准其实还是围绕着Matlab的特点:

  • 动态语言:写起来方便,不用声明变量,更不用手动管理内存;
  • 数学运算:原生支持矩阵计算,同时语法尽可能接近Matlab;
  • 应用模块:越多越好,尤其是金融和投资方面的成熟应用案例;
  • 通用语言:支持主要的编程范式,尤其得能实现事件驱动编程。

筛了一圈,最后找到得答案就是Python。

首先各方面功能足够强大:矩阵运算有numpy,时序分析有pandas,图形界面有PyQt,API封装有boost.python(现在是pybind11了)。总之只要学一种编程语言,就能搞定量化交易种的所有环节

其次,Python在基础语法上和Matlab近似度很高,对于我本人这种非专业IT出身的量化交易员,只要不怕麻烦不怕累,花点时间硬着头皮学一两个月,很快就能入门上手开始出点成果。不必像C++学个半年,还在和各种野指针、内存泄露的问题上来回折腾不可自拔。

当然Matlab后来也推出了专门针对量化交易的工具库Trading Toolbox,对接了一系列主流的数据和交易系统,例如下图中对接CQG系统的交易流程图:

description

但可惜还是没有对接国内的CTP柜台。

 

AlgoTrader

 

官网:www.algotrader.com

类型:商业软件(曾是开源软件)

国家:瑞士

语言:Java

启发:系统架构

差不多10年前,欧美量化交易领域曾经有三个非常知名的开源项目,分别是Marketcetera、AlgoTrader、TradeLink(详细介绍可以参考《Quantitative Trading》这本书,同一时间段出版的,也是我本人的量化启蒙书)。随着时间的发展,Marketcetera逐渐没落(已经很久没再看到有什么版本更新或者用户交流了),而AlgoTrader和TradeLink这两家则选择了闭源路线,转型成了商业软件。

AlgoTrader的开发团队主要来自于瑞士,最初也是为了期权波动率交易策略而专门开发。其核心架构如下图所示:

description

基于Java语言开发的AlgoTrader,在系统层面做了非常好的解耦设计:

  • 三层架构

    • 接口层:实时行情、委托交易、历史数据
    • 引擎层:事件处理、算法对冲、风险管理,等等
    • 应用层:量化策略、手动界面、管理工具
    • 每层均为独立的进程
  • 数据通讯

    • 使用RabbitMQ作为消息中间件来实现各层之间的通讯
  • 事件驱动

    • 基于Esper复杂事件处理引擎(CEP)的实时数据驱动

第一次看到AlgoTrader的时候,感觉只有一个:惊艳,然后立马开始学习Java。无奈几个月的学习后,还是只会调用非常基础的库,量化策略相关的代码一点写不出来。尽管主要原因肯定是我的编程水平太差,但长时间投入出不了成果,兴趣和热情逐渐就磨没了,所以AlgoTrader的学习计划,卒。

虽然没能学得会,倒是把AlgoTrader的系统架构深深印在了脑子里,后面在开发vn.py的过程中也采用了同样的三层架构

description

不过由于一些Python语言自身和Java的特性区别,vn.py在细节方面还是做了许多额外修改,比较主要的两个:

  • 各层组件只作为对象存在,在同一进程内避免无谓的网络通讯开销
  • 针对GIL全局锁,开发了单线程的事件驱动引擎保证高效的处理速度

最后,有什么想问的问题或者分享的内容,欢迎在文章下方留言,我们将会随机抽取一位留言者赠送《vn.py全实战进阶 - CTA策略》课程的5折优惠券一张。

 

  

vn.py社区活动公告

上海地区这边写字楼已经允许举办会议活动了,所以这个月底7月26号的社区活动改为线上线下同时进行,这次的主题是vn.py在外盘市场量化策略方面的分享,活动大纲:

  1. 认识外盘市场
    a. 全球期货市场

    b. 港股美股市场

  2. vn.py的解决方案
    a. 交易通道选择

    b. 历史数据服务

    c. CTA趋势策略

    d. 境内外套利交易

  3. 直达期货分享
    a. 外盘经纪业务

    b. 对比IB的优势

报名请扫描图片中的二维码(99元,Elite会员免费参与):

description