github上面也有几千的星了。 说它是交易系统,因为它包括了几个部分:

VNPY支持包括CTP, 以及其他多交易接口(比特币,IB, 以及其他的交易接口)的数据平台。 这个特点应该是Vnpy在数据平台上, 支持各类交易应用(application): CTA策略回测以及实盘交易, 参数优化(optimization)风险控制, 等等
支持实时的数据采集(data record)入库。
所以花了1个月时间, 学习了vue.js,做起页面感觉简单多了。 vue.js用来做前端, flask+python作为后端,提供REST服务接口。 这样的框架,现在就简化很多了。 上几个新的界面,大家看看。 争取在干1个月,可以上线了。

但是如果真正要把vnpy集成到一个完善的交易系统里面来, vnpy目前的功能还是有些略显不足。
说到它的优点, 当然就是可以支持多个交易接口(包括CTP),多账户。 这些底层的交易接口封装, 以及数据的实时收集,触发等机制和特点, 对于大多数没有能力或者没有时间独立开发的交易员,以及小团队而言, 是至关重用的。
最近跟一个知乎朋友聊了一下,觉得之前的架构(纯的bootstrap+css,没有js系统)有点局限, 添加一个界面,需要很多时间。

首先, vnpy使用pyqt包做的前端GUI,从应用上有比较多的局限。 通常我们的交易服务器是部署在云端的服务器, pyqt的GUI无法使用。 最好的解决方案是基于网页的管理dashboard。 其次, 目前vnpy版本1.6没有支持多账户绑定。 比如说CTP,我们通常需要Simnow,以及其他几个实盘交易的账户同时在线, 这样可以利用simnow跑模拟策略, 利用实盘账户跑交易。

另外, 我们除了普通的针对单一资产的CTA策略以外,还有很多多资产的交易策略, 比如:

pairs trading strategy:需要针对两个不同的资产的价格关系,交易两者的价差spread。 例如我们可以利用伦敦铜和沪铜的价差来进行套利。在交易系统的实现上, 这个套利机制比较麻烦, 我们需要同时联通IB账户获得伦敦铜的交易接口, 而且同时联通CTP接口交易沪铜 。 Vnpy提供了很好的机制,可以做到多接口同时联通。 但是在策略回测,以及交易上, vnpy的回测系统略显单薄期权交易:这里就涉及到多资产同时计价,交易。 多窗口和时间周期交易: Alexander Elder在《交易为生》的书中的3窗口交易系统, 是一个非常好的例子。 交易一个资产如股指期货, 通常会利用天图或周图来判断大盘的趋势, 用1小时-天图来判断中期的震荡强弱, 用5min-15min图来判断买入卖出点。所以我们需要在交易系统里面实现n个不同周期bar的策略触发机制。

基于上述的理解和需求, 希望实现如下几个核心的功能:

包括交易服务器,运算和分析服务器,与数据库,以及网页服务器分离支持实时数据采集(利用vnpy的data recording功能)支持多资产,多窗口的复杂策略回测,优化,以及实盘交易

尽可能利用vnpy的底层数据框架,连接多交易接口, 构建统一的数据平台将vnpy目前主要为单机运行设计的架构, 扩展成为一个可以支持云端部署的多机架构。
我花了将近几个月时间, 构架了一个基于vnpy的网页前端框架,实现了一些基本的功能。 先上几个图:

Fig1: 同时联通了3个账户(CTP SimNow, 以及两个OkCoin的账户)

Fig 2: 通过OkCoin账户来捕捉比特币BTC实时行情。

这里的实现跟vnpy1.6的实现不同。 vnpy的实时行情订阅是绑定在接口上的,比如订阅螺纹钢1710合约, 在vnpy只能捆绑在CTP上, 而CTP连接在制定的CTP账号(只有一个)上面。 我们这里可以实现针对账号的合约订阅: 同时有多个CTP账号的话, 我们需要指出在哪个账号上订阅rb1710。 如下是我们订阅合约的设置文件:

Fig 3: 策略回测:

目前已经实现了多资产, 多窗口的策略回测。 Fig 3是针对单一资产(螺纹钢)的一个策略模拟。 Fig 4是多周期策略(5min, 30min, 120min)的趋势跟踪策略模拟。

另外,我们做策略研发中,需要考虑各个合约的交易成本,滑点, 最小合约数量,margin ratio等等。同时, 我们可能需要在不同的设置下, 进行测试。例如,通常我们可以用标准的滑点(1跳)来做初步的策略研发, 当策略表现不错, 我们可能需要用更极端的滑点(2-3跳)来测试策略。 所以, 这里我也实现了一个合约的交易信息管理界面,可以实现多组交易设置, 针对不同阶段(研究, 模拟,实盘)的交易需要。

目前我一个人在独立开发, 有感兴趣的量化牛人, 欢迎联系我一起开发。

编辑于 2017-08-07