Hawkes Processes for Order Arrival and Market Event Modeling
O artigo sobre impressão digital usa um vetor de três números — hawkes_mu, hawkes_alpha, hawkes_beta — como o componente temporal da assinatura comportamental de um participante e afirma que os formadores de mercado apresentam forte autoexcitação. Nunca diz de onde vêm esses três números, de onde são estimados ou até que ponto você deve confiar neles. Este artigo é a metade que falta: o estimador, o diagnóstico de ajuste e a quantidade derivada que acaba sendo mais importante do que os três parâmetros em si - a razão de ramificação .
A afirmação testada aqui é restrita e verificável. O fluxo de pedidos é autoexcitante: uma venda agressiva torna a próxima venda agressiva mais provável, de uma forma que um modelo de Poisson com qualquer taxa variável no tempo não consegue reproduzir. Se isso for verdade, um processo de Hawkes ajustado a carimbos de data e hora de negociação bruta deve (a) superar uma linha de base de Poisson na probabilidade mantida, (b) produzir uma razão de ramificação estritamente entre 0 e 1 e (c) passar em um teste de adequação de ajuste de redimensionamento de tempo. Os pontos (a) e (b) são amplamente divulgados para futuros de ações. O ponto (c) é onde os artigos publicados de Hawkes geralmente ficam em silêncio, e é onde a fita criptográfica nunca foi verificada neste blog.
Duas peças de background que este blog já possui, portanto não são derivadas aqui. A estrutura de feedback autoexcitante – eventos que desencadeiam mais eventos do mesmo tipo, subcríticos abaixo de um limite e descontrolados acima dele – é derivada concretamente como um número de reprodução em cascatas de liquidação como sinal de negociação, incluindo o movimento total da série geométrica, o regime supercrítico de flash-crash e disjuntores como uma das três coisas que o limitam. A proporção de ramificação abaixo está o análogo do processo pontual daquele . O que é genuinamente aditivo aqui: é estimável em tempo real apenas a partir de carimbos de data/hora de negociação, sem mapa de liquidação, sem profundidade de livro de pedidos e sem suposições de alavancagem. Essa é a razão para se preocupar com a maquinaria de processo pontual.
A premissa de que o tempo do relógio é o eixo de amostragem errado é o argumento fundador de beyond time bars, que resolve o problema construindo barras melhores. Este artigo resolve isso de forma diferente: sem amostragem e modelando os tempos dos eventos diretamente.
Fundamentos do processo pontual, resumidamente

Um processo pontual é um conjunto aleatório de tempos de eventos, definido por sua intensidade condicional — a taxa de chegada instantânea dada a história completa :
O processo homogêneo de Poisson é o caso . O processo de Poisson não homogêneo permite seguem uma forma determinística (uma curva intradiária em forma de U, digamos), mas ainda assumem independência condicional: saber que uma negociação acabou de acontecer não diz nada sobre se outra é iminente. Essa suposição é o que o fluxo de pedidos real viola, e a violação é o assunto inteiro deste artigo. O asterisco em é toda a distinção – marca a dependência da história.
O Processo Hawkes

Um processo de Hawkes univariado tem intensidade
com a intensidade de fundo (chegadas exógenas) e o kernel de excitação. Cada evento aumenta a intensidade em , que então decai com a forma de . Um conjunto de eventos recentes produz uma alta intensidade, tornando mais prováveis eventos futuros – o processo lembra a sua própria história.
A taxa de ramificação
é o número médio de eventos filhos acionados por um pai. A estacionariedade requer ; a intensidade média estacionária é , que diverge como . Então divide a atividade total em uma fração exógena e uma fração endógena : no , setenta por cento dos eventos são reações a outros eventos, e não respostas a qualquer coisa fora do mercado.
Esta é exatamente a divisão subcrítica/supercrítica do multiplicador em cascata em cascatas de liquidação, alcançada de uma direção diferente. A diferença em quanto custa calcular: requer um mapa futuro da densidade de vendas forçadas e da profundidade do livro vivo, sendo que ambas são estimativas baseadas em suposições sobre a distribuição de alavancagem. requer uma lista de carimbos de data/hora.
Filimonov e Sornette (2012) relataram subindo de aproximadamente 0,3 para acima de 0,7 nos futuros E-mini S&P 500 entre 1998 e 2007. Hardiman, Bercot e Bouchaud (2013) colocaram o mesmo contrato próximo com um núcleo de potência de expoente sobre em pequenos atrasos. Ambos são resultados de futuros de ações de mais de uma década atrás, e nenhum deles é transferido para criptografia sem medição. Reproduzi-los não é o objetivo deste artigo; verificar se o mesmo regime se mantém em uma fita de futuros perpétuos 24 horas por dia, 7 dias por semana, com diferentes participantes e se não há descontinuidade na abertura do mercado.
Escolhas de Kernel
Exonencial, , com . Markoviano, então a probabilidade tem um -recursão por evento (abaixo). É aqui que começa todo ajuste prático.
Lei de potência, . Reproduz agrupamento de memória longa, mas perde a recursão - a avaliação de probabilidade torna-se ou requer truncamento.
Soma de exponenciais, . Aproxima o decaimento da lei de potência com escalas de tempo, mantendo a recursão. para geralmente é suficiente, com abrangendo milissegundos a minutos.
Se as chegadas do comércio criptográfico decaem exponencialmente ou como uma lei de potência é uma questão empírica com uma resposta de razão de verossimilhança, e é medida abaixo em vez de citada.
Processos Hawkes Multivariados

Para tipos de eventos,
onde descreve como tipo excita tipo . Com kernels exponenciais, a matriz ramificada é , e a estacionariedade requer raio espectral . O autovetor de associado ao maior autovalor identifica o modo de excitação dominante – qual grupo de tipos de eventos tende a disparar juntos.
A instanciação interessante para uma carteira de pedidos é : compra no mercado, venda no mercado, limite de compra, limite de venda, cancelar compra, cancelar venda. Essa matriz tem 36 entradas e faz parte do kit de ferramentas Hawkes que este blog não possui em nenhum outro lugar. Observe que uma de suas entradas previstas já está documentada empiricamente sem o vocabulário: o cancelamento em massa correlacionado em níveis consecutivos — puxadas de parede — é medido diretamente em posição da fila e análise da parede do livro de pedidos. Um equipado é o mesmo fenômeno expresso como um kernel, e as duas medições devem concordar. Se não o fizerem, um deles está errado.
As versões entre ativos e vários locais são o mesmo mecanismo com rótulos diferentes: kernels fora da diagonal capturam lead-lag e contágio, e Shi, Broussard e Booth (2019) usaram exatamente isso nas 30 ações da Dow durante o flash crash de 2010, encontrando excitação cruzada assimétrica com fontes de contágio identificáveis.
Calibração

Probabilidade Máxima
Para horários de eventos sobre :
O primeiro termo recompensa a intensidade onde os eventos aconteceram; a segunda penaliza a intensidade que nada produziu.
Para o kernel exponencial a recursão
dá no por evento, e o compensador fecha:
Custo total , que é o que faz com que os ajustes de milhões de eventos sejam rotineiros. Otimize com L-BFGS-B sob restrições de positividade.
Dois modos de falha que vale a pena conhecer antes de confiar em uma saída. A probabilidade de a superfície se achatar mal , portanto, um ajuste quase crítico pode relatar uma estimativa pontual de aparência confiável situada em um vale quase nivelado para em - sempre perfile a probabilidade em em vez de ler o Hessian do otimizador. E no caso multivariado a contagem de parâmetros cresce à medida que , tão passado você precisa do group-Lasso nas normas do kernel ou a matriz está ajustando o ruído.
EM e estimativa não paramétrica
EM trata a estrutura ramificada como latente: cada evento é um imigrante de ou um resultado de algum evento anterior. A mecânica genérica E-step/M-step, a advertência do ótimo local e a disciplina de inicialização múltipla são abordadas na seção Baum-Welch de detecção de regime com HMMs e são idênticas aqui. A parte específica de Hawkes é a própria quantidade do E-step:
é um posterior sobre qual evento causou qual — uma saída interpretável, não apenas um intermediário de otimização. Somado por tipo de evento dá uma atribuição da fita: esta fração das vendas da última hora foi desencadeada por vendas anteriores, essa fração chegou de fora. Também permite estimar não parametricamente como constante por partes em uma grade, que é como você verifica a suposição exponencial sem se comprometer com uma alternativa. Custo: para o completo matriz, então ela não ultrapassa aproximadamente acontecimentos sem aproximação.
O método espectral de Bacry e Muzy é a outra rota livre de modelo - a densidade espectral de potência de um processo estacionário de Hawkes é fatorada como , portanto, estimar a densidade de covariância e resolver a fatoração recupera os kernels sem nenhuma forma paramétrica assumida.
Ajustando fita criptográfica real

Cada número nesta seção deve vir de um ajuste real em dados reais. A recuperação de parâmetros injetados em um simulador não é evidência de nada, exceto que o otimizador funciona.
Os dados: Binance BTC/USDT aggTrade carimbos de data e hora em uma janela definida, com a janela, o símbolo e a contagem de eventos declarados explicitamente ao lado de cada valor relatado. aggTrade os agregados são preenchidos ao mesmo preço de uma ordem taker em um único registro, que é a unidade certa aqui – uma ordem agressiva é um evento, não um evento por preenchimento de contraparte.
Ajuste univariado
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")
As duas últimas impressões são a primeira verificação de sanidade que não custa nada: se a intensidade média estacionária do modelo não chegar perto da taxa de eventos empíricos, o ajuste estará errado, independentemente do que o otimizador relatou.
não deve ser consertado manualmente. Trace o perfil da probabilidade em uma grade de decaimentos e relate o perfil, porque e negociar fortemente e pode ser estável enquanto nenhum dos parâmetros o é.
O Kernel realmente decai exponencialmente?
A afirmação da lei de potência na literatura vem de documentos de futuros de ações de 2013. Teste-o diretamente: ajuste um kernel exponencial e um kernel de lei de potência na mesma fita, compare por probabilidade logarítmica em dados retidos (não na amostra, já que a lei de potência tem um parâmetro extra) e observe separadamente a queda de intensidade empírica após grandes negociações.
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)
Log-log plotado, um kernel exponencial se dobra; uma lei de potência é direta. Esse gráfico é uma evidência mais forte do que qualquer um dos números de probabilidade, porque mostra onde está o desajuste – normalmente as exponenciais se ajustam mal à cauda e se ajustam demais nos primeiros milissegundos.
A Matriz de Ramificação
Modelo multivariado mínimo viável: duas dimensões, compra agressiva e venda agressiva, separadas por is_buyer_maker. Se os dados L3 estiverem disponíveis, estenda para cancelamentos.
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
As duas grandezas a serem publicadas são a própria matriz e seu raio espectral. A assimetria é a parte interessante: se vender-excita-vender excede comprar-excita-comprar, e se os termos cruzados são simétricos, são afirmações testáveis sobre fita criptográfica que ninguém aqui mediu.
Qualidade de ajuste: redimensionamento de tempo
O teorema do redimensionamento do tempo: se o modelo estiver correto, os tempos transformados formam um processo de Poisson de taxa unitária, então as diferenças são .
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)}")
Um cuidado ao ler este teste: com na casa das centenas de milhares, o teste KS rejeita erros de especificação triviais. Um pequeno valor p em não significa quase nada por si só; a saída informativa é o gráfico QQ de contra e a própria estatística KS, que é um tamanho de efeito sem escala. Relate ambos, e relate-os honestamente — se o kernel exponencial for rejeitado na fita criptográfica, esse é um resultado que vale a pena publicar em vez de enterrar, no mesmo espírito que o resultado negativo honesto em bordas robustas.
Será que n realmente se move com a fragilidade?
A alegação de que é um indicador de fragilidade em tempo real, citado constantemente e raramente testado. O teste é simples: estimar em janelas rolantes durante um período de calma e em uma data conhecida da cascata de criptografia, e ver se ela aumenta antes ou apenas durante o evento. Uma quantidade que só aumenta simultaneamente com a falha é uma descrição, não um aviso.
Estabilidade e Robustez

Um equipado não é uma medida até que você saiba o quanto ele se move quando você muda coisas que não deveriam importar. Quatro armadilhas específicas, em ordem aproximada de quanto dano elas causam.
A resolução do carimbo de data/hora produz autoexcitação. Binance aggTrade carimbos de data/hora têm resolução de milissegundos. As negociações que estavam genuinamente separadas por microssegundos colapsam em selos idênticos de milissegundos, e uma probabilidade de Hawkes lê eventos coincidentes como excitação máxima - avaliado com defasagem exatamente zero. Esses preconceitos para cima, e o viés cresce com a atividade, o que significa que é pior exatamente durante os picos em que você mais deseja que o número seja confiável. Quantifique-o: conte a fração de eventos que compartilham um carimbo de data/hora com um vizinho, depois reajuste com esses eventos com instabilidade uniforme dentro de seu compartimento de milissegundos e relate quanto se move. Se o tremor mudar por mais do que o intervalo de confiança, o número principal mede o relógio, não o mercado.
Transferência em lote. As exchanges não emitem eventos à medida que ocorrem; eles os emitem à medida que seu pipeline de correspondência e disseminação é liberado. A aceleração de um por segundo da Binance no fluxo de liquidação é o precedente documentado – um fluxo que parece chegadas agrupadas é em parte um artefato do editor. Qualquer lote no feed comercial imprime uma periodicidade na distribuição entre chegadas que um kernel de Hawkes absorverá alegremente. . Verifique diretamente: faça um histograma dos tempos entre chegadas e procure picos no período de lote antes de ajustar qualquer coisa.
Sensibilidade à decadência presumida. depende de , e é geralmente fixo ou pesquisado em grade, em vez de estimado em conjunto. Relatório em função de acima da faixa plausível, não como um ponto. Se a curva for plana, o número é real; se faixas de perto, você escolheu sua resposta.
Janela de estimativa. estimados ao longo de uma hora, um dia e uma semana serão diferentes, em parte porque o processo é genuinamente não estacionário e em parte porque uma janela mais longa mistura regimes, o que aumenta a excitação aparente ao combinar a variação entre regimes com o agrupamento dentro do regime. Relate a varredura do comprimento da janela. A maneira certa de ler uma ascensão é comparado ao mesmo comprimento de janela medido em outros momentos, nunca em relação a um número de uma janela diferente.
O padrão aqui é aquele estabelecido na armadilha de precisão da GPU: um pipeline que funciona de forma limpa e retorna um número plausível não é evidência de um número correto, e a única defesa é perturbar as entradas que não deveriam importar e confirmar que a saída não se move.
O que isso faz e o que não compra para você

Três conexões com a teoria da microestrutura, mantidas brevemente porque o blog cobre cada uma delas detalhadamente em outro lugar.
Formação de preços. Em Kyle (1985), o formador de mercado precifica fora do fluxo de pedidos líquido, misturando negociação informada e de ruído; o coeficiente de impacto e profundidade são apresentados com a literatura de acompanhamento - incluindo as evidências contra a linearidade de Kyle - em modelos de custo de deslizamento. Os Hawkes lendo mapas em informações genuinamente novas e os eventos autoexcitados em reações mecânicas, fazendo com que um proxy mensurável para a parcela do fluxo impulsionada pelo ruído.
Clustering de volatilidade. Clustering, persistência, a condição de estacionariedade e a variância de longo prazo - estruturalmente o análogo exato de e — são abordados em Previsão de volatilidade GARCH para criptografia. A afirmação genuinamente nova é Bacry, Delattre, Hoffmann e Muzy (2013): um processo de Hawkes quase crítico gera séries de retorno cuja autocorrelação de volatilidade decai como uma lei de potência, sem nenhum modelo de volatilidade explícito em qualquer lugar. O agrupamento de volatilidade surge como uma propriedade emergente do fluxo de ordens autoexcitante, em vez de ser assumido.
Efeito Epps. Bacry e Muzy mostraram que um modelo bivariado de Hawkes reproduz o decaimento da correlação medida em alta frequência de amostragem puramente a partir do tempo finito de propagação de excitação entre os dois processos - nenhum mecanismo extra necessário.
Na execução, a prescrição que segue a auto-excitação - desacelerar após uma fatia, acelerar em períodos de silêncio - já é o núcleo da seção do ciclo de feedback do POV em algoritmos de execução TWAP, VWAP e POV, e a crítica ao ingênuo fatiamento igual é Almgren-Chriss. O que um ajuste de Hawkes acrescenta não é um conselho, mas um número: a meia-vida do kernel ajustado diz quanto tempo a excitação de sua própria fatia leva para decair, o que converte "espere um pouco" em uma duração de pausa específica.
Limitações

Sem inibição. O modelo clássico permite apenas que os eventos aumentem a intensidade. Os mercados contêm o oposto: uma grande pressão de absorção de ordens de limite pode impedir negociações agressivas. Os processos de Hawkes com inibição permitem valores de kernel negativos, ao custo de ter que impor . Se isso é importante para um determinado ajuste é visível na estimativa não paramétrica do kernel - se a constante por partes cai abaixo de zero em algum atraso, o modelo restrito está lutando contra os dados.
Não estacionariedade. O modelo padrão pressupõe estacionariedade, e a criptografia funciona 24 horas por dia, 7 dias por semana, mas não é uniforme: a liquidez, o mix de participantes e a taxa de eventos mudam ao longo do dia e em torno dos carimbos de data e hora de financiamento. Uma linha de base variável no tempo lida com isso ao custo de mais parâmetros, e a sensibilidade da janela de estimativa acima é como você descobre se precisa dela.
Resumo

O processo de Hawkes vale a pena por um motivo: ele reduz o agrupamento do fluxo de pedidos em um único número interpretável, a razão de ramificação. , computável apenas a partir de carimbos de data/hora, sem reconstrução da carteira de pedidos e sem suposições sobre alavancagem ou posicionamento. Isso a torna a estimativa mais barata disponível de quão endógeno é um mercado atualmente - a mesma pergunta cascatas de liquidação responde caro por meio de .
O mecanismo é simples: os kernels exponenciais fornecem uma probabilidade através do recursão, EM fornece um posterior interpretável sobre qual evento causou qual, e o reescalonamento de tempo fornece um teste real de qualidade de ajuste em vez de um argumento de plausibilidade. O que não é simples é confiar no resultado. Vieses de arredondamento de carimbo de data/hora em milissegundos para cima precisamente durante rajadas, troque a estrutura de impressões em lote que o kernel irá absorver e move-se tanto com o decaimento assumido quanto com a janela de estimativa. Uma taxa de ramificação relatada sem essas quatro sensibilidades é um número, não uma medida.
Referências e leituras adicionais
- Hawkes, AG (1971). "Espectros de alguns processos pontuais autoexcitantes e mutuamente excitantes." Biometrika, 58(1), 83-90.
- Bacry, E., Mastromatteo, I., e Muzy, J.-F. (2015). "Processos Hawkes em finanças." Microestrutura e Liquidez de Mercado.
- Shi, F., Broussard, JP e Booth, GG (2019). "Modelando o comportamento do Flash Crash em um mercado de ações usando processos multivariados de Hawkes."
- Hardiman, S., Bercot, N., e Bouchaud, J.-P. (2013). "Reflexividade crítica nos mercados financeiros: uma análise do processo de Hawkes."
- Bacry, E. e Muzy, J.-F. (2014). "Modelo de Hawkes para dinâmica de preços e negociações de alta frequência." Finanças Quantitativas.
- Bompaire, M., Bacry, E., e Gaiffas, S. (2017). "tick: uma biblioteca Python para aprendizagem estatística, com ênfase nos processos Hawkes." JMLR.
- Filimonov, V. e Sornette, D. (2012). "Quantificando a reflexividade nos mercados financeiros."
- Kumar, P. (2021). "Processo Deep Hawkes para criação de mercado de alta frequência."
- marque a documentação da biblioteca: módulo Hawkes.
- Morse, S. "Classe Python para processos Hawkes." (Tutorial e código)
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.