參考:
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性能會極大的牽制了回測部分的功能。