Hawkes Processes for Order Arrival and Market Event Modeling
數位指紋文章使用三數向量-hawkes_mu、hawkes_alpha、hawkes_beta-作為參與者行為簽章的計時組成部分,並斷言做市商表現出強烈的自激勵。它從未說明這三個數字來自哪裡,它們是根據什麼估計的,或者你應該在多大程度上相信它們。本文是缺少的一半:估計器、適配診斷、一個比三個參數本身更重要的導出量-分支比 。
這裡所測試的主張是狹窄且可檢查的。訂單流是自我激勵的:一次激進的賣出使得下一次激進的賣出更有可能,這是任何時變率的泊松模型都無法重現的。如果這是真的,那麼適合原始交易時間戳的霍克斯過程應該 (a) 在保留可能性上擊敗泊松基線,(b) 產生嚴格在 0 和 1 之間的分支比,以及 (c) 通過時間重新縮放擬合優度測試。關於股票期貨,(a) 和 (b) 點被廣泛報導。 (c) 點是已發表的霍克斯論文通常會安靜下來的地方,也是該部落格上從未檢查過加密磁帶的地方。
兩個背景本部落格已經擁有,所以這裡不再重新匯出。自激反饋結構——事件觸發更多同類事件,低於閾值的亞臨界和高於閾值的失控——具體導出為作為交易信號的清算級聯中的複製數,包括幾何級數總移動、超臨界閃崩機制和作為約束它的三個因素之一的熔斷機制。下面的支化比 是 的點過程模擬。這裡真正附加的是: 是可以僅根據交易時間戳實時估算的,沒有清算圖,沒有訂單簿深度,也沒有槓桿假設。這就是使用點處理機械的全部原因。
時鐘時間是錯誤取樣軸的前提是超越時間條]的基本論點,它透過建立更好的條來解決這個問題。本文以不同的方式解決了這個問題:根本不採樣,而是直接對事件時間進行建模。
點過程基礎

點過程是一組隨機的事件時間,由其條件強度 定義 - 給定完整歷史記錄 的瞬時到達率:
就是齊次泊松過程。非齊次泊松過程讓 遵循確定性形狀(例如 U 形日內曲線),但仍然假設條件獨立:知道剛剛發生的交易並不能告訴您另一筆交易是否即將發生。實際訂單流違反了這個假設,而這種違反正是本文的全部主題。 中的星號是整個區別 - 它標誌著對歷史的依賴。
霍克斯過程

單變量霍克斯過程具有強度
其中 為背景強度(外源到達), 為激勵內核。每個事件都會使強度增加 ,然後隨著 的形狀而衰減。最近發生的一系列事件會產生高強度,使進一步發生的事件更有可能發生——這個過程會記住自己的歷史。
分支率
是由一個父級觸發的子級事件的平均數量。平穩性要求;平穩平均強度為 ,發散為 。因此, 將總活動分為外源部分 和內源部分 :在 ,70% 的事件是對其他事件的反應,而不是對市場以外任何事件的反應。
這正是清算級聯中級聯倍增器的亞臨界/超臨界分裂,從不同的方向達到。計算成本的差異: 需要強制賣出密度和即時帳簿深度的正向圖,這兩者都是基於槓桿分佈假設的估計。 需要時間戳記列表。
Filimonov 和 Sornette (2012) 報告稱,1998 年至 2007 年間,E-mini S&P 500 期貨中 從大約 0.3 上升到 0.7 以上。 Hardiman、Bercot 和 Bouchaud (2013) 將相同的合約置於 附近,並以 指數的冪律核為空滯後。兩者都是十多年前的股票期貨結果,並且都不會在未經衡量的情況下轉移到加密貨幣。複製它們不是本文的重點;檢查相同的製度是否適用於不同參與者的 24/7 永續期貨磁帶,並且沒有市場開盤中斷。
核函數選擇
指數,,帶 。馬可夫,因此似然度具有 -per-event 遞歸(如下)。這是每一次實際配合的開始。
冪律,。再現長記憶聚類,但丟失遞歸 - 似然評估變為 或需要截斷。
指數總和,。使用 時間尺度近似冪律衰減,同時保持遞歸。 到 通常就足夠了, 的時間跨度為毫秒到分鐘。
加密貨幣貿易到達量是呈指數衰減還是冪律衰減是一個具有似然比答案的經驗問題,並且它是在下面測量的而不是引用的。
多元霍克斯過程

對於 事件類型,
其中 描述型 如何激發型 。對於指數核,分支矩陣為 ,平穩性需要譜半徑 。與最大特徵值相關的 特徵向量確定了主要激勵模式 - 哪一組事件類型傾向於一起觸發。
訂單簿的有趣例子是 :市場買入、市場賣出、限價買入、限價賣出、取消買入、取消賣出。此矩陣有 36 個條目,是該部落格中沒有的 Hawkes 工具包的一部分。請注意,其預測條目之一已經在沒有詞彙的情況下憑經驗記錄:連續級別上的相關質量取消(牆拉動)直接在隊列位置和訂單簿牆分析中測量。擬合的 與表示為內核的現象相同,並且兩個測量值應該一致。如果他們不這樣做,那麼其中之一就是錯的。
跨資產和多場所版本是具有不同標籤的相同機制:非對角線內核捕獲超前滯後和傳染,Shi、Broussard 和 Booth (2019) 在 2010 年閃電崩盤期間對 30 只道指股票使用了這一點,發現了具有可識別傳染源的不對稱交叉激勵。
## 校準

最大似然
對於 上的事件時間 :
第一個術語獎勵事件發生的強度;第二個懲罰沒有產生任何結果的強度。
對於指數核,遞迴
每個事件在 處給出 ,並且補償器關閉:
總成本為 ,這使得百萬事件適合常規。在積極約束下使用 L-BFGS-B 進行最佳化。
在您信任輸出之前,值得了解兩種故障模式。似然曲面像 一樣嚴重平坦,因此近臨界擬合可以報告位於 中的 幾乎水平的山谷中的看起來自信的點估計 — 始終在 中分析似然性,而不是讀取優化器的 Hessian 矩陣。在多變量情況下,參數計數隨著 的增長而增長,因此在 之前,您需要在核心範數上進行群組套索,或者矩陣是擬合雜訊。
EM 和非參數估計
EM 將分支結構視為潛在的:每個事件要么是來自 的移民,要么是某個早期事件的後代。 使用 HMMs 進行狀態檢測] 的 Baum-Welch 部分介紹了通用 E 步/M 步機制、局部最優警告和多重初始化規則,並且此處相同。 Hawkes 特定部分是 E 步量本身:
是哪個事件導致哪個的後驗 - 一個可解釋的輸出,而不僅僅是一個最佳化中間值。按事件類型匯總,它給出了磁帶的屬性:最後一小時的銷售的這一部分是由先前的銷售觸發的,該部分是從外部到達的。它還允許您以非參數方式估計 作為網格上的分段常數,這就是您在不承諾替代方案的情況下檢查指數假設的方式。成本: 用於完整的 矩陣,因此它不會在沒有近似的情況下擴展到大致 事件。
Bacry 和 Muzy 的譜方法是另一種無模型路線 - 固定霍克斯過程的功率譜密度因式為 ,因此估計協方差密度並求解因式分解可恢復內核,而無需假定參數形式。
應用於真實加密交易資料

本節中的每個數字都必須來自真實數據的實際擬合。恢復注入模擬器的參數並不能證明任何事情,除了優化器有效之外。
數據:幣安 BTC/USDT aggTrade 在定義的視窗內的時間戳,視窗、符號和事件計數在每個報告的數字旁邊明確說明。 aggTrade 將來自一個接受者訂單的相同價格的成交匯總到一條記錄中,這是這裡的正確單位 - 一個激進訂單是一個事件,而不是每個交易對手成交一個事件。
單變數擬合
import numpy as np
import pandas as pd
from tick.hawkes import HawkesExpKern
trades = pd.read_parquet("binance_btcusdt_aggtrades.parquet")
t0 = trades["transact_time"].iloc[0]
ts = ((trades["transact_time"] - t0) / 1000.0).to_numpy(dtype=np.float64)
T = ts[-1]
learner = HawkesExpKern(decays=BETA_GRID, penalty="none", verbose=False)
learner.fit([ts])
mu_hat = learner.baseline[0]
alpha_hat = learner.adjacency[0, 0]
n_hat = alpha_hat / BETA_CHOSEN
print(f"events = {len(ts)}")
print(f"window = {T/3600:.2f} h")
print(f"mu = {mu_hat:.4f} events/s")
print(f"n = {n_hat:.4f}")
print(f"lambda_bar (model) = {mu_hat/(1-n_hat):.4f} events/s")
print(f"lambda_bar (data) = {len(ts)/T:.4f} events/s")
最後兩個列印是第一次健全性檢查,無需任何成本:如果模型的平穩平均強度 未接近經驗事件率,則無論優化器報告什麼,擬合都是錯誤的。
不應用手固定。描繪衰減網格上的可能性並報告輪廓,因為 和 強烈權衡,並且 可以穩定,而兩個參數都不穩定。
內核實際上會呈指數衰減嗎?
文獻中的冪律主張來自 2013 年的股票期貨論文。直接測試它:將指數核和冪律核擬合到同一磁帶上,透過對保留數據(不是樣本內的數據,因為冪律有一個額外參數)的對數似然進行比較,並分別查看大額交易後的經驗強度衰減。
large = ts[trades["quantity"].to_numpy() > LARGE_TRADE_THRESHOLD]
lags = np.logspace(-3, 2, 60) # 1 ms .. 100 s
rate = np.empty(len(lags) - 1)
for k in range(len(lags) - 1):
lo, hi = lags[k], lags[k + 1]
counts = [
np.searchsorted(ts, t0_ + hi) - np.searchsorted(ts, t0_ + lo)
for t0_ in large
]
rate[k] = np.mean(counts) / (hi - lo)
繪製雙對數,指數核彎曲;冪律是直的。該圖是比任何一個似然數更有力的證據,因為它顯示了失配的「位置」——通常指數對尾部的擬合不足,而在前幾毫秒的擬合過度。
分支矩陣
最小可行多元模型:二維,激進買入和激進賣出,以 is_buyer_maker 分隔。如果 L3 資料可用,則擴展到取消。
buys = ts[~trades["is_buyer_maker"].to_numpy()] # taker bought
sells = ts[ trades["is_buyer_maker"].to_numpy()] # taker sold
mv = HawkesExpKern(decays=BETA_CHOSEN, penalty="l2", C=C_CV, verbose=False)
mv.fit([buys, sells])
G = mv.adjacency / BETA_CHOSEN # branching matrix
rho = np.max(np.abs(np.linalg.eigvals(G)))
print("G =\n", G)
print(f"spectral radius = {rho:.4f}") # must be < 1
要發布的兩個量是矩陣本身及其譜半徑。不對稱性是有趣的部分:賣出-刺激-賣出是否超過買入-刺激-買入,以及交叉項是否對稱,這些都是關於加密磁帶的可測試陳述,但這裡沒有人測量過。
擬合優度:時間重標度
時間重縮放定理:如果模型正確,則變換後的時間 形成單位速率泊松過程,因此差異 為 。
from scipy.stats import kstest, expon
compensator = np.empty(len(ts))
for i, ti in enumerate(ts):
compensator[i] = mu_hat * ti + (alpha_hat / BETA_CHOSEN) * np.sum(
1 - np.exp(-BETA_CHOSEN * (ti - ts[:i]))
)
tau = np.diff(compensator)
stat, pval = kstest(tau, expon(scale=1.0).cdf)
print(f"KS = {stat:.4f}, p = {pval:.4g}, N = {len(tau)}")
閱讀此測驗時需要注意一點: 有數十萬個,KS 測驗會因微小的錯誤指定而被拒絕。 的微小 p 值本身幾乎沒有任何意義;資訊輸出是 相對於 的 QQ 圖和 KS 統計量本身,它是無標度效應大小。報告兩者,並誠實地報告它們 - 如果指數內核在加密磁帶上被拒絕,那麼這是一個值得發布而不是埋葬的結果,本著與魯棒邊緣上誠實的負面結果相同的精神。
n 是否真的不穩定?
是即時脆弱性指標的說法不斷被引用,但很少經過測試。測試很簡單:在平靜時期和已知的加密級聯日期的滾動視窗上估計 ,並查看它是在事件之前還是僅在事件期間上升。僅與崩潰同時出現峰值的數量是一種描述,而不是警告。
穩定性和穩健性

除非您知道當您更改不重要的東西時它會移動多少,否則安裝好的 並不是一種測量。四個特定陷阱,依造成傷害的大致順序排列。
**時間戳分辨率產生自激。 ** Binance aggTrade 時間戳記是毫秒解析度。真正相隔微秒的交易會崩潰到相同的毫秒標記上,霍克斯似然將同時發生的事件視為最大激勵—— 的評估恰好為零滯後。這使 向上,並且偏差隨著活動而增加,這意味著在您最希望數字值得信賴的突發期間最糟糕。量化它:計算與鄰居共享時間戳的事件的比例,然後重新調整這些在毫秒容器內均勻抖動的事件,並報告 移動了多少。如果抖動對 的影響超過置信區間,則標題數字正在衡量時鐘,而不是市場。
**交換批次處理。 ** 交換不會在事件發生時發出事件;它們在匹配和傳播管道刷新時發出它們。幣安對清算流每秒一次的限制是有記錄的先例——看起來像群集到達的流在一定程度上是發布者的產物。貿易提要中的任何批次都會在到達間隔分佈上留下週期性印記,Hawkes 核心會很樂意將其吸收到 中。直接檢查:在擬合任何內容之前,對到達間隔時間進行直方圖並在批次期間找到峰值。
**對假設衰減的敏感度。 ** 取決於 ,並且 通常是固定的或網格搜尋的,而不是聯合估計的。將 報告為 在合理範圍內的函數,而不是作為點。如果曲線平坦,則該數字為實數;如果密切關注,那麼你已經選擇了你的答案。
**估計視窗。 ** 在一個小時、一天和一周內的估計會有所不同,部分原因是該過程確實是非平穩的,部分原因是較長的窗口混合了區域,這通過將區域間變化與區域內聚類合併而誇大了表觀激勵。報告視窗長度掃描。讀取上升的 的正確方法是針對其他時間測量的相同視窗長度,而不是針對來自不同視窗的數字。
這裡的模式是在GPU精度陷阱中建立的模式:乾淨運行並返回可信數字的管道並不是正確數字的證據,唯一的防禦措施是擾亂不重要的輸入並確認輸出不會移動。
這會帶給你什麼,不會帶給你什麼

與微觀結構理論的三個聯繫保持簡短,因為該部落格在其他地方詳細介紹了每個聯繫。
**價格形成。 ** 在 Kyle (1985) 中,做市商根據混合知情交易和噪音交易的淨訂單流進行定價;影響係數 和深度 與後續文獻一起列出——包括反對凱爾線性的證據——在滑點成本模型中。 Hawkes 讀數將 映射到真正的新訊息,將自激事件映射到機械反應,使 成為噪音驅動流量份額的可測量代理。
**波動性聚類。 ** 聚類、持久性、平穩性條件 和長期變異數 — 在結構上與 和 完全相同 — 包含在 crypto 的 GARCH 波動性預測中。真正的新主張是 Bacry、Delattre、Hoffmann 和 Muzy(2013):近臨界霍克斯過程產生回報序列,其波動性自相關按照冪律衰減,任何地方都沒有明確的波動性模型。波動性聚集是自激勵訂單流的一個新興屬性,而不是被假設的。
**Epps 效應。 ** Bacry 和 Muzy 表明,雙變量霍克斯模型純粹根據兩個過程之間激勵的有限傳播時間再現了高採樣頻率下測量到的相關性的衰減,無需額外的機制。
在執行時,自激勵所遵循的處方——切片後減速,安靜時段加速——已經是TWAP、VWAP和POV執行演算法中POV反饋環路部分的核心,而對幼稚等切片的批評是Almgren-Chriss。霍克斯擬合添加的不是建議,而是數字:擬合的內核半衰期 表示來自您自己的切片的激發需要多長時間才能衰減,這會將“稍等一下”轉換為特定的暫停長度。
限制

**無抑制。 ** 經典模型只允許事件增加強度。市場則相反:吸收壓力的大限價單可以阻止激進的交易。具有抑制功能的 Hawkes 程序允許負內核值,但代價是必須強制執行 。這對於給定擬合是否重要在非參數核估計中可見 - 如果分段常數 在某個滯後處降至零以下,則約束模型正在與資料作鬥爭。
**非平穩性。 ** 標準模型假設平穩性,加密貨幣是 24/7 但不統一:流動性、參與者組合和事件率都會在一天中和融資時間戳附近發生變化。時變基線 可以以更多參數為代價來處理此問題,而上面的估計視窗靈敏度就是您確定是否需要它的方法。
## 概括

Hawkes 流程之所以值得使用,原因之一是:它將訂單流的聚類分解為單個可解釋的數字,即分支比率 ,可以僅根據時間戳進行計算,無需重建訂單簿,也無需對槓桿或定位進行假設。這使得它成為目前市場內生性的最便宜的估計值——同樣的問題清算級聯透過給出了昂貴的答案。
機制很簡單:指數核透過 遞歸給出 可能性,EM 給出關於哪個事件導致哪個事件的可解釋後驗,時間重新縮放給出真正的擬合優度測試而不是合理性論證。並不簡單的是信任輸出。毫秒時間戳記舍入使 在突發期間精確向上偏置,交換批次印記結構內核將吸收,並且 隨假設的衰減和估計視窗一起移動。在沒有這四種敏感性的情況下報告的支化比是一個數字,而不是測量值。
參考文獻與進一步閱讀
- 霍克斯,A.G.(1971)。 「一些自激和互激點過程的光譜。」* 生物計量學*,58(1), 83-90。
- Bacry, E.、Mastromatteo, I. 與 Muzy, J.-F.(2015 年)。 「霍克斯金融流程。」* 市場微觀結構與流動性*.
- Shi, F.、Broussard, J. P. 與 Booth, G. G. (2019)。 「使用多元霍克斯過程對股市中的閃電崩盤行為進行建模。」
- Hardiman, S.、Bercot, N. 和 Bouchaud, J.-P.(2013 年)。 「金融市場的關鍵反身性:霍克斯過程分析。」
- Bacry, E. 與 Muzy, J.-F.(2014 年)。 「價格和交易高頻動態的霍克斯模型。」* 量化金融*.
- Bompaire, M.、Bacry, E. 與 Gaiffas, S. (2017)。 “tick:用於統計學習的 Python 庫,重點是霍克斯過程。” JMLR.
- Filimonov, V. 與 Sornette, D. (2012)。 「量化金融市場的反身性。」
- 庫馬爾,P.(2021)。 「高頻做市的深度霍克斯流程。」
- 勾選庫文件:Hawkes module.
- Morse, S. “Hawkes 進程的 Python 類別。”(教程和程式碼)
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.