[轉]vnpy亂亂談 02架構


vnpy亂亂談 02架構

 

轉自:http://101.132.65.227/?p=51

 

聽到架構這個詞先不要害怕. 其實這部分內容還是挺簡單的. 一般而言, 一個交易系統我們可以簡單的分成輸入, (系統)處理, 輸出三個部分.

常見的輸入就是交易所出來的行情(還有回報)了, 行情有很多其他叫法quote, tick, market data 反正都是差不多的意思.

而輸出呢, 無非就是下單, 或者撤單, 或者查詢.

整個處理流程是, 系統接收到一個quote, 然后系統內的模型會評估這個quote, 看看是否后面要下單, 或者撤單. 比如收到一個quote價格很便宜, 模型算出來這個quote價格被嚴重低估, 那么系統就會發出買入指令.好這里引入了一個新的東西叫模型, 或者叫策略. 所以現在架構看起來是這樣的, 我們的交易系統里面有一個東西叫模型

更進一步, 是不是還缺點東西? 試想一下如果你的model不小心寫錯了, 會瘋狂的下單, 那么會導致怎么樣的后果? 或者是本來要買100手的變成10000手, 不用想都知道后果基本都挺嚴重的對吧. 所以我們需要一個東西來審查一下我們下的單子是否是正常的, 一般而言這個東西叫做風控, 對應的還有一個東西叫做流控.

風控一般是做安全檢查的, 比方說檢查你的單子價格是否正確, 是不是負數啊, 數量是否正確, 是否等於0或者是過大啊之類的. 而流控呢則是控制單位時間內可以下多少單子, 很多地方風控流控不做嚴格區分的, 講風控一般也包含流控. 所以現在我們的交易系統變成了下面這樣

試想一下, 如果不同的交易所的行情和交易指令有不同的格式, 那么如果我們的交易系統要支持多個交易所, 是不是還缺點什么? 一般來講我們都比較喜歡把不同但是類似的東西統一來處理. 對行情來講一般我們不直接處理交易所過來的原始數據, 而是做一下轉化, 轉化為我們內部的一種數據結構來處理, 這樣多家不同的交易所的行情最終都是轉化為我們自己的數據結構處理的. 而對交易來說, 則是我們內部的下單指令轉化到各個交易所特有的指令. 這個轉化的部件可以叫adapter也可以叫gateway. 所以我們的結構演變成下面這樣了.

麻雀雖小五臟俱全, 現在基本上重要的東西都有了, 復雜一點的系統其實也就多拓展了一些內如, 下面是來自於AlgoTrader官方的架構圖.

看着挺唬人但其實沒多出來太多東西.

我們再來看看vnpy的, 大概是這樣

EventEngine是整個事件引擎, 相當於AlgoTrader里面的Esper complex Event Processing Engine, 但要簡單很多. 負責事件的分發處理.

gateway對外適配了CTP, FEMAS等金融接口, 對內轉化為一致的數據結構.

DrEngine是行情數據記錄引擎, 相當於AlgoTrader的Database部分, 主要做的事情:

  1. 記錄tick數據
  2. 由tick數據生產並記錄bar數據

CtaEngine模塊是CTA策略引擎, 相當於algotrader的strategy模塊.

RmEngine是風控引擎.

看起和AlgoTrader基本沒差太多對吧? 但是呢仔細看一下, 還是有一些區別的, 在vnpy里面:

  • 界面與邏輯耦合到一起
  • IO(數據落地的mango db)和邏輯耦合到一起

這兩點異同其實是會照成比較大的性能問題的. 這個問題留在后續的篇幅中繼續.

本篇完.

參考:

SYSTEM ARCHITECTURE

The architecture of AlgoTrader is composed of the following components which is shown as the 1st figure

The AlgoTrader Server provides the infrastructure for all strategies running on top of it. The AlgoTrader Server holds the main Esper Complex Event Processing (CEP) engine. It is responsible for all domain model objects and their persistence in the database. Different market data adapters are available to process live and historical market data. On the other end adapters for different execution brokers and exchanges are available, which are responsible for placing orders and receiving executions.

The AlgoTrader Server also provides business components for back testing, parameter optimization, analysis, execution management, risk management, reporting, reconciliation and hedging.

On top of the AlgoTrader Server any number of strategies can be deployed. Strategies can either be coded purely in Java or in a combination of Java and Esper code. Esper based strategies make use of a dedicated Esper CEP engine. A strategy can deploy any number of SQL-like Esper statements for time-based market data analysis and signals generation. Esper statements can invoke any number of procedural actions, such as placing an order or closing a position, which are coded in Java. The combination of Esper statements and Java Code provides a best-of-both-worlds approach.

For management and monitoring of the system different GUI clients exist. The AlgoTrader HTML5 Frontend provides trading related functionality like charting, orders, positions & market data. Eclipse or IntelliJ IDE’s are used for strategy development. The EsperHQ client manages the Esper CEP engine.

For productive installations and deployment AlgoTrader uses Docker.

 

https://github.com/vnpy/vnpy


免責聲明!

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



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