vnpy源码阅读学习(1):准备工作
vnpy源码阅读学习第一篇>
目标
- 通过阅读vnpy,学习量化交易系统的一些设计思路和理念。
- 通过阅读vnpy学习python项目开发的一些技巧和范式
- 通过vnpy的设计,可以用python复现一个小型简单的量化交易系统
- 看看是否可以用java或者.net做一个类似的量化交易框架
准备工作
在阅读所有的源码之前,我们先查找一下前人做过的一些工作。比如关于vnpy的源码阅读,评价,工作原理。避免我们走弯路。我找到了一下文档。做一下记录,留作备用。
其中vn.py源代码解读部分有比较详尽的解释,但是缺乏一个系统的概述,另外解读不成体系。等学习到具体的模块的时候,再去结合学习吧。现在先阅读vnpy 架构设计文档 对vnpy的总体结构有一个深入的了解。
目录结构
我们先把源码的目录结构罗列出来整理下源码的目录结构,方便我们宏观上熟悉项目。
+circleci 一个yml的配置文件,搁置
+github 一些github的约定的md文件,搁置
+ci 搁置
+docs 文档文件夹,先阅读下,避免采坑
+examples
+test 放置了单元测试文件,搁置
+vnpy 这里是vnpy的重点,是所有的类库文件
经过对上述目录结构整理以后,我们把重点放在一下几个目录
+docs 文档文件夹,先阅读下,避免采坑
+examples
+vnpy 这里是vnpy的重点,是所有的类库文件
而研究的顺序就是先读读文档,了解和熟悉下vnpy,然后再通过examples中的代码,启动vnpy,跟着程序的运行,我们深入了解vnpy。
跟着入口来
通过对目录结构和文档的阅读,我们大概知道examples里面放置着多种调用vnpy或者调用vnpy某些模块的代码。而我们需要做的就是找到这些代码,跟着这些代码梳理清楚vnpy的脉络。
我们首先找到的是 /examples/vn_trader/run.py 这个文件从名字上,我们就可以从名字上猜测是启动vntrade的入口程序,找到一个线头,才能跟着梳理整条线索。
run.py中粗略一看密密麻麻一大堆代码,我们把注释代码清理以后,达到以下代码:
from vnpy.event import eventengine from vnpy.trader.engine import mainengine from vnpy.trader.ui import mainwindow, create_qapp from vnpy.gateway.femas import femasgateway from vnpy.gateway.deribit import deribitgateway from vnpy.app.option_master import optionmasterapp def main(): #创建pyqt界面 qapp = create_qapp() #事件引擎 event_engine = eventengine() #主引擎 main_engine = mainengine(event_engine) #增加网关引擎 从名字上看应该是飞马数据 main_engine.add_gateway(femasgateway) main_engine.add_gateway(deribitgateway) #这个看着像给主引擎配置选型 main_engine.add_app(optionmasterapp) #启动主窗口,并且配置事件引擎和主引擎 main_window = mainwindow(main_engine, event_engine) main_window.showmaximized() qapp.exec() if __name__ == "__main__": #入口的启动 main()
上面的代码整理:
创建pyqt的界面=》创建事件引擎=》创建主引擎=》配置各种网关引擎=》配置配置项=》创建主窗体=》启动。
再看我们注释掉的代码
# flake8: noqa from vnpy.event import eventengine from vnpy.trader.engine import mainengine from vnpy.trader.ui import mainwindow, create_qapp # from vnpy.gateway.binance import binancegateway # from vnpy.gateway.bitmex import bitmexgateway #…………省略一部分gateway # from vnpy.gateway.bybit import bybitgateway # from vnpy.app.cta_strategy import ctastrategyapp # from vnpy.app.csv_loader import csvloaderapp # from vnpy.app.algo_trading import algotradingapp # from vnpy.app.cta_backtester import ctabacktesterapp # from vnpy.app.data_recorder import datarecorderapp # from vnpy.app.risk_manager import riskmanagerapp # from vnpy.app.script_trader import scripttraderapp # from vnpy.app.rpc_service import rpcserviceapp # from vnpy.app.spread_trading import spreadtradingapp # from vnpy.app.portfolio_manager import portfoliomanagerapp
main方法中
# main_engine.add_gateway(binancegateway) #…… #…… # main_engine.add_gateway(gateiosgateway) # main_engine.add_gateway(bybitgateway) # main_engine.add_app(ctastrategyapp) # main_engine.add_app(ctabacktesterapp) # main_engine.add_app(csvloaderapp) # main_engine.add_app(algotradingapp) # main_engine.add_app(datarecorderapp) # main_engine.add_app(riskmanagerapp) # main_engine.add_app(scripttraderapp) # main_engine.add_app(rpcserviceapp) # main_engine.add_app(spreadtradingapp) # main_engine.add_app(portfoliomanagerapp)
通过注释掉的代码,我们基本上能看出来一些端倪,vnpy的实现思路应该是创建了一个主引擎,然后把gateway, app ,事件引擎,都集中在了主引擎上面。然后通过窗体和事件引擎发生交互进行数据处理。我们的源码阅读基本可以分成两条线路去学习:
- pyqt创建和生成窗体
- vnpy的引擎机制
我对pyqt5不了解。所以接下来,我先找个简单点的教程,大概的了解下pyqt5,然后回过头来看看vnpy的窗体的实现代码。暂且吧各种引擎放一放。然后用pyqt5做几个窗体或者复现一下vnpy的窗体作为当前第一个阶段的工作吧。
推荐阅读
-
【Android】用Cubism 2制作自己的Live2D——官方App样例源码学习(1)!
-
vnpy学习笔记1:Chart绘图功能相关
-
LayaAir引擎源码阅读:基础渲染部分(1)
-
Apollo2.5源码阅读(1)
-
koa源码阅读[1]-koa与koa-compose
-
vnpy源码阅读学习(1):准备工作
-
x265源码阅读--准备工作
-
TensorFlow 源码阅读[1] OpKernel的注册
-
java源码学习(java-src)之AbstractQueuedSynchronizer (AQS)以及模板设计模式-1
-
Spring源码学习:第1步--在Spring源码中添加最简单的Demo代码