我們如何對做市算法(HFT)進行逆向工程?
考慮一個市場參與者 $ A $ 誰在特定交易所的許多大盤股中機械地遵循自動流動性提供算法(HFT)。
進一步假設我們能夠觀察到所有訂單 $ A $ 並且我們知道所使用的算法 $ A $ 僅將公開市場數據作為輸入。 $ A $ 以零庫存開始和結束所有交易日。
我們想對使用的算法進行逆向工程 $ A $ . 我們稱這個算法 $ f(…) $ .
逆向工程算法的第一步 $ f(…) $ 將收集算法的潛在輸入變數,這些變數以後可用於推斷 $ f(…) $ .
我們面臨的第一個問題是我們應該收集哪些輸入變數才能進行逆向工程 $ f(…) $ .
作為起點,我們可以考慮Avellaneda & Stoikov (2008)中使用的輸入變數。在Avellaneda & Stoikov (2008)中,作者推導出了一個理性的做市商(非專業人士)應該如何在限價訂單簿市場中設置他的買入和賣出報價。結果顯然取決於論文中所做的假設和模型選擇。
Avellaneda & Stoikov (2008)中的最優出價(或要價)是以下輸入的函式:
- 交易者的保留價格,它是證券價格的函式 ( $ S $ ), 做市商的目前庫存 ( $ q $ )和距離終端等待時間( $ T-t $ )
- 交易者的相對風險厭惡程度( $ \gamma $ )(顯然很難觀察到!)
- 新買賣報價的頻率 ( $ \lambda_{bid} $ 和 $ \lambda_{ask} $ )
- 新買價和賣價頻率的最新變化( $ \delta\lambda_{bid} $ 和 $ \delta\lambda_{ask} $ )
為了能夠進行逆向工程,我們應該收集哪些潛在的輸入變數 $ f(…) $ ?
我會嘗試一下,但這是一個非常廣泛的問題。
直接回答:貝氏模型經常使用“對方被告知的機率”。
間接答案:我認為您的假設是該算法單獨對每隻股票進行操作,並且不知道它在任何其他股票中的作用。但是,該算法很可能正在做一些你還沒有看到的對沖。您應該查看類似的產品(或建構合成籃子),看看您的算法是否在其他產品的報價大小/價格發生變化時改變了它的報價大小/價格。(也有可能該算法知道它在所有股票中的所有訂單/頭寸,並且它比其他人更傾向於一些買/賣,因為它試圖拉平整個投資組合的 delta (beta)。)
如果您確定該算法正在處理僅以該股票的訂單簿作為輸入的個人名稱,那麼我將研究活動訂單以查看它何時以及為何退出。(也許唯一的活躍訂單是在一天結束時的扁平化,在這種情況下,我會研究被取消的訂單。)通過出價和報價賺一點錢很容易有時,但在某些時候,除非您知道何時讓開(和/或對沖),否則您會被碾壓。我還會尋找算法暫停的時間。有時它在書中沒有出價和出價嗎?如果是這樣,這是它不確定的時候,或者它處於它的位置限制(應該很容易區分哪個是哪個)。當它“不確定”時,看看它在“確定”時沒有發生什麼,這可能會有所幫助。這將幫助您消除可能的參數。
很久很久以前,我們使用微型定價器來估算實際價格的位置,使用諸如要價交易數量與出價交易數量以及出價和要價總和等因素。最初,微型定價者作為獨立的高頻流動性接受者。然後它成為做市算法中的一部分,只是一種知道何時取消訂單的方法。