首頁>技術>

AioQuant量化交易系統其實在Python語言類得專案中算是一個比較創新型的設計理念.現在市場上很多在宣傳非同步量化交易框架的博主,或多或少都能找到aioquant的影子.

整體aioquant的框架結構比較簡單,複雜的是對協程多工的理解.

一、為什麼要採取協程多工?

說到協程不得不提的就是執行緒、程序。

執行緒的話,在多核心處理器裡面,是並行的,你啟動一個執行緒之後你要想控制它,你得做系統呼叫或者最好情況是傳送訊號告訴執行緒裡面的條件變數讓執行緒自己去退出。

協程不參與多核CPU並行處理,協程不併行,而執行緒在多核處理器上是並行在單核處理器是受作業系統排程。

說協程效能好的,其實真正的原因是因為瓶頸在IO上面,而這個時候真正發揮不了執行緒的作用。

使用協程多工的主要原因在於:

儘可能的節約任務排程過程中的時間消耗。節約系統資源

協程最原始的優點就是多工處理的能力和時間的消耗,隨著任務數量的增加,這種優勢越明顯。這裡我們不做過多的技術闡述,後面我們會帶著大家一起來從頭開始完成一套非同步多工的量化框架,可以繼續關注我們的更新。

二、整體架構分析:

AIOQuant是一套非同步事件驅動的量化交易系統,它被設計為適應中高頻策略的交易系統, 底層封裝了作業系統的aiohttp實現非同步事件迴圈,業務層封裝了RabbitMQ訊息佇列實現非同步事件驅動。

特點:

基於Python Asyncio原生非同步事件迴圈,處理更簡潔,效率更高;跨平臺(Windows、Mac、Linux),可任意私有化部署;任意交易所的交易方式(現貨、合約)統一,相同策略只需要區別不同配置,即可無縫切換任意交易所;所有交易所的行情統一,並透過事件訂閱的形式,回撥觸發策略執行不同指令;支援任意多個策略協同執行;支援任意多個策略分散式執行;毫秒級延遲(10毫秒內,一般瓶頸在網路延遲);提供任務、監控、儲存、事件釋出等一系列高階功能;定製化Docker容器,分散式配置、部署執行;量化交易Web管理系統,透過管理工具,輕鬆實現對策略、風控、資產、伺服器等程序或資源的動態管理;

整體框架模組劃分:

event模組:event模組是行情資料、資產等資料介面的事件核心模組,透過訂閱RabbitMQ訊息重心來完成這個事件重心的訊息和資料傳遞。tasks模組:協程重心的核心方法,裡面封裝了SingleTask單例事件模型、LoopRunTask迴圈事件模型heartbeat模組:心跳事件,在迴圈事件中需要使用到心跳機制來做定時任務。quant模組:事件迴圈的核心管理模組。market模組:上層是RabbitMQ事件重心,Aioquant框架的資料、資產模組是分開的,最為獨立服務拆分成了分散式系統,透過訂閱交易所行情傳送給訊息事件中心,實現資料的非同步傳輸。trade模組:trade模組對接platform介面,交易所介面都是非同步實現,透過上層封裝實現非同步事件呼叫。configure模組:aioquant是配置檔案執行邏輯,需要透過全域性配置檔案來實現相關引數的定義。

以上都是這套框架的核心模組,因為採用了面向物件的設計思路,框架中針對Orderbook、Trade、Position等都定義了對應的物件。資料透過物件傳輸。

三、使用難度

aioquant使用難度相比之前介紹的可能難在理解上,如果單純從使用的角度考慮那麼很容易去獲得簡單的效果。官方的案例中也帶了很多demo供大家學習使用。難在針對協程的理解和二次開發上面,因為aioquant是半開源的方式,很多功能都是收費的,所以對於我們使用來說需要有一定的開發能力需要定製自己的介面。所以使用不難,難在二次開發和後期維護上。

如果想使用其他的交易所介面可能需要自己做一些二次開發,做一些定製化測試才行。不然幾乎沒法使用這套框架,或者說你直接使用現有的提供好的現貨介面來使用。

官方也提供了很詳細的技術文件

考慮到aioquant專案現在已經在GitHub上下架了,很多社群的人很難找得到,所以我們提供了完整的說明文件供大家學習參考。

https://545c.com/f/30567921-482718417-7fa521(訪問密碼:1222)

四、策略編寫難度

策略方面,aioquant沒有很友好的策略編寫模板供大家參考,所以策略方面可能需要大家自己按照自身策略的詳細需求來自定義一些策略模組來實現對應的策略模組。不過整體的資料和資產、訂單模組都比較詳細,我們也只需要把工作重心放在策略的整體邏輯上即可。

五、風控難度

對於aioquant來說談不上任何風控能力,它本身也只是提供了交易所常用的交易介面,具體的風控功能需要使用者實行解決。

六、程式碼完整度

aioquant本身就是半開源專案,好在核心模組全部開源出來了,市場上也有很多改進的版本供大家學習參考,所以完整度雖然原版只是缺少一些交易所介面,但是綜合市場來看算是一個比較完整的專案。大家可以透過社群來獲取更加完整的專案程式碼,或者是根據大家所缺少的模組我們會整理出一些大家缺少的模組供大家學習參考。

七、二次開發難易度

對與aioquant來說,二次開發難度主要集中在對於協程多工的理解,而不是程式碼上。aioquant的整體模組封裝得非常完善,幾乎不需要做變動,按照寫好的模組照著寫就行了,對應資料做好封裝即可,沒有很大的難度,唯一的難度就是在非同步的理解上。

八、系統性能測評

對於我自己本人是非常喜歡這套框架的,自己也根據這套框架做了一些改進,加了策略控制重心,和資料中臺,方便自己做資料研究和策略的集中化管理。

效能來說,對於多工模型的框架,效率自然會高一丟丟,但是也並沒有想象中那麼高,因為本身網路的限制,再加上python本身的一些問題。

其實可以結合GitHub上C版本的Orderbook工具,再加上一些C++實現rest介面等方式,可以將效率提升得更高,我自己是這麼做的,目前使用起來也很滿意。這套框架裡還在設計理念和整體的思路。

也非常值得大家花時間去研究。

24
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 如何在JavaScript中逆向輸出一個字串