真格量化入門課程——②真格量化Python策略編寫思路

四、如何在真格平臺上做到這一切

現在我們想在真格量化上實現自己的策略,需要怎麼做呢?

首先,真格量化使用Python語言編寫策略。我們需要對Python語言有一些初步的瞭解。與C++或Java語言相比,Python是一種非常方便易用的腳本式編程語言,很適合非計算機專業的用戶來上手量化交易。

舉個簡單的例子,如果直接用C++調用CTP的API進行下單委託,您可能需要寫這些代碼:

cpp

在真格量化,您只需要一行Python代碼:

python1line
省下的時間,您可以用來研究策略,或者做些更有意義的事情。

4.1平臺IDE不止是開發環境也是運行環境

真格量化由一個簡潔的網頁版Python編輯器、提供海量數據的數據庫和用於運行策略的性能強大的服務器構成。用戶在編輯器裏寫好策略代碼後,可以直接去回測、交易模擬盤或交易實盤。用戶無需在本地數據庫、本地編譯環境、雲服務器上的各種軟件之間頻繁切換,無需自己花費時間精力去記錄市場數據,也不用爲優化網絡、內存等硬件性能而頭疼。

cloud

回測與模擬、實盤三合一的設計使得代碼複用性得到了顯著提高。策略研究代碼只需極少量的改動就可投入實盤交易。

3in1

4.2 真格量化中的Python策略編寫思路

4.2.1 事件驅動的設計思路

真格量化的策略設計應遵循“事件驅動”的開發思路。當新的“事件”(比如新的價格數據或者賬戶狀態的變化)被推送到策略程序時,程序將調用和這個事件相對應的處理函數來進行相關操作。

eventflow

這和我們最常使用的順序式編程略有不同。程序執行各個任務的先後順序取決於是否監聽到了特定事件的發生。事件驅動型程序在啓動後就處在一個循環當中。這個循環就在監聽各種事件。真格量化中可監聽的事件及其對應的監聽函數如下表:

eventtable

這些事件可以分爲以下幾類:

eventcategory

舉個例子:

爲實現每天開盤前實盤賬戶的自動登錄,我們可以用OnMarketQuotationInitialEx函數去監聽交易所行情初始化這個事件,當事件源(也就是交易所)發送事件時(發出行情初始化信息),監聽該事件的監聽函數(OnMarketQuotationInitialEx)就會收到消息並作出響應(比如登錄實盤賬戶)。

我們也應當注意,行情數據是需要訂閱的(通過SubscribeQuote或SubscribeBar函數)。只有被訂閱的品種的行情纔會被持續推送到相應監聽函數(比如OnQuote或OnBar函數)。不訂閱行情就不會有行情數據來驅動相應的監聽函數。

下邊這個例子展示了用不同的事件去驅動不同的操作。比如用“開始事件”驅動“登錄賬戶”函數,用“開盤事件”來驅動“訂閱行情(K線)”函數,用“K線更新事件”來驅動“計算均線”函數。

eventexample

使用事件驅動的設計思想,我們可以通過監聽到的各種“消息”和響應函數的各種“指令”將程序的各部件連接起來。

對於事件驅動型程序,我們還可以將其中各個組成部分劃分爲“元素”和“操作函數”:

元素包括:

事件源

事件監聽器

事件對象

操作函數包括:

監聽動作函數

發送事件函數

調用監聽函數的響應函數

我們在編寫策略時應注意區分元素和操作函數,瞭解一個操作需要哪些事件的發生作爲啓動條件,及監聽到一個事件發生後可以採取哪些動作。

4.2.2 數據訂閱

不同週期的行情訂閱:

在事件驅動部分,我們已經介紹了策略程序要依靠訂閱行情來驅動。在回測或實盤交易時,我們可以通過選擇不同的時間週期參數,來指定策略在相應的”時間週期“上進行操作(例如策略是在分鐘級別交易還是在Tick級別交易)。

switchtime

在回測中,如果”時間週期“選擇“Tick”則可以通過SubscribeQuote獲得歷史的tick行情。”時間週期“選擇”分鐘“則可通過SubscribeBar函數獲得1~240分鐘這些不同分鐘週期的歷史K線行情。”時間週期“選擇”每天“則可以通過SubscribeBar函數訂閱”天“、”星期“、”月“、”季度“、”年“這些更長週期的歷史K線行情。

在實盤交易中,如果”時間週期“選擇”Tick“則可以通過SubscribeQuote獲得最新的tick行情。”時間週期“選擇”分鐘“則可通過SubscribeBar函數獲得1~240分鐘這些不同分鐘週期的最新的K線行情。”時間週期“選擇”每天“則可以通過SubscribeBar函數訂閱”天“、”星期“、”月“、”季度“、”年“這些更長週期的最新K線行情。

使用SubscribeBar函數應注意,其BarType參數應當與“時間週期”參數對應:

timetable

例如”時間週期“選擇”每天“,SubscribeBar函數的BarType參數可以根據需要寫成BarType.Week,BarType.Month, BarType.Day等。”時間週期“選擇”分鐘“,SubscribeBar函數的BarType參數可以根據需要寫成BarType.Min3,BarType.Min15,BarType.Min等。

而對於過去一段時間的歷史行情,比如2018年12月1日到2019年3月1日之間的所有日K線,可以通過GetHisData函數來查詢。

timeline

4.2.3 交易相關處理

我們在交易中最常處理的就是與賬戶有關的各種信息。

真格量化中與賬戶相關的信息,都可以視爲“對象”。比如賬戶本身可以作爲一個對象,可以調用其各種“方法”,比如登錄、查詢成交、進行風控等。

accountobject

例如,賬戶的登錄方法:

accountlogin

而查詢到的賬戶的成交、持倉等信息,本身也可以作爲對象,有與之對應的”屬性“和”方法“。比如對於一個”委託對象“可以查詢其委託價格、數量等屬性,以及查詢委託是否可撤等方法。

orderobject

例如,通過監聽委託狀態變化(OnOrderChange)來查詢委託的一些屬性:

orderstatus

4.3 Python應當怎麼寫

對於Python初學者,可以參考“菜鳥教程”,學習基礎的語法。當您掌握了Python的循環控制、數組和函數的知識,就已經可以使用真格量化的大部分功能。

runoob

對於 Python 編程有一定經驗的用戶,可以仔細閱讀“真格量化API文檔”(這裏API文檔的重要程度,相當於飛行手冊對於飛行員的重要程度,您在真格量化中80%的問題都可以在API文檔裏找到答案)以及參考“Python for Finance-Analyze Big Financial Data”等專門介紹Python在金融領域應用的教程。在真格量化微信公衆號(在微信搜索“真格量化”)和知乎(在知乎搜索“真格量化”)上也有不少與真格量化相關的Python編程和策略設計的技巧,能給您編寫自己的量化交易策略提供靈感。

apidoc
weichataccount

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章