参考:
https://zhuanlan.zhihu.com/p/102154074(知乎-vnpy源码阅读学习(1):准备工作)
https://www.cnblogs.com/xiaoxuebiye/p/9876106.html(VNPY 架构设计文档)
vnpy的实现思路应该是创建了一个主引擎,然后把gateway + app + 事件引擎都集中在了主引擎上面。然后通过窗体和事件引擎发生交互进行数据处理。
我们的源码阅读基本可以分成两条线路去学习:
- pyqt创建和生成窗体
- vnpy的引擎机制
"""
vn_trader/run.py
创建pyqt的界面 -> 创建事件引擎 -> 创建主引擎 ->
配置各种网关引擎 -> 配置配置项 -> 创建主窗体 -> 启动
"""
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()
《VNPY 架构设计文档》
版本1.x
五.系统结构设计(软件结构设计思路):
VNPY 设计思路是数据驱动,引擎牵引,应用挂靠。
从业务出发,所有的交易都是基与行情的反应,有了行情才有信号,才有委托,才有持仓和风控;
从技术角度看,数据来源于API(CTP,LTS,火币)等,可以说数据驱动了一切。
VNPY的引擎包括:主引擎,事件引擎,数据引擎和应用引擎。
引擎的作用有点类似电脑的主板,所有的东西都往上插。如果需要资源,就向引擎要。VNPY主引擎驱动Gateway(延伸到各行情交易CTP),使用了消息引擎(EventEngine)把所有Gateway发过来的数据分发到各个内部的外部的引用。内部的应用包括数据引擎,主界面等,外部应用包括风控管理,CTA策略,算法交易等各应用。
在应用里面,VNPY又设计了应用引擎来带动各策略组,给策略组提供服务。 同时VNPY主引擎提供了,订阅,委托,撤单,数据库操作等接口给各个内部的,外部的APP。
数据服务作为多个独立应用程序,来实现数据的下载,整理,保存。 供策略回测使用。从性能的角度来说Python性能会极大的牵制了回测部分的功能。