VNPY框架入門解讀


目前市面上支持程序化的交易軟件很多,例如TB,金字塔,MC等等,各有各的優勢,也有各自的不足,比如我自己使用比較熟悉的TB,對於多品種的策略基本無能為力(目前已經上線了更加靈活的TBQ,但是由於不支持融航系統,還沒去研究)。另外的,股票,期貨,期權,外盤等一系列標的若分別使用不同的交易軟件也會提高出錯概率和管理難度。考慮到以后實盤策略的多樣化,打算將所有項目基於VNPY進行重構,方便將來進行資金以及策略的管理和交易系統的迭代。
接下來,對VNPY框架進行粗略解讀。

源碼目錄

目錄結構

VNPY的源碼嚴格來講由兩部分組成,一部分為(A)git上pull獲取的項目源碼,另外一部分為(B)pip install vnpy的python包。重構自己的項目主要在A上做修改,B提供了一些底層的封裝,比如CTP的C++dll封裝為python可用的pyd文件,這一部分一般不用修改,知道大概功能即可。
A.

B.

文件夾

接下來對A部分中的各個文件夾進行介紹:

  • doc:每個模塊的使用文檔
  • vnpy:vnpy框架的主要封裝,是需要仔細研讀的部分,具體內容將結合下一章節進行介紹。
  • examples:利用vnpy提供的封裝,構建各種項目的demo,方便研發人員了解框架的組成,各個模塊的功能使用,進行二次開發。

項目架構

為了快速幫助大家了解vnpy的項目架構,我在官方自帶的demo上面增加了一行,方便講解思路。


(圖中藍色框框部分為增加的代碼)

vnpy最核心的部分是兩個引擎對象:main_engine和event_engine,其中main_engine負責各個功能模塊的組裝,event_engine負責回調事件的調度。
打個比方,vnpy是一輛車子,main_engine負責對這輛車子進行組裝,為他組裝發動機,變速箱,底盤等一些列配置,具體說需要哪些配置,是手動波箱還是自動波箱,是主廠品牌還是副廠品牌,都由main_engine說了算。event_engine負責設置汽車工作時各個配置的運行規則,比如一輛自動擋汽車當前檔位為舒適模式,則event_engine告訴變速箱在2000轉再換擋;當檔位切換成運動模式,則event_engine告訴變速箱在3000轉再換擋(8000轉干他!)。

vnpy的主框架還是比較主流,好理解的。和Vue有點相似,把各個功能模塊抽象成app,需要使用哪些功能就在主引擎中進行添加即可。回歸代碼,運行vnpy首先實例化一個EventEngine

EventEngine是一個事件路由,各個功能模塊app將不同類型的處理函數注冊到這個引擎中,然后引擎中的任務隊列接收到事件時,根據事件的類型將事件數據推送給相應注冊的處理函數進行回調。

然后實例化main_engine,在main_engine中通過add_gateway方法將各種交易接口加入(具體的交易接口在vnpy/api中封裝),然后通過add_app將需要的功能模塊組裝到主程序中(vnpy/app目錄中為各個功能模塊,如例子中的main_engine.add_app(DataRecorderApp)就是調用了其中的數據存儲模塊)

add_app函數作用是根據具體注冊的app類型(繼承BaseApp父類),實例化app.engine_class,每個engine_class在構造函數中將各自的事件函數注冊到main_engine的event_engine中。
最后將EventEngine和MainEngine實例化對象作為參數構造MainWindow,由MainWindow負責調用各個模塊的ui組件進行可視化,實現交互。

模塊修改

對模塊的一些修改,如增加全市場指數的合成以及訂閱... ...
(未完)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM