Hawkes Processes for Order Arrival and Market Event Modeling
デジタル指紋の記事は、参加者の行動シグネチャのタイミング要素として 3 つの数値ベクトル hawkes_mu、hawkes_alpha、hawkes_beta を使用し、マーケット メーカーが強い自己興奮を示すと主張しています。これら 3 つの数字がどこから来たのか、何から推定したのか、どの程度信頼すべきかについては決して述べられていません。この記事は、推定量、適合診断、および 3 つのパラメーター自体よりも重要であることが判明した 1 つの導出量である 分岐比 の、欠けている半分です。
ここで検証されている主張は範囲が狭く、検証可能です。注文フローは自己興奮的です。時間変動レートのポアソン モデルでは再現できないように、積極的な売りは次の積極的な売りの可能性を高めます。それが本当であれば、生の取引タイムスタンプに適合したホークス プロセスは、(a) ホールドアウトされた尤度でポアソン ベースラインを上回り、(b) 厳密に 0 と 1 の間の分岐比を生成し、(c) 時間再スケーリング適合度テストに合格するはずです。ポイント (a) と (b) は株式先物に関して広く報告されています。ポイント (c) は、出版されたホークス論文が通常沈黙している場所であり、このブログでは暗号テープが一度もチェックされていない場所です。
2 つの背景はこのブログがすでに所有しているため、ここでは再派生されません。自己励起フィードバック構造 — イベントがより多くの同じ種類のイベントを引き起こし、しきい値以下では未臨界、しきい値以上では暴走 — は、取引シグナルとしての清算カスケード] の再生産数 として具体的に導出されます。これには、等比級数のトータルムーブ、超臨界フラッシュクラッシュ体制、およびそれを束縛する 3 つのものの 1 つとしてのサーキットブレーカーが含まれます。以下の分岐比 は、その の点プロセスの類似物です。ここで本当に加算的なのは、 が、清算マップ、注文帳の深さ、レバレッジの仮定なしで、取引タイムスタンプのみからリアルタイムで推定できることです。それが、ポイントプロセス機械を使う理由のすべてです。
時計の時間が間違ったサンプリング軸であるという前提は、時間バーを超えて] の基礎となる議論であり、より良いバーを構築することで問題を解決します。この記事では、まったくサンプリングを行わず、イベント時間を直接モデル化することで、この問題を別の方法で解決します。
点過程の基礎

ポイント プロセスは、条件強度 (完全な履歴 を考慮した瞬間到着率) によって定義されるイベント時間のランダムなセットです。
均一ポアソン過程は の場合です。不均一ポアソン過程により、 は決定論的な形状 (たとえば、U 字型の日中曲線) に従いますが、依然として条件付きの独立性を前提としています。つまり、取引が起こったばかりであることを知っていても、次の取引が差し迫っているかどうかについては何もわかりません。この仮定は実際の注文フローが違反するものであり、その違反がこの記事の主題全体です。 のアスタリスクは全体の区別であり、履歴への依存を示します。
ホークスプロセス

単変量ホークス過程には強度がある
は バックグラウンド強度 (外来到着)、 は 励起カーネル です。各イベントは強度を 増加させ、その後 の形状で減衰します。最近のイベントのクラスターは高い強度を生成し、さらなるイベントが発生する可能性が高くなります。プロセスはそれ自体の歴史を記憶しています。
分岐率
は、1 つの親によってトリガーされる子イベントの平均数です。定常性には が必要です。定常平均強度は で、 として発散します。したがって、 は、総活動を外生部分 と内生部分 に分割します。 では、イベントの 70 パーセントは、市場の外部の何かに対する反応ではなく、他のイベントに対する反応です。
これはまさに、別の方向から到達した 清算カスケード] におけるカスケード乗数の亜臨界/超臨界の分割です。計算コストの違い: では、強制売り密度とライブブック深度のフォワード マップが必要です。どちらも、レバレッジ分布に関する仮定に基づいた推定値です。 にはタイムスタンプのリストが必要です。
Filimonov と Sornette (2012) は、1998 年から 2007 年にかけて E-mini S&P 500 先物で が約 0.3 から 0.7 以上に上昇したと報告しました。Hardiman、Bercot、Bouchaud (2013) は、同じ契約を 付近に置き、 についての指数のべき乗則カーネルを短くしました。遅れます。どちらも10年以上前の株式先物取引の結果であり、どちらも測定せずに暗号通貨に転送したものではありません。それらを再現することはこの記事の目的ではありません。参加者が異なる24時間365日の永久先物テープで同じ体制が維持され、市場開放の不連続性がないかどうかを確認することです。
カーネルの選択
指数、、。マルコヴィアンなので、確率はイベントごとに の再帰になります (下記)。ここからすべての実践的な調整が始まります。
べき乗則、。ロングメモリ クラスタリングを再現しますが、再帰が失われます。尤度評価は になるか、切り捨てが必要になります。
指数の合計、。再帰を維持しながら、 タイムスケールでべき乗則減衰を近似します。通常は から で十分で、 の範囲はミリ秒から分です。
暗号通貨取引の到着が指数関数的に減衰するのか、それともべき乗則として減衰するのかは、尤度比で答えられる経験的な質問であり、それは引用されるのではなく、以下で測定されます。
多変量ホークス過程

イベント タイプの場合、
ここで、 は、タイプ がタイプ を励起する方法を示します。指数関数的カーネルの場合、分岐行列は であり、定常性にはスペクトル半径 が必要です。最大の固有値に関連付けられた の固有ベクトルは、主要な励起モード、つまりどのイベント タイプのグループが同時に発生する傾向があるかを特定します。
オーダーブックの興味深いインスタンス化は です: 成行買い、成行売り、指値購入、指値売り、買いキャンセル、売りキャンセル。このマトリックスには 36 のエントリがあり、このブログが他に提供していないホークス ツールキットの一部です。その予測されたエントリの 1 つは、ボキャブラリーなしですでに経験的に文書化されていることに注意してください。連続レベルにわたる相関大量キャンセル (ウォール プル) は、キューの位置とオーダーブックのウォール分析] で直接測定されます。適合した はカーネルとして表される現象と同じであり、2 つの測定値は一致するはずです。そうでない場合は、そのうちの 1 つが間違っています。
クロスアセットバージョンとマルチ会場バージョンは、ラベルが異なる同じ機械です。非対角カーネルはリードラグと伝染を捕捉し、Shi、Brousard、Booth (2019) は、2010 年のフラッシュクラッシュの際にダウ株 30 銘柄に対してまさにこれを使用し、特定可能な伝染源による非対称の相互励起を発見しました。
キャリブレーション

最大尤度
のイベント時間 :
最初の項では、イベントが発生した場所の激しさを評価します。 2 つ目は、何も生み出さなかった強度にペナルティを与えます。
指数カーネルの場合、再帰
イベントごとに で を与え、補償器が閉じます。
総コスト 。これにより、100 万回のイベントの適合が日常的に行われます。正の制約の下で L-BFGS-B を使用して最適化します。
出力を信頼する前に知っておく価値のある 2 つの障害モード。尤度曲面は としてひどく平坦になるため、臨界近似では、 の とほぼ同じ谷に位置する自信に満ちた点推定値が報告される可能性があります。オプティマイザのヘッセ行列を読み取るのではなく、常に で尤度をプロファイリングします。また、多変量の場合、パラメーター数は に応じて増加するため、 を超えると、カーネル ノルムでグループ ラッソが必要になるか、行列がノイズをフィッティングしています。
EM およびノンパラメトリック推定
EM は分岐構造を潜在的なものとして扱います。各イベントは、 からの移民か、以前のイベントの子孫のいずれかです。一般的な E ステップ/M ステップの仕組み、局所最適化の警告、および複数初期化の規律については、HMMs による体制検出] の Baum-Welch セクションで説明されており、ここでも同じです。ホークス特有の部分は E ステップ量そのものです。
は、どのイベントがどの原因を引き起こしたか に対する事後結果であり、単なる最適化の中間ではなく、解釈可能な出力です。イベント タイプごとに合計すると、テープの属性がわかります。過去 1 時間の売りのこの部分は、以前の売りによって引き起こされたものであり、その部分は外部から到着したものです。また、 をグリッド上の区分定数としてノンパラメトリックに推定することもできます。これは、代替案にコミットせずに指数関数の仮定をチェックする方法です。コスト: 完全な マトリックスに対して であるため、近似なしではおおよそ イベントを超えてスケールされません。
Bacry と Muzy のスペクトル法は、もう 1 つのモデルフリーのルートです。つまり、定常ホークス過程のパワー スペクトル密度は として因数分解されるため、共分散密度を推定して因数分解を解くと、パラメトリック形式が仮定されていないカーネルが復元されます。
実際の暗号資産ティックデータへの適用

このセクションのすべての数値は、実際のデータに対する実際の適合から得られる必要があります。シミュレータに注入したパラメータを回復しても、オプティマイザが機能していること以外の証拠にはなりません。
データ: Binance BTC/USDT aggTrade のタイムスタンプは、定義されたウィンドウにわたっており、レポートされるすべての数値とともにウィンドウ、シンボル、イベント数が明示的に記載されています。 aggTrade は、1 つのテイカー注文から同じ価格での約定を 1 つのレコードに集約します。これは、ここでは適切な単位です。1 つのアグレッシブ注文は、1 つのイベントであり、カウンターパーティー約定ごとに 1 つのイベントではありません。
単変量フィット
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")
最後の 2 つの出力は、コストがかからない最初の健全性チェックです。モデルの定常平均強度 が経験的イベント率の近くに達しない場合、オプティマイザーが何を報告したかに関係なく、適合は間違っています。
は手で修正しないでください。 と は大きくトレードオフし、どちらのパラメーターも安定しない場合でも は安定する可能性があるため、減衰のグリッド上で尤度をプロファイリングし、そのプロファイルをレポートします。
カーネルは実際に指数関数的に減衰しますか?
文献におけるべき乗則の主張は、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 で区切られた 2 次元、積極的な買いと積極的な売り。 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
公開する 2 つの量は、行列自体とそのスペクトル半径です。非対称性は興味深い部分です。売り-興奮-売りが買い-興奮-買いを超えるかどうか、クロスタームが対称的かどうかは、ここにいる誰も測定したことのない暗号テープに関するテスト可能なステートメントです。
適合度: 時間の再スケーリング
時間リスケーリング定理: モデルが正しい場合、変換された時間 は単位速度のポアソン過程を形成するため、差分 は になります。
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)}")
このテストを読む際の注意点が 1 つあります。 が数十万であるため、KS テストは些細な仕様ミスで拒否されます。 の小さな p 値は、それ自体ではほとんど意味がありません。有益な出力は、 に対する の QQ プロットと、スケールフリーの効果量である KS 統計自体です。両方を報告し、正直に報告してください。指数関数的カーネルが暗号テープで拒否された場合、それは 堅牢なエッジに関する正直な否定的な結果] と同じ精神で、埋めるよりも公開する価値のある結果です。
n は実際に不安定か?
がリアルタイムの脆弱性指標であるという主張は頻繁に引用されますが、テストされることはほとんどありません。テストは簡単です。穏やかな期間と既知の暗号カスケード日付にわたるローリング ウィンドウで を推定し、それがイベントの前に上昇するかイベント中にのみ上昇するかを確認します。暴落と同時に急増する数量は説明であり、警告ではありません。
安定性と堅牢性

適合した は、重要ではないものを変更したときにどれだけ移動するかを知るまでは測定できません。 4 つの特定のトラップを、与えるダメージの大きさの大まかな順序で示します。
タイムスタンプの解像度は自己励起を生み出します。 Binance aggTrade のタイムスタンプはミリ秒の解像度です。まったくマイクロ秒間隔であった取引は同一のミリ秒スタンプに崩壊し、ホークス尤度は同時発生イベントを最大励起として読み取ります。 は正確にゼロラグで評価されました。これにより、 上方にバイアスがかかり、そのバイアスは活動とともに増大します。つまり、数値を最も信頼できるようにしたいバースト中はまさに最悪になります。それを定量化します。隣接イベントとタイムスタンプを共有するイベントの割合をカウントし、ミリ秒ビン内で均一にジッターしたそれらのイベントで再調整し、 がどれだけ移動したかを報告します。ジッターによって が信頼区間を超えて変化する場合、ヘッドラインの数値は市場ではなくクロックを測定しています。
Exchange のバッチ処理。 Exchange はイベントの発生時にイベントを発行しません。マッチングおよび配布パイプラインがフラッシュされるときにそれらを発行します。 Binance の清算ストリームの 1 秒あたり 1 回のスロットルは文書化された前例です。クラスター化された到着のように見えるストリームは、部分的にはパブリッシャーの人工物です。トレード フィードのバッチ処理により、到着間隔の分布に周期性が刻印され、ホークス カーネルは喜んで に吸収します。それを直接確認します。到着間隔のヒストグラムを作成し、何かをフィッティングする前にバッチ期間でのスパイクを探します。
想定される減衰に対する感度。 は に依存し、 は通常、共同推定ではなく固定またはグリッド検索されます。 を点としてではなく、妥当な範囲にわたる の関数として報告します。曲線が平坦な場合、数値は実数です。 が を厳密に追跡している場合は、答えを選択したことになります。
推定ウィンドウ。 1 時間、1 日、および 1 週間にわたって推定された は異なります。これは、プロセスが真に非定常であることと、ウィンドウが長くなるとレジームが混合され、レジーム間の変動とレジーム内のクラスター化が混同され、見かけの興奮が誇張されるためです。ウィンドウ長のスイープを報告します。 の上昇を読み取る正しい方法は、別の時間に測定された同じウィンドウ長に対して行うことであり、別のウィンドウからの数値に対して決して読み取ることはありません。
ここでのパターンは、GPU 精度のトラップ: クリーンに実行され、妥当な数値を返すパイプラインは正しい数値の証拠ではなく、唯一の防御策は、重要ではない入力を混乱させ、出力が動かないことを確認することです。
これで得られるものと得られないもの

微細構造理論との 3 つの関係については、ブログで詳しく説明しているため、短くしておきます。
価格形成。 Kyle (1985) では、マーケットメーカーは、情報に基づいた取引とノイズ取引を混合したネット注文フローに基づいて価格を設定しています。衝撃係数 と深さ は、カイルの線形性に対する証拠を含む後続の文献とともに スリッページ コスト モデル ] にまとめられています。ホークスの読み取りは、 を真に新しい情報にマッピングし、自己励起イベントを機械的反応にマッピングし、 をノイズによって駆動されるフローの割合の測定可能な代理にします。
ボラティリティ クラスタリング。 クラスタリング、永続性、定常条件 および長期分散 (構造的には および とまったく同じ) については、GARCH 暗号化 のボラティリティ予測] で説明されています。真に新しい主張は、Bacry、Delattre、Hoffmann、Muzy (2013) です。つまり、近臨界のホークス プロセスは、明示的なボラティリティ モデルがどこにもなく、ボラティリティの自己相関がべき乗則として減衰するリターン系列を生成します。ボラティリティ クラスタリングは、想定されるものではなく、自己励起注文フローの新たな特性として現れます。
エップス効果 Bacry と Muzy は、二変量ホークス モデルが、純粋に 2 つのプロセス間の励起の有限伝播時間から、高いサンプリング周波数で測定された相関の減衰を再現することを示しました。追加のメカニズムは必要ありません。
実行時には、自己励起から続く処方箋 (スライスの後に減速し、静かな期間には加速する) がすでに TWAP、VWAP、および POV 実行アルゴリズム] の POV フィードバック ループ セクションの中核となっており、単純な等分割スライスの批判は Almgren-Chriss] です。ホークス フィットで追加されるのはアドバイスではなく数値です。フィットされたカーネルの半減期 は、自分自身のスライスからの励起が減衰するまでにかかる時間を示し、「ちょっと待ってください」を特定の休止長に変換します。
制限事項

阻害なし。 古典的なモデルでは、イベントの強度の増加のみが許可されます。市場にはその逆が含まれています。つまり、指値注文の吸収圧力が大きいと、積極的な取引が妨げられる可能性があります。抑制のあるホークス プロセスでは、 を強制する必要がある代わりに、負のカーネル値が許可されます。これが特定の近似にとって重要かどうかは、ノンパラメトリック カーネル推定でわかります。区分定数 が遅れてゼロを下回った場合、制約付きモデルがデータと戦っています。
非定常性 標準モデルは定常性を前提としており、暗号通貨は 24 時間年中無休ですが均一ではありません。流動性、参加者の構成、イベントレートはすべて、1 日を通して、また資金調達タイムスタンプを中心に変化します。時変ベースライン は、より多くのパラメーターを犠牲にしてこれを処理します。上記の推定ウィンドウの感度は、それが必要かどうかを判断する方法です。
## まとめ

ホークス プロセスが機械化する価値がある理由は 1 つあります。それは、注文フローのクラスタリングを単一の解釈可能な数値 (分岐率 ) に分解します。この数値は、注文帳の再構築やレバレッジやポジショニングに関する仮定を必要とせず、タイムスタンプのみから計算可能です。これは、市場が現在どの程度内生的であるかを示す入手可能な最も安価な推定値になります。同じ質問 清算カスケード は、 を通じて高価に答えます。
機構は単純です。指数関数的カーネルは 再帰によって の尤度を与え、EM はどのイベントがどの原因を引き起こしたかについて解釈可能な事後分布を与え、時間再スケーリングは妥当性の議論ではなく実際の適合度テストを与えます。簡単ではないのは、出力を信頼することです。ミリ秒タイムスタンプの丸めにより、バースト中に が正確に上方にバイアスされ、カーネルが吸収するバッチ処理インプリント構造が交換され、 は想定される減衰と推定ウィンドウの両方で移動します。これら 4 つの感度を除いて報告される分岐比は数値であり、測定値ではありません。
参考文献と詳細情報
- ホークス、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)。 「チェックマーク: ホークス過程に重点を置いた統計学習用の Python ライブラリ」 JMLR.
- Filimonov、V.、および Sornette、D. (2012)。 「金融市場における反射性の定量化」
- クマール、P. (2021)。 「高頻度マーケットメイクのためのディープホークスプロセス」
- ライブラリドキュメントのティック: Hawkes module.
- Morse、S.「ホークス プロセスの 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.