杜小甫

摘 要為了運行期貨交易策略,同時又能實現自主的交易行為,本文討論了一種組合型架構的期貨程序化交易系統。該系統實現了策略端和交易端的獨立,策略端負責接收行情數據并產生交易信號,交易端完成交易行為并進行風險控制。策略端采用“交易師”作為第三方通用平臺,交易端采用C++編程,并使用QDP作為底層API接口。目前該系統已經開發完成,實際效果良好。
【關鍵詞】期貨 程序化交易 交易策略 交易安全
1 基本結構
2010年滬深股指數期貨合約在中金所的上市,標志著我國的程序化交易的開端。近年來,程序化交易在我國日趨成熟,尤其是在期貨市場。當前存在的各種程序化交易系統,整體可分為通用型和專用型兩大類,本文討論了另外一種全新的組合型系統架構。
通用型交易系統是指由專業軟件公司開發的程序化交易系統,一般提供專用的策略編寫語言,讓用戶編寫交易策略,交由系統來完成交易行為。目前在國內市場比較流行的有文華財經的贏智、開拓者的Tradeblazer、新博庭的King Trader交易師等。專用型系統指的是根據用戶的特殊策略需求,利用編程語言獨立開發的系統。兩類系統各有優缺點,和適用范圍。
本文討論了一種組合型期貨程序化交易系統,該平臺結合了上述兩類系統的優點,應用范圍更加廣泛。系統整體分為三大模塊:策略端、交易端和通信模塊。策略端基于第三方通用系統開發,負責從第三方通用平臺獲取行情數據,并執行策略,產生交易信號。交易端接收到交易信號后完成交易行為,并進行交易中的風險控制。數據端和交易端之間有獨立的通信模塊,負責完成兩者之間的數據通信。系統整體架構如圖1所示。
之所以采用這種組合架構,是經過精心設計的。一方面,策略端可以借助于第三方通用平臺完成很多工作,降低了整體的開發工作量。另一方面,通過獨立開發的交易端,使我們的交易行為完全獨立,更加提高了交易的安全性。而且這種組合式的架構具有很強的擴展性,在策略端可以選擇不同的第三方平臺,交易端又可以選擇不同的底層API接口。
系統中采用King Trader作為第三方數據源,首先因為該軟件提供強大的策略腳本語言“金語言”,以及對應的開發環境“金魔方”。我們可以利用金語言完成策略的編寫和測試工作,并利用金魔方完成歷史數據的回測。最終編寫真實策略,利用其 “金魔方”平臺進行策略的運行和交易。當然,金語言進行策略編寫的能力有限,另外考慮到安全性,我們并不在金魔方上直接進行交易,而是將產生的交易信號提交給獨立的交易端。
使用King Trader的另外一個原因是他對dll控件的支持性較好,這就給我們提供了利用dll開發通信模塊的可能性。King Trader提供MYMACLOSE和my_ma2兩個dll回調函數接口。我們可以在dll中完成數據通信功能的編寫。
在交易端,我們采用了量投科技有限公司提供的QDP作為底層的API接口。首先,QDP提供完備的行情數據接口和交易接口,并默認支持C++語音。這給交易系統的開發帶來極大的便利。其次,QDP具有很多其他優點,例如低延遲、交易所內部直連、開放接口等等。使用QDP不但能滿足當前系統的需求,也為今后開發完全獨立的交易平臺打下基礎。
2 策略端模塊
金語言在金魔方系統中編寫、編譯,開發出的可執行的小程序稱為“指標”。指標能顯示在金魔方圖表上或用于選股、預警。智能策略指標編寫之后,可以在金魔方中測評。最后,智能策略可以通過金魔方實盤運行,并做出交易動作。
金魔方系統是廣州博庭計算機科技有限公司開發的一款量化投資平臺軟件。具有以下主要功能模塊:
(1)行情數據接收和展示、技術分析。
(2)策略編寫。
(3)策略測評。
(4)模擬交易與自動交易。
我們系統中策略的編寫直接采用金語言,并在期貨品種的K線圖上運行。策略端主要功能包括策略編寫、策略評測和策略執行。首先利用金語言將我們的策略編寫成指標的形式。然后在歷史數據中運行我們的策略,對他進行檢驗,觀察平均盈利率,最大回測率等數據。在評測過程中可以不斷的調整參數,達到優化的目的。但是要注意,參數不可能最優化,因為那是不可能的,尤其要注意未來函數的問題。最后選擇合適的期貨合約,在其K線圖上運行評測好的策略,實時考慮當前的行情數據,產生各種交易信號。具體包括開倉信號、平倉信號、止損信號等等。然后將交易信號進行數據打包,通過通信模塊傳遞給交易端程序。
3 交易端模塊
本系統中交易端模塊由我們獨立開發,采用C++語言,并選擇QDP作為底層API接口。
QDP是量投科技公司開發的一套底層柜臺商交易接口,它同時提供行情數據接口和交易接口。QDP的功能很強大,可以直接完成期貨交易中的各種操作,在最新版本中也支持股票的交易。
QDP為行情數據接口和交易接口各自提供了兩個封裝好的類,分別命名為API類和SPI類。其中API類封裝了一系列函數,允許用戶在代碼中調用,以完成不同的操作。例如調用ReqOrderInsert 方法可以完成報單的錄入操作,調用ReqOrderAction方法可以完成撤單操作等。而在SPI類中則封裝了一系列回調函數,這些函數不允許用戶代碼調用,而是被QDP的服務器自動調用,以完成對用戶不同操作請求的響應。例如, OnRspOrderInsert 方法被QDP服務器回調,用來響應用戶的ReqOrderInsert報單操作,OnRspOrderAction方法被QDP服務器回調,用來響應用戶的ReqOrderAction撤單操作等。QDP允許用戶繼承SPI類,在子類中重寫上述回調函數。以便加入用戶的代碼,從而完成用戶特定的需求。
QDP系統的交易操作具有很大優點,最大的好處的延時非常短。QDP的服務器機房直接安置在交易所很近的地方,直線距離不超過500米,并通過光纖直接連接交易所前置機。這樣的安排,讓QDP的交易操作比其他柜臺商快一個數量級,一次報單操作耗時在300微秒左右,網絡往返時間在600微秒左右。
在一次交易行為中,存在客戶端、QDP服務器和交易所前置機三個參與者。客戶端就是交易人員的個人電腦,其上可以安裝各種交易軟件。客戶端通過互聯網連接QDP服務器,QDP服務器內封裝了不同的交易席位,每個客戶端總是固定分配到某個席位的。用戶提交的各種交易請求,都交給QDP服務器來處理。QDP服務器的物理位置和交易所的機房非常接近,一般不超過500米,通過局域網光纖直連交易所前置機。交易所總的服務器對我們一般用戶而言,是不可見的,我們能連接到的只是交易所提供的前置機。
我們開發的交易端程序可以部署在某臺客戶端上,當然這樣互聯網通信的網絡延時較大,速度也不穩定。我們一般會在QDP服務器上申請獨立席位,該席位為我們單獨使用,不再與其他客戶端共享。使用獨立席位的另一個好處是速度更快。我們的交易端程序直接部署在席位上,和QDP服務器基本沒有任何網絡延時,和交易所前置的網絡延時也就在300微秒左右。另外,我們還可以通過其他方法進一步提高速度,比如可以綁定某臺固定的交易所前置機,而不是由QDP服務器隨機分配。
下面分別討論一下交易端模塊的幾個重要子模塊。
交易管理子模塊是交易端的核心模塊,其主要功能是根據從策略端傳過來的交易信號進行交易行為,具體包括:報單錄入、報單撤銷、報單查詢等操作。該模塊是整個系統中真正進行交易行為的模塊,要求具有很高的抗風險性能。另外很多策略的性能好壞與交易動作的執行效率密切相關,尤其是高頻策略,所以本模塊的具體執行算法很大程序決定了策略的盈利性能。該模塊也要完成與交易相關的一些其他操作,例如倉位管理、資金管理等。
風險管理是任何程序化交易系統必不可少的重要功能,可以說,所有的交易系統風險控制是底線。任何一種策略,無論盈利能力多高,回撤率高的話,也很有可能造成一次虧損就會讓一年的盈利化為泡影,所以風險管控非常重要。風險管控整體可以分為兩大類,第一類是交易所層面的限制,例如每秒最多允許的報單數,每個品種最多允許的撤單數等等。一旦違背這些規則,輕則禁止交易,重則停業整頓,所以萬不可大意。第二類重要的風險則來之于不同的策略本身。例如對于日內策略,一般在停盤前一段時間(例如5分鐘)禁止進行開倉操作,或進行強制的平倉、鎖倉操作等等。以上風險控制功能都在交易端代碼中完成。
日志管理也是必不可少的一環。交易行為具有連續性,非常有必要在交易結束后進行檢討,日志因此非常重要。我們交易過程中所有重要的信息都可以記錄到日志中,當然可以考慮適當的劃分文件。例如行情數據可以放在行情日志中,交易行為可以放在交易日志中等等。另外在某些情況下,要對日志進行特殊的處理,例如高頻交易。有些高頻交易對交易的時效性要求非常高,甚至達到微秒級別。而日志記錄不可避免的涉及到磁盤文件的讀寫,這些操作比較費時。因此在高頻交易中,我們可以采用異步日志的方式。在交易過程中,進行內存讀寫,將日志內容寫入單獨的內存區域;交易結束或者暫停期間,再將內存中日志寫入磁盤。這樣可以一定程序降低日志操作的時間消耗。
4 通信模塊
本系統的通信模塊采用C++語言編寫,基于Socket套接字技術實現。之所以采用這種技術,是考慮到交易端有時會部署在本地計算機上,有時又會部署在遠程席位上。而策略端基本上總是部署在本地計算機上的,因此策略端和交易端有時需要通過網絡進行連接通信。Socket套接字本身是一種網絡通信技術,可以很方便的實現遠程通信。另外當交易端部署在本地時,可以將socket地址設置為127.0.0.1,而不需要對程序做大的修改。
5 總結
本文討論了一種組合型架構的期貨程序化交易系統,該系統中策略執行和交易行為彼此獨立。該平臺最大的優點是具有很強的靈活性。策略端可以選擇不同的第三方軟件,甚至可以同時選擇不同軟件作為備份。交易端利用C++開發,可以完成任意用戶獨特的策略需求。第二個重要優勢則是具有很強的安全性,這對于資金量大的交易行為而言非常重要。所有交易行為在獨立的交易端中進行,不會與行情軟件發生關系,不會被第三方獲取。行情數據可以同時連接多個接口,如果數據出錯,會有天然的備份。這些都帶來了極大的安全性。
當然,本系統也有一定的局限性,這些都有待后續工作中改善。例如數據獲取也可以用QDP編程實現,這樣可以進一步提高系統的安全性。
參考文獻
[1]熊熊,袁海亮,張維,張永杰.程序化交易及其風險分析[J].電子科技大學學報(社科版)Jun.2011,Vol.13,No.3 32-39
[2]廣州博庭計算機科技有限公司,花生網:http://www.hs633.com/pro/gl.php
[3]量投科技,QDP量投快速柜臺:https://www.quantdo.com.cn/pages/qdpDetail.html
作者單位
廈門大學嘉庚學院信息科學與技術學院 福建省漳州市 363105