高頻交易系統資訊技術探討系列 (2)[系統交易]
?
?
?
4. 演算法設計
?
HFT系統無止境的追求執行效率,就軟體面,效率決定于「演算法的設計方式」、「選擇的發展語言」,甚至連使用的「作業系統」都有關系。
?
先從演算法的設計談起,以HFT系統中常常必須處理的排序與搜尋來說(過去學習資料結構時,光是排序、搜尋就有許多不同的演算法,「旅行者問題」、「背包問題」折磨多少學者的腦細胞),不同演算法的效率不同。
?
評估演算法效率的指標,包括時間複雜度(執行過程的耗時)、空間複雜度(執行過程的記憶體耗用)與正確性(對于大空間的搜尋,不見得可以即時得到全域最佳解,只能力求接近)等。
?
交易過程的許多步驟,都涉及搜尋的工作,一般的搜尋策略包括線性搜尋與二元搜尋,複雜空間的搜尋策略則可以寫一整本書,很多AI的演算法都用于空間搜尋。
?
舉例來說,我目前有一個研究,研究的目的是驗證短期Pattern的持續性;研究中運用日內資料(臺指期貨秒K資料),動態搜尋過去一段時間(例如5天)的最佳策略組合(解空間包括20馀種技術指標組合、指標的參數組合,與指標間的邏輯運算組合),再外推一段時間(例如1天)以驗證策略效果。實證過程使用前滾式移動視窗測試。(來源 www.tumamayizhan.com )
?
實證系統用C#編碼,同時動用數十臺電腦平行處理,演算法則用基因演算法代替窮舉法(注:我們曾用模擬退火法,效果比窮舉法好很多,但還是不及基因演算法。模擬退火法與基因演算法等AI領域方法,都是用來解決搜尋問題的方法)。
?
5. 軟體開發平臺選擇
?
其次是使用的語言,要作HFT,可以選擇使用C++或C#、Java(注:C#簡單的說就是微軟的Java),C#與Java將C作了簡化,好處是編碼較C++容易(開發時間較短),代價是無法像C++那麼「接近硬體」,C++可以用指標(Pointer)對記憶體作較佳控制,也可以方便管理記憶體(動態釋放用不到的記憶體,所謂Garbage Collection),在HFT競速過程中會是比較好的選擇。
?
那麼BASIC家族的語言效率如何?寫這篇文章同時,作了一個簡單測試,在同樣的演算法、同樣的硬體條件、同樣編譯成執行檔,情形下 VB. Net的速度比VC# .Net的速度慢約1倍。VBA就更不用提了。
?
6. 訊息傳遞方式
?
最后提到HFT系統不同子系統間的訊息傳遞(Message)。訊息傳遞系由事件(Event)驅動,例如「取得市場報價」子系統收到來自于市場的報價后,播送訊息(Publication),其他單元則接收訊息(Subscription),此過程稱為「播送接收傳訊」(Pub-sub Messaging)。在一個HFT系統中有眾多的子系統,彼此間依據時序作複雜的訊息傳遞。(來源 www.tumamayizhan.com )
?
訊息傳遞有兩種方式,一種是使用TCP/IP socket,此法建立傳送與接收者間的專用通道,當子系統的傳訊複雜時可能影響效率;另一種選擇是多方播送方式(Multicast),送迅子系統儘管將訊息丟出去,由收訊子系統負責接受,由于不是專用通道,可靠性較低,但效率較好。
有思路,想編寫各種指標公式,程序化交易模型,選股公式,預警公式的朋友
可聯系技術人員 QQ: 511411198 進行 有償 編寫!(不貴!點擊查看價格!)
- 上一篇:高頻交易系統資訊技術探討系列 (3)
- 下一篇:高頻交易系統資訊技術探討系列 (1)
相關文章
-
沒有相關內容