天天看點

vnpy學習(1):初覽結構

參考:

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學習(1):初覽結構

五.系統結構設計(軟體結構設計思路):

VNPY 設計思路是資料驅動,引擎牽引,應用挂靠。

從業務出發,所有的交易都是基與行情的反應,有了行情才有信号,才有委托,才有持倉和風控;

從技術角度看,資料來源于API(CTP,LTS,火币)等,可以說資料驅動了一切。

VNPY的引擎包括:主引擎,事件引擎,資料引擎和應用引擎。

引擎的作用有點類似電腦的主機闆,所有的東西都往上插。如果需要資源,就向引擎要。VNPY主引擎驅動Gateway(延伸到各行情交易CTP),使用了消息引擎(EventEngine)把所有Gateway發過來的資料分發到各個内部的外部的引用。内部的應用包括資料引擎,主界面等,外部應用包括風控管理,CTA政策,算法交易等各應用。

在應用裡面,VNPY又設計了應用引擎來帶動各政策組,給政策組提供服務。 同時VNPY主引擎提供了,訂閱,委托,撤單,資料庫操作等接口給各個内部的,外部的APP。

資料服務作為多個獨立應用程式,來實作資料的下載下傳,整理,儲存。 供政策回測使用。從性能的角度來說Python性能會極大的牽制了回測部分的功能。

vnpy學習(1):初覽結構
vnpy學習(1):初覽結構