menu-icon
anue logo
澳洲房產鉅亨號鉅亨買幣
search icon
國際股

盤點| 高頻交易都有哪些著名的算法?

鉅亨網新聞中心 2015-08-11 10:29

讓程式化交易真正進入公眾視野的是兩年前震驚全市場的光大證券(601788,股吧)“烏龍指”事件,當時滬指在一分鐘之內拉升超過5%,原因正是這家券商etf套利的高頻交易程式出現了訂單產生和執行的錯誤。

從中國金融期貨交易所的“7·31新政”,到滬深交易所連續公布對三批次賬戶采取限制交易措施,再到近日融券“t+0”交易改為“t+1”,監管層對程式化交易連續展開圍剿。尤其是中金所7月31日出臺的收取申報費措施,對程式化交易者可謂滅頂之災。待到融券交易從“t+0”改為“t+1”時,一些程式化交易者甚至已經麻木了。

本文來源於知乎,是知乎用戶“董可人”於2014年8月對“高頻交易都有哪些著名的演算法?”問題的回答,時至今日,正好是一年。我們再來看這個回答,或許會有不一樣的理解和收獲。

對題目中提到的“冰山演算法”,我剛好有一些了解,可以給大家講講。很多人對“量化交易”的理解實在太過片面,基本上把它等同於生錢工具,我不贊同這種觀點。交易首先是交易本身,有它自身的經濟學意義,忽略這一點而單純把它看成使錢增值的數字遊戲,很容易就會迷失本心。

我也不認為演算法本身有什么稀奇,再好的演算法也是死的,真正的核心價值一定是掌握和使用演算法的人。實際上我講的東西也都是公開的資訊,但是即便了解了技術細節,能真正做好的人也寥寥無幾。

希望這個回答可以讓你對量化和高頻交易有一個更清醒的認識。

首先我相信不少人概念里的高頻交易還是這個樣子的:

盤點| 高頻交易都有哪些著名的演算法?

但對高頻交易來說,這種資訊是非常粗糙的。所以這里先要對不熟悉背景的同學介紹一下什么叫做order book。現在主流的交易所一般都使用order book進行交易,交易所在內部的order book上記錄所有買家和賣家的報價,比如像這樣:

盤點| 高頻交易都有哪些著名的演算法?

bid表示買家,offer表示賣家,這張報價單表示買賣雙方發出的所有報價單(limit order)。這張表才是高頻交易最關心的資訊。任意時刻,買家的出價總是低於賣家(比如這里的98對101)。所以報價雖然一直在變化,但是只有報價是不會有任何成交的。

什么時候會產生交易呢?有兩種情況,第一是任一方發出市價單(market order),比如一個買家發出一張單量為10的市價單,就可以買到賣方在101價格上掛的10份,這個交易成功之后,order book會變成這樣:

盤點| 高頻交易都有哪些著名的演算法?

第二是發出一個價格等於對方最優報價的限價單,也會產生和上述情況相同的結果。

需要強調的是,雖然真正的order book只存在於交易所內部,所有交易都在交易所內完成,但是交易所會把每筆報價和市價單都轉發給所有人,所以所有的買家和賣家都可以自己維護一個同樣的數據結構,相當於交易所order book的鏡像。通過跟蹤分析自己手里這份的鏡像變化,來制定交易規則,是高頻交易演算法的核心思想。

基礎知識介紹完畢,下面為了方便大家理解,我采用一種更形象的方式來表示order book:

盤點| 高頻交易都有哪些著名的演算法?

這張圖對應文章開始時的那個order book,應該可以明白地看出,橫軸表示價格,縱軸表示訂單量,綠色表示買家,紅四表示賣家。這樣做的目的是為了引出本篇討論的主題:冰山訂單。

通過上述基本分析大家可以看出,交易所內的交易數據是完全公開的,市場上任意時刻,有誰想要買/賣多少,所有人一目了然,沒有任何秘密。這樣做本身是有經濟學意義的,因為只有展示出買賣的需求,才會吸引潛在的商家來交易,所以在市場上一定程度的公開自己的需求是必要的。但這樣同時帶來一個嚴重的后果,一旦有某個人想要大量買/賣,他所發出的巨額限價單會直接展示給所有人。比如一個買家掛出巨額買單后,order book會像這樣:

盤點| 高頻交易都有哪些著名的演算法?

這對他非常不利,因為所有人都會利用這個資訊來跟他做對。大家會判斷,現在市場上存在大量的買壓,於是會出現一大批為了賺錢而沖進來的人搶購,價格會快速上升,這樣原來這個人可以在98這個價位買到的東西,很快就變得要在更高的價位上才能買到。這種情況,那些后來的人做的就是front running,而原來的那個人則面對逆向選擇風險。

為了解決這個問題,交易所提供了一種針對性的工具,就是所謂的冰山訂單(iceberg order)。這種訂單可以很大,但只有一小部分是公開出來的,大部分則隱藏起來,除了交易所和發單者本人誰也看不到,真的像一座“冰山”一樣。比如像這樣:

盤點| 高頻交易都有哪些著名的演算法?

灰色的部分就是冰山訂單隱藏的部分。這樣,只有當有對應隱藏量的交易發生時,交易所才會通知其他人,就避免了別人利用顯示訂單的資訊來做front running。

凡事有一利必有一弊。冰山訂單雖然保護了發單者的利益,但是對於其他市場參與者來說卻又變成了一種不公平的規則。那些有真實的交易需求的參與者,會因為對局勢的誤判而損失慘重。所以接下來的問題就變成,如何發現市場上的冰山訂單?

首先有一種最簡單的方法。有的時候,冰山訂單是掛在最優買價和賣價之間(spread),像這樣:

盤點| 高頻交易都有哪些著名的演算法?

對於這種情況,有一個非常簡單的探測方法,即發一個最小額度的限價單在spread里,緊跟著取消這個訂單。比如這個例子中,發出一個賣價為99的限價單然后取消。因為這個價格本身對不上顯式的買價(98),如果沒有冰山單的存在,一定不會成交。但有冰山單的情況下,一旦交易所收到這個賣單,會立刻成交冰山單中對應的量,而之后的取消指令就無效了。這樣,以一種微小的成本,就可以發現市場中隱藏著的訂單。事實上,的確有人會做這種事情,頻繁的發單然后取消,在最優價差之間形成一種高頻擾動,用來探測隱藏單。

為了應對這種擾動探測,大家一般都不會直接掛單在spread里。而是會像之前那樣和普通的限價單掛在一起,這樣發生交易之后,你就很難推測消耗掉的究竟是正常的限價單,還是冰山訂單。那么應該怎么做呢?

首先有一個直接的思路。冰山訂單的存在,一定程度上反映了掛單人對市場情況的解讀,認為有必要使用冰山訂單而做出的判斷。需要強調的是,使用冰山訂單並不是沒有代價的,因為你隱藏了真實的需求,在屏蔽掉潛在的攻擊者的同時,也屏蔽掉了真正的交易者!而且會使得成交時間顯著增加--因為沒人知道你想買/賣這么多,你只能慢慢等待對手盤的出現。所以當有人下決定發出冰山訂單的時候,也會有對市場情況的考慮,只有合適的時機才會做這種選擇。

什么是合適的時機?有一些數據應該是相關的,比如買賣價差spread,買單量對賣單量的比值等。對這些數據,你可以在歷史數據上做回歸分析,建立起他們和冰山訂單之間的線性/非線性模型。通過歷史數據訓練出來的這個模型,就可以作為你在實時交易時使用的冰山訂單探測器。這是 on the dark side of the market: identifying and analyzing hidden order placements 這篇論文使用的方法。

基本模型可以定義為:f(spread,bidsize/offersize,……) = probability(iceberg)

如果你想玩高深的,還可以在此基礎上做hmm,svm,神經網絡之類的高級模型,但基本思路是一致的:通過盤口分析計算存在冰山訂單的概率。

上面說的這個方法,看起來很高級,實際效果如何呢?我想大家也看出來了,這種塑模不是很精確。作為事后分析手段用來說明什么情況下可能會出現冰山訂單還不錯,但是作為實時交易的探測器就不是很放心。因為使用的資訊太模糊了,而且說到底塑模的對象只是一種相關性,沒有什么保證冰山訂單的發送者一定是按照這個邏輯出牌的。

所以接下來介紹的,才是真正具有高頻玩家神采的方法,來自 prediction of hidden liquidity in the limit order book of globex futures 這篇論文。

高頻世界里,有一條永恒的塑模準則值得銘記:先看數據再塑模。如果你看了上面的介紹就開始天馬行空的思考數學模型,那基本上是死路一條。我見過很多年輕人,特別有熱情,一上來就開始做數學定義,然后推導偏微分方程,數學公式寫滿一摞紙,最後一接觸數據才發現模型根本行不通,這是非常遺憾的。

而看了數據的人會怎么樣呢?他很可能會發現,對於冰山訂單的處理,交易所的規則是非常值得尋味的。有的交易所是這樣做的:一個冰山訂單包含兩個參數,v表示訂單總量,p表示公開顯示的量。比如v=100,p=10的冰山單,實際上隱藏的量是90。如果有針對這個訂單的交易發生,比如交易量10,交易所會順序發出三條資訊:

成交10

order book的top bid size -10

新bid +10

這三條資訊一定會連續出現,並且第三條和第一條的時差dt很小。這樣做的原因是盡管冰山訂單存在隱藏量,但是每次的交易只能對顯示出的量(p)發生,p被消耗掉以后,才會從剩余的隱藏量中翻新出一分新的p量。這樣,每個人從交易所收到的資訊仍然可以在邏輯上正確的更新order book,就好像冰山訂單並不存在一樣。

因此,一旦在數據中觀察到這個規律,我們就可以非常有把握的判定市場中存在冰山訂單,並且連p的值都可以確定!接下來的關鍵問題是,如何確定v的值,即判斷這個冰山訂單的剩余存量有多少?

這個問題從本質上說沒法精確求解,因為v和p都是由下單人自己決定的,可以是任意值。但可以從兩點考慮:第一,兩個值都是整數;第二,人類不是完美的隨機數產生器,下決定會遵循一定規律。

從這兩點出發,可以對v和p建立概率模型,即計算一個給定的(v,p)值組合出現的概率是多少?這里不去深入探討數學分析,感興趣的朋友可以自己去看原文。簡單說,可以在歷史數據上通過kernel estimation技術來估算他們的概率密度函數的形狀。順帶一提,如果你親手編寫過這種估算程式,就會理解我為什么在“要想成為一名優秀的 quant 需要什么樣的編程水平?”這個答案中如此強調編程的重要性。在數據上估算出來的概率密度函數可能會是這樣的:

盤點| 高頻交易都有哪些著名的演算法?

這樣,當你在實時數據中觀測到一個p的值時,就可以得出對應的v值的條件概率密度函數,即上圖的一個切面,比如(p = 8):

盤點| 高頻交易都有哪些著名的演算法?

接下來顯然就很容易計算v最可能是什么值了。這條函數曲線還有一個重要的作用是幫助你動態評估剩余存量,比如當你觀察到已經有5份p被消耗掉,即可推出v>=40,由上圖即可推出新的v值和剩余存量(v-5p)。

綜上,演算法的核心在於,通過在實時數據中監測短時間內連續出現的三條相關記錄判斷冰山訂單的存在,而對冰山訂單的量化則通過由歷史數據訓練出的概率模型來完成。

相信你也會看出,這種演算法並不是什么作弊神器。它只是利用市場上的公開數據所做的一種推測。而且這個推測也僅僅是基於概率的,更多的應該是作為一種參考。它對做市商這種流動性提供者很有意義,可以使他們避免因為對局勢的誤判而遭受損失。但如果你想用它來作為一種攻擊手段,覺得自己能發現隱藏大單而去front run,那實在是很不明智的選擇。

最後,這種演算法也只是針對特定的交易所。其他的交易所也許不會采用同樣的冰山訂單處理方式。所以真正有價值的是這種從實際數據出發的塑模思路,具體的演算法並不值錢。

這個小演算法給你展示了高頻交易領域的“冰山一角”。它看起來也許不算很復雜,但是我卻很喜歡。因為它清晰地展示了什么叫做先有思路,再有量化。因為有“冰山訂單”這樣一個從經濟學基本的供需關係出發的真實需求,通過分析實際數據找到一絲線索,最後通過數學模型刻畫出定量的規則,這才是漂亮的規則研發。

如果違背這個原則,一上來就去搬各種高級的模型去套數據,指望模型自動給你產生交易信號,這在我看來無異於癡人說夢。遺憾的是,這個夢的確太過誘人,而這個世界也從來不缺少莽夫。

且行且珍惜。

【免責聲明】本文僅代表作者本人觀點,與本網站無關。本網站對文中陳述、觀點判斷保持中立,不對所包含內容的準確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,並請自行承擔全部責任。






Empty