您好,登錄后才能下訂單哦!
四、如何在真格平臺上做到這一切
現在我們想在真格量化上實現自己的策略,需要怎么做呢?
首先,真格量化使用Python語言編寫策略。我們需要對Python語言有一些初步的了解。與C++或Java語言相比,Python是一種非常方便易用的腳本式編程語言,很適合非計算機專業的用戶來上手量化交易。
舉個簡單的例子,如果直接用C++調用CTP的API進行下單委托,您可能需要寫這些代碼:
在真格量化,您只需要一行Python代碼:
省下的時間,您可以用來研究策略,或者做些更有意義的事情。
4.1平臺IDE不止是開發環境也是運行環境
真格量化由一個簡潔的網頁版Python編輯器、提供海量數據的數據庫和用于運行策略的性能強大的服務器構成。用戶在編輯器里寫好策略代碼后,可以直接去回測、交易模擬盤或交易實盤。用戶無需在本地數據庫、本地編譯環境、云服務器上的各種軟件之間頻繁切換,無需自己花費時間精力去記錄市場數據,也不用為優化網絡、內存等硬件性能而頭疼。
回測與模擬、實盤三合一的設計使得代碼復用性得到了顯著提高。策略研究代碼只需極少量的改動就可投入實盤交易。
4.2 真格量化中的Python策略編寫思路
4.2.1 事件驅動的設計思路
真格量化的策略設計應遵循“事件驅動”的開發思路。當新的“事件”(比如新的價格數據或者賬戶狀態的變化)被推送到策略程序時,程序將調用和這個事件相對應的處理函數來進行相關操作。
這和我們最常使用的順序式編程略有不同。程序執行各個任務的先后順序取決于是否監聽到了特定事件的發生。事件驅動型程序在啟動后就處在一個循環當中。這個循環就在監聽各種事件。真格量化中可監聽的事件及其對應的監聽函數如下表:
這些事件可以分為以下幾類:
舉個例子:
為實現每天開盤前實盤賬戶的自動登錄,我們可以用OnMarketQuotationInitialEx函數去監聽交易所行情初始化這個事件,當事件源(也就是交易所)發送事件時(發出行情初始化信息),監聽該事件的監聽函數(OnMarketQuotationInitialEx)就會收到消息并作出響應(比如登錄實盤賬戶)。
我們也應當注意,行情數據是需要訂閱的(通過SubscribeQuote或SubscribeBar函數)。只有被訂閱的品種的行情才會被持續推送到相應監聽函數(比如OnQuote或OnBar函數)。不訂閱行情就不會有行情數據來驅動相應的監聽函數。
下邊這個例子展示了用不同的事件去驅動不同的操作。比如用“開始事件”驅動“登錄賬戶”函數,用“開盤事件”來驅動“訂閱行情(K線)”函數,用“K線更新事件”來驅動“計算均線”函數。
使用事件驅動的設計思想,我們可以通過監聽到的各種“消息”和響應函數的各種“指令”將程序的各部件連接起來。
對于事件驅動型程序,我們還可以將其中各個組成部分劃分為“元素”和“操作函數”:
元素包括:
事件源
事件監聽器
事件對象
操作函數包括:
監聽動作函數
發送事件函數
調用監聽函數的響應函數
我們在編寫策略時應注意區分元素和操作函數,了解一個操作需要哪些事件的發生作為啟動條件,及監聽到一個事件發生后可以采取哪些動作。
4.2.2 數據訂閱
不同周期的行情訂閱:
在事件驅動部分,我們已經介紹了策略程序要依靠訂閱行情來驅動。在回測或實盤交易時,我們可以通過選擇不同的時間周期參數,來指定策略在相應的”時間周期“上進行操作(例如策略是在分鐘級別交易還是在Tick級別交易)。
在回測中,如果”時間周期“選擇“Tick”則可以通過SubscribeQuote獲得歷史的tick行情。”時間周期“選擇”分鐘“則可通過SubscribeBar函數獲得1~240分鐘這些不同分鐘周期的歷史K線行情。”時間周期“選擇”每天“則可以通過SubscribeBar函數訂閱”天“、”星期“、”月“、”季度“、”年“這些更長周期的歷史K線行情。
在實盤交易中,如果”時間周期“選擇”Tick“則可以通過SubscribeQuote獲得最新的tick行情。”時間周期“選擇”分鐘“則可通過SubscribeBar函數獲得1~240分鐘這些不同分鐘周期的最新的K線行情。”時間周期“選擇”每天“則可以通過SubscribeBar函數訂閱”天“、”星期“、”月“、”季度“、”年“這些更長周期的最新K線行情。
使用SubscribeBar函數應注意,其BarType參數應當與“時間周期”參數對應:
例如”時間周期“選擇”每天“,SubscribeBar函數的BarType參數可以根據需要寫成BarType.Week,BarType.Month, BarType.Day等。”時間周期“選擇”分鐘“,SubscribeBar函數的BarType參數可以根據需要寫成BarType.Min3,BarType.Min15,BarType.Min等。
而對于過去一段時間的歷史行情,比如2018年12月1日到2019年3月1日之間的所有日K線,可以通過GetHisData函數來查詢。
4.2.3 交易相關處理
我們在交易中最常處理的就是與賬戶有關的各種信息。
真格量化中與賬戶相關的信息,都可以視為“對象”。比如賬戶本身可以作為一個對象,可以調用其各種“方法”,比如登錄、查詢成交、進行風控等。
例如,賬戶的登錄方法:
而查詢到的賬戶的成交、持倉等信息,本身也可以作為對象,有與之對應的”屬性“和”方法“。比如對于一個”委托對象“可以查詢其委托價格、數量等屬性,以及查詢委托是否可撤等方法。
例如,通過監聽委托狀態變化(OnOrderChange)來查詢委托的一些屬性:
4.3 Python應當怎么寫
對于Python初學者,可以參考“菜鳥教程”,學習基礎的語法。當您掌握了Python的循環控制、數組和函數的知識,就已經可以使用真格量化的大部分功能。
對于 Python 編程有一定經驗的用戶,可以仔細閱讀“真格量化API文檔”(這里API文檔的重要程度,相當于飛行手冊對于飛行員的重要程度,您在真格量化中80%的問題都可以在API文檔里找到答案)以及參考“Python for Finance-Analyze Big Financial Data”等專門介紹Python在金融領域應用的教程。在真格量化微信公眾號(在微信搜索“真格量化”)和知乎(在知乎搜索“真格量化”)上也有不少與真格量化相關的Python編程和策略設計的技巧,能給您編寫自己的量化交易策略提供靈感。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。