Hawkes Processes for Order Arrival and Market Event Modeling
L'article sur les empreintes digitales utilise un vecteur à trois chiffres — hawkes_mu, hawkes_alpha, hawkes_beta — en tant qu'élément temporel de la signature comportementale d'un participant, et affirme que les teneurs de marché font preuve d'une forte auto-excitation. Il ne dit jamais d’où viennent ces trois chiffres, d’où ils sont estimés ou dans quelle mesure vous devriez leur faire confiance. Cet article est la moitié manquante : l'estimateur, les diagnostics d'ajustement et la quantité dérivée qui s'avère plus importante que les trois paramètres eux-mêmes : le rapport de branchement .
L’affirmation testée ici est étroite et vérifiable. Le flux d’ordres est auto-excitant : une vente agressive rend la prochaine vente agressive plus probable, d’une manière qu’un modèle de Poisson avec un taux variant dans le temps ne peut pas reproduire. Si cela est vrai, un processus Hawkes ajusté aux horodatages bruts des échanges devrait (a) battre une ligne de base de Poisson sur la probabilité retenue, (b) produire un rapport de branchement strictement compris entre 0 et 1, et (c) réussir un test de qualité d'ajustement avec redimensionnement temporel. Les points (a) et (b) sont largement rapportés pour les contrats à terme sur actions. Le point (c) est l'endroit où les articles publiés par Hawkes restent généralement silencieux, et c'est là que la bande cryptographique n'a jamais été vérifiée sur ce blog.
Ce blog possède déjà deux éléments d'arrière-plan, ils ne sont donc pas redirigés ici. La structure de rétroaction auto-excitante - événements déclenchant davantage d'événements du même type, sous-critiques en dessous d'un seuil et emballement au-dessus de celui-ci - est dérivée concrètement sous la forme d'un nombre de reproduction. dans les cascades de liquidation comme signal de trading, y compris le mouvement total en série géométrique, le régime de crash flash supercritique et les disjoncteurs comme l'une des trois choses qui le délimitent. Le rapport de branchement ci-dessous se trouve l'analogue du processus ponctuel de celui-ci . Ce qui est véritablement additif ici : est estimable en temps réel à partir des seuls horodatages des transactions, sans carte de liquidation, sans profondeur du carnet de commandes et sans hypothèses d'effet de levier. C’est la seule raison pour laquelle il faut s’embêter avec la machinerie de traitement ponctuel.
L'hypothèse selon laquelle l'heure de l'horloge est le mauvais axe d'échantillonnage est l'argument fondateur de au-delà des barres de temps, qui le résout en construisant de meilleures barres. Cet article résout le problème différemment : en n'échantillonnant pas du tout et en modélisant directement les heures des événements.
Principes fondamentaux du processus de points, en bref

Un processus ponctuel est un ensemble aléatoire d'heures d'événements, défini par son intensité conditionnelle — le taux d'arrivée instantané compte tenu de l'historique complet :
Le processus de Poisson homogène est le cas . Le processus de Poisson inhomogène permet suivent une forme déterministe (une courbe intrajournalière en forme de U, par exemple), mais suppose toujours une indépendance conditionnelle : savoir qu'une transaction vient de se produire ne vous dit rien sur l'imminence d'une autre. C’est cette hypothèse qui est violée par le flux d’ordres réel, et la violation est tout le sujet de cet article. L'astérisque dans C’est là toute la distinction : elle marque la dépendance à l’égard de l’histoire.
Le processus Hawkes

Un processus de Hawkes univarié a une intensité
avec l'intensité de fond (arrivées exogènes) et le noyau d'excitation. Chaque événement augmente l'intensité de , qui se désintègre ensuite sous la forme de . Un ensemble d’événements récents produit une intensité élevée, rendant d’autres événements plus probables : le processus se souvient de sa propre histoire.
Le rapport de branchement
est le nombre moyen d'événements enfants déclenchés par un parent. La stationnarité nécessite ; l'intensité moyenne stationnaire est , qui diverge comme . Donc divise l'activité totale en une fraction exogène et une fraction endogène : à , soixante-dix pour cent des événements sont des réactions à d’autres événements plutôt que des réponses à quoi que ce soit en dehors du marché.
Il s’agit exactement de la répartition sous-critique/supercritique du multiplicateur de cascade dans cascades de liquidation, atteinte depuis une direction différente. La différence entre ce qu'il vous en coûte pour calculer : nécessite une carte prospective de la densité des ventes forcées et de la profondeur des livres en direct, qui sont toutes deux des estimations fondées sur des hypothèses concernant la distribution de l'effet de levier. nécessite une liste d'horodatages.
Filimonov et Sornette (2012) ont rapporté passant d'environ 0,3 à plus de 0,7 pour les contrats à terme E-mini S&P 500 entre 1998 et 2007. Hardiman, Bercot et Bouchaud (2013) placent le même contrat à un niveau proche. avec un noyau de loi puissance d'exposant environ avec des décalages courts. Les deux sont des résultats de contrats à terme sur actions datant d’il y a plus de dix ans, et aucun n’est transféré vers la cryptographie sans mesure. Les reproduire n’est pas le but de cet article ; vérifier si le même régime est valable sur une bande de contrats à terme perpétuels 24 heures sur 24 et 7 jours sur 7 avec différents participants et qu'il n'y a aucune discontinuité dans l'ouverture du marché.
Choix du noyau
Exponentiel, , avec . Markovien, donc la probabilité a un -récursivité par événement (ci-dessous). C’est là que commence tout ajustement pratique.
Loi de puissance, . Reproduit le clustering de mémoire longue, mais perd la récursivité — l'évaluation de la vraisemblance devient ou nécessite une troncature.
Somme des exponentielles, . Rapproche la décroissance de la loi de puissance avec les délais tout en gardant la récursivité. à est généralement suffisant, avec s'étendant de quelques millisecondes à quelques minutes.
La question de savoir si les arrivées de crypto-monnaies diminuent de façon exponentielle ou en tant que loi de puissance est une question empirique avec une réponse par rapport à la vraisemblance, et elle est mesurée ci-dessous plutôt que citée.
Processus Hawkes multivariés

Pour types d'événements,
où décrit comment type excite le type . Avec les noyaux exponentiels, la matrice de branchement est , et la stationnarité nécessite un rayon spectral . Le vecteur propre de associé à la plus grande valeur propre identifie le mode d'excitation dominant - quel groupe de types d'événements a tendance à se déclencher ensemble.
L'instanciation intéressante pour un carnet de commandes est : achat au marché, vente au marché, achat limité, vente limité, achat annulé, vente annulée. Cette matrice comporte 36 entrées et fait partie de la boîte à outils Hawkes que ce blog n'a nulle part ailleurs. Notez que l'une de ses entrées prédites est déjà documentée empiriquement sans le vocabulaire : l'annulation de masse corrélée sur des niveaux consécutifs - les tractions sur les murs - est mesurée directement dans [analyse de la position de la file d'attente et du mur du carnet d'ordres] (/en/blog/post/queue-position-order-book-wall-analysis). Un équipé C'est le même phénomène exprimé sous forme de noyau, et les deux mesures doivent concorder. S’ils ne le font pas, l’un d’eux a tort.
Les versions multi-actifs et multi-sites sont la même machinerie avec des étiquettes différentes : les noyaux hors diagonale capturent le décalage de plomb et la contagion, et Shi, Broussard et Booth (2019) ont utilisé exactement cela sur les 30 actions du Dow Jones lors du krach éclair de 2010, trouvant une excitation croisée asymétrique avec des sources de contagion identifiables.
Calibrage

Probabilité maximale
Pour les horaires des événements sur :
Le premier terme récompense l’intensité là où les événements se sont produits ; la seconde pénalise l’intensité qui n’a rien produit.
Pour le noyau exponentiel, la récursion
donne à par événement, et le compensateur se ferme :
Coût total , c'est ce qui fait que les matchs d'un million d'événements sont une routine. Optimisez avec L-BFGS-B sous contraintes de positivité.
Deux modes de défaillance à connaître avant de faire confiance à une sortie. La surface de vraisemblance s'aplatit fortement à mesure que , donc un ajustement quasi critique peut rapporter une estimation ponctuelle d'apparence confiante située dans une vallée presque égale pour dans — toujours profiler la probabilité dans plutôt que de lire le Hessian de l'optimiseur. Et dans le cas multivarié, le nombre de paramètres augmente à mesure que , si passé vous avez besoin d'un groupe-Lasso sur les normes du noyau ou la matrice s'adapte au bruit.
EM et estimation non paramétrique
EM traite la structure de branchement comme latente : chaque événement est soit un immigrant de ou une progéniture d'un événement antérieur. Les mécanismes génériques des étapes E/M, la mise en garde de l'optimum local et la discipline d'initialisation multiple sont traités dans la section Baum-Welch de détection de régime avec HMM et sont identiques ici. La partie spécifique à Hawkes est la quantité E-step elle-même :
est un a posteriori sur quel événement a provoqué lequel — une sortie interprétable, pas seulement un intermédiaire d'optimisation. Sommée par type d'événement, elle donne une attribution de la bande : cette fraction des ventes de la dernière heure a été déclenchée par des ventes antérieures, cette fraction est arrivée de l'extérieur. Il vous permet également d'estimer non paramétrique comme constante par morceaux sur une grille, c'est ainsi que vous vérifiez l'hypothèse exponentielle sans vous engager dans une alternative. Coût: pour le complet matrice, donc elle ne dépasse pas approximativement événements sans approximation.
La méthode spectrale de Bacry et Muzy est l'autre voie sans modèle - la densité spectrale de puissance d'un processus stationnaire de Hawkes prend en compte comme , donc l'estimation de la densité de covariance et la résolution de la factorisation récupèrent les noyaux sans hypothèse de forme paramétrique.
Ajustement d'une vraie bande cryptographique

Chaque chiffre de cette section doit provenir d’un ajustement réel sur des données réelles. La récupération des paramètres que vous avez injectés dans un simulateur ne prouve rien si ce n'est que l'optimiseur fonctionne.
Les données : Binance BTC/USDT aggTrade horodatages sur une fenêtre définie, avec la fenêtre, le symbole et le nombre d'événements indiqués explicitement à côté de chaque chiffre rapporté. aggTrade les agrégats sont exécutés au même prix à partir d'un ordre preneur dans un seul enregistrement, ce qui est la bonne unité ici - un ordre agressif est un événement, et non un événement par exécution par contrepartie.
Ajustement univarié
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")
Les deux dernières impressions constituent le premier contrôle de cohérence qui ne coûte rien : si l'intensité moyenne stationnaire du modèle n'atteint pas le taux d'événements empiriques, l'ajustement est erroné quel que soit ce que l'optimiseur a rapporté.
ne doit pas être réparé à la main. Profilez la probabilité sur une grille de désintégrations et rapportez le profil, car et faire des compromis fortement et peut être stable alors qu’aucun des deux paramètres ne l’est.
Le noyau se dégrade-t-il réellement de manière exponentielle ?
L’affirmation de la loi de puissance dans la littérature provient d’articles sur les contrats à terme sur actions de 2013. Testez-le directement : placez un noyau exponentiel et un noyau de loi de puissance sur la même bande, comparez par log-vraisemblance sur des données conservées (pas dans l'échantillon, car la loi de puissance a un paramètre supplémentaire), et examinez séparément la décroissance empirique de l'intensité suite à des transactions importantes.
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)
Journal-log tracé, un noyau exponentiel se plie ; une loi de puissance est droite. Ce graphique est un élément de preuve plus solide que l'un ou l'autre des nombres de vraisemblance, car il montre où se trouve l'inadaptation - généralement les exponentielles sous-ajustent la queue et surajustent les premières millisecondes.
La matrice de branchement
Modèle multivarié minimum viable : deux dimensions, achat agressif et vente agressive, séparées par is_buyer_maker. Si les données L3 sont disponibles, étendre aux annulations.
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
Les deux grandeurs à publier sont la matrice elle-même et son rayon spectral. L'asymétrie est la partie intéressante : si vendre-excite-vendre dépasse acheter-excite-acheter, et si les termes croisés sont symétriques, sont des déclarations testables sur la bande cryptographique que personne ici n'a mesurée.
Qualité de l'ajustement : redimensionnement du temps
Le théorème de redimensionnement temporel : si le modèle est correct, les temps transformés forment un processus de Poisson à taux unitaire, donc les différences sont .
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)}")
Une prudence à la lecture de ce test : avec par centaines de milliers, le test KS est rejeté en raison d'une erreur de spécification triviale. Une petite valeur p à ne signifie presque rien en soi ; la sortie informative est le tracé QQ de contre et la statistique KS elle-même, qui est une taille d'effet sans échelle. Signalez les deux et signalez-les honnêtement : si le noyau exponentiel est rejeté sur une bande cryptographique, c'est un résultat qui mérite d'être publié plutôt que enterré, dans le même esprit que le résultat négatif honnête sur les bords robustes.
N bouge-t-il réellement avec fragilité ?
L'affirmation selon laquelle est un indicateur de fragilité en temps réel, constamment cité et rarement testé. Le test est simple : estimer sur les fenêtres glissantes au cours d'une période calme et à une date de cascade crypto connue, et voyez si elle augmente avant ou seulement pendant l'événement. Une quantité qui augmente uniquement en même temps que le crash est une description et non un avertissement.
Stabilité et robustesse

Un équipé n'est pas une mesure tant que vous ne savez pas à quel point elle bouge lorsque vous changez des choses qui ne devraient pas avoir d'importance. Quatre pièges spécifiques, classés par ordre approximatif de dégâts qu'ils causent.
La résolution de l'horodatage produit une auto-excitation. Binance aggTrade les horodatages ont une résolution en millisecondes. Les transactions qui étaient véritablement séparées par des microsecondes s'effondrent sur des tampons identiques en millisecondes, et une probabilité de Hawkes interprète les événements coïncidents comme une excitation maximale - évalué avec un décalage exactement nul. Cela biaise à la hausse, et le biais augmente avec l'activité, ce qui signifie qu'il est pire exactement pendant les rafales où vous souhaitez le plus que le chiffre soit fiable. Quantifiez-le : comptez la fraction d'événements partageant un horodatage avec un voisin, puis réajustez ces événements avec une instabilité uniforme dans leur bac de millisecondes et signalez combien bouge. Si le jitter change de plus que l’intervalle de confiance, le chiffre global mesure l’horloge, pas le marché.
Exchange batching. Les échanges n'émettent pas d'événements au fur et à mesure qu'ils se produisent ; ils les émettent au fur et à mesure que leur pipeline de correspondance et de diffusion se vide. La limitation d'une par seconde de Binance sur le flux de liquidation constitue un précédent documenté : un flux qui ressemble à des arrivées groupées est en partie un artefact de l'éditeur. Tout lot dans l'aliment commercial imprime une périodicité sur la distribution entre les arrivées qu'un noyau Hawkes absorbera volontiers dans . Vérifiez-le directement : histogrammez les temps entre les arrivées et recherchez les pics au cours de la période de traitement par lots avant d'ajuster quoi que ce soit.
Sensibilité à la décroissance supposée. dépend de , et est généralement fixe ou recherché par grille plutôt que estimé conjointement. Rapport en fonction de sur la plage plausible, pas comme un point. Si la courbe est plate, le nombre est réel ; si pistes de près, vous avez choisi votre réponse.
Fenêtre d'estimation. les estimations sur une heure, un jour et une semaine différeront, en partie parce que le processus est véritablement non stationnaire et en partie parce qu'une fenêtre plus longue mélange les régimes, ce qui gonfle l'excitation apparente en confondant la variation entre les régimes avec le regroupement au sein d'un même régime. Signalez le balayage de la longueur de la fenêtre. La bonne façon de lire une hausse est par rapport à la même longueur de fenêtre mesurée à d'autres moments, jamais par rapport à un nombre provenant d'une fenêtre différente.
Le modèle ici est celui établi dans le piège de précision GPU : un pipeline qui fonctionne proprement et renvoie un nombre plausible n'est pas la preuve d'un nombre correct, et la seule défense est de perturber les entrées qui ne devraient pas avoir d'importance et de confirmer que la sortie ne bouge pas.
Ce que cela fait et ne vous achète pas

Trois liens avec la théorie de la microstructure, brefs car le blog les couvre en détail ailleurs.
Formation des prix. Dans Kyle (1985), le teneur de marché évalue le flux d'ordres net en mélangeant des échanges informés et des échanges de bruit ; le coefficient d'impact et la profondeur sont présentés avec la littérature de suivi - y compris les preuves contre la linéarité de Kyle - dans slippage cost models. Les Hawkes lisant des cartes sur des informations véritablement nouvelles et des événements auto-excités sur une réaction mécanique, ce qui rend un indicateur mesurable de la part du flux due au bruit.
Clustering de volatilité. Clustering, persistance, condition de stationnarité et la variance à long terme — structurellement l'analogue exact de et - sont traités dans Prévision de volatilité GARCH pour la crypto. L’affirmation véritablement nouvelle est celle de Bacry, Delattre, Hoffmann et Muzy (2013) : un processus de Hawkes quasi critique génère des séries de rendement dont l’autocorrélation de la volatilité se désintègre comme une loi de puissance, sans aucun modèle de volatilité explicite nulle part. Le regroupement de la volatilité apparaît comme une propriété émergente du flux d’ordres auto-excitant plutôt que comme une hypothèse.
Effet Epps. Bacry et Muzy ont montré qu'un modèle bivarié de Hawkes reproduit la décroissance de la corrélation mesurée à haute fréquence d'échantillonnage uniquement à partir du temps de propagation fini de l'excitation entre les deux processus - aucun mécanisme supplémentaire n'est requis.
Lors de l'exécution, la prescription qui découle de l'auto-excitation - ralentir après une tranche, accélérer pendant les périodes calmes - est déjà au cœur de la section sur la boucle de rétroaction POV dans Algorithmes d'exécution TWAP, VWAP et POV, et la critique du découpage égal naïf est Almgren-Chriss. Ce qu'ajoute un ajustement Hawkes n'est pas un conseil mais un chiffre : la demi-vie ajustée du noyau indique combien de temps l'excitation de votre propre tranche met à décliner, ce qui convertit « attendez un peu » en une durée de pause spécifique.
Limites

Aucune inhibition. Le modèle classique permet uniquement aux événements d'augmenter l'intensité. Les marchés contiennent le contraire : un ordre limité important absorbant la pression peut dissuader les transactions agressives. Les processus de Hawkes avec inhibition autorisent des valeurs de noyau négatives, au prix de devoir les appliquer. . La question de savoir si cela est important pour un ajustement donné est visible dans l'estimation du noyau non paramétrique - si la constante par morceaux descend en dessous de zéro avec un certain décalage, le modèle contraint combat les données.
Non-stationnarité. Le modèle standard suppose la stationnarité et la cryptographie est disponible 24 heures sur 24, 7 jours sur 7, mais pas uniforme : la liquidité, la composition des participants et le taux d'événements changent tous au cours de la journée et autour des horodatages de financement. Une référence variable dans le temps gère cela au prix de plus de paramètres, et la sensibilité de la fenêtre d'estimation ci-dessus vous permet de savoir si vous en avez besoin.
Résumé

Le processus de Hawkes vaut la peine pour une raison : il réduit le regroupement des flux d'ordres en un seul nombre interprétable, le rapport de branchement. , calculable à partir des seuls horodatages, sans reconstruction du carnet d'ordres et sans hypothèses sur l'effet de levier ou le positionnement. Cela en fait l'estimation la moins chère disponible du degré d'endogène actuel d'un marché - la même question cascades de liquidation répond de manière coûteuse via .
Le mécanisme est simple : les noyaux exponentiels donnent une probabilité via le récursivité, EM donne un a posteriori interprétable sur quel événement a provoqué tel, et le redimensionnement temporel donne un véritable test d'ajustement plutôt qu'un argument de plausibilité. Ce qui n’est pas simple, c’est de faire confiance au résultat. Biais d'arrondi de l'horodatage en millisecondes vers le haut précisément pendant les rafales, échangez des empreintes par lots avec la structure que le noyau absorbera, et se déplace à la fois avec la décroissance supposée et avec la fenêtre d'estimation. Un rapport de branchement rapporté sans ces quatre sensibilités est un nombre et non une mesure.
Références et lectures complémentaires
- Hawkes, A.G. (1971). "Spectres de certains processus ponctuels auto-excitants et mutuellement excitants." Biometrika, 58(1), 83-90.
- Bacry, E., Mastromatteo, I., et Muzy, J.-F. (2015). "Les processus Hawkes en finance." Microstructure et liquidité du marché.
- Shi, F., Broussard, JP et Booth, GG (2019). "Modélisation du comportement d'un crash flash dans un marché boursier à l'aide de processus Hawkes multivariés."
- Hardiman, S., Bercot, N., et Bouchaud, J.-P. (2013). "Réflexivité critique sur les marchés financiers : une analyse du processus de Hawkes."
- Bacry, E., et Muzy, J.-F. (2014). "Modèle Hawkes pour la dynamique des prix et des échanges à haute fréquence." Finance quantitative.
- Bompaire, M., Bacry, E., et Gaiffas, S. (2017). "cochez : une bibliothèque Python pour l'apprentissage statistique, avec un accent sur les processus Hawkes." JMLR.
- Filimonov, V., et Sornette, D. (2012). "Quantifier la réflexivité sur les marchés financiers."
- Kumar, P. (2021). "Processus Deep Hawkes pour la tenue de marché à haute fréquence."
- cocher la documentation de la bibliothèque : module Hawkes.
- Morse, S. "Classe Python pour les processus Hawkes." (Tutoriel et code)
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.