[轉]vnpy亂亂談 02架構

vnpy亂亂談 02架構

 

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

 

聽到架構這個詞先不要懼怕. 其實這部份內容仍是挺簡單的. 通常而言, 一個交易系統咱們能夠簡單的分紅輸入, (系統)處理, 輸出三個部分.github

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

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

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

更進一步, 是否是還缺點東西? 試想一下若是你的model不當心寫錯了, 會瘋狂的下單, 那麼會致使怎麼樣的後果? 或者是原本要買100手的變成10000手, 不用想都知道後果基本都挺嚴重的對吧. 因此咱們須要一個東西來審查一下咱們下的單子是不是正常的, 通常而言這個東西叫作風控, 對應的還有一個東西叫作流控.app

風控通常是作安全檢查的, 比方說檢查你的單子價格是否正確, 是否是負數啊, 數量是否正確, 是否等於0或者是過大啊之類的. 而流控呢則是控制單位時間內能夠下多少單子, 不少地方風控流控不作嚴格區分的, 講風控通常也包含流控. 因此如今咱們的交易系統變成了下面這樣dom

試想一下, 若是不一樣的交易所的行情和交易指令有不一樣的格式, 那麼若是咱們的交易系統要支持多個交易所, 是否是還缺點什麼? 通常來說咱們都比較喜歡把不一樣可是相似的東西統一來處理. 對行情來說通常咱們不直接處理交易所過來的原始數據, 而是作一下轉化, 轉化爲咱們內部的一種數據結構來處理, 這樣多家不一樣的交易所的行情最終都是轉化爲咱們本身的數據結構處理的. 而對交易來講, 則是咱們內部的下單指令轉化到各個交易所特有的指令. 這個轉化的部件能夠叫adapter也能夠叫gateway. 因此咱們的結構演變成下面這樣了.ide

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

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

咱們再來看看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

相關文章
相關標籤/搜索