Colapso de Entropia como Sinal de Timing de Volatilidade
A entropia de Shannon dos retornos de preço cai antes de grandes movimentos. Testamos em EURUSD e EURGBP com 2 anos de dados. Os resultados são honestos — e inconclusivos.
A Ideia
Indicadores de volatilidade são atrasados. ATR dispara depois do rompimento. Bandas de Bollinger expandem depois que o range quebra. Quando você mede alta volatilidade, o movimento já aconteceu.
Queríamos um sinal antecedente. Algo que detectasse as pré-condições de um grande movimento.
Entropia de Shannon — a medida teórico-informacional de desordem — parecia promissora. A intuição: antes de um rompimento, a ação de preço comprime. Os retornos se agrupam em uma faixa estreita. A distribuição aperta. A entropia cai. Aí a mola solta.
Isso se baseia em Singha (2025), “Hidden Order in Trades Predicts the Size of Price Moves”, que mostrou que a entropia de transição de Markov em dados de tick prevê a magnitude do movimento com um multiplicador de 2.89×. Adaptamos isso para retornos OHLC horários em forex.
Implementação
Entropia de Shannon rolante sobre retornos discretizados, disparada quando cai abaixo de um threshold de z-score:
import numpy as np
import pandas as pd
def compute_shannon_entropy(returns: pd.Series, bins: int = 10) -> float:
counts, _ = np.histogram(returns.dropna(), bins=bins)
probs = counts / counts.sum()
probs = probs[probs > 0]
return -np.sum(probs * np.log2(probs))
def entropy_collapse_signal(df, lookback=50, bins=10, threshold=1.8):
df = df.copy()
df['returns'] = df['close'].pct_change()
df['entropy'] = df['returns'].rolling(lookback).apply(
lambda x: compute_shannon_entropy(x, bins=bins), raw=False
)
df['entropy_z'] = (
(df['entropy'] - df['entropy'].rolling(200).mean())
/ df['entropy'].rolling(200).std()
)
df['signal'] = (df['entropy_z'] < -threshold).astype(int)
return df
Direção pela inclinação da EMA de 20 períodos. Entrada na abertura do próximo candle. Stop de 15 pips, alvo de 50 pips, timeout de 24 barras.
Resultados: EURUSD Horário
44 trades ao longo de 2 anos (Jan 2024 – Fev 2026).
| Métrica | Valor |
|---|---|
| Trades | 44 |
| Win Rate | 41% |
| Profit Factor | 1.44 |
| Total | +198 bps |
| Ganho Médio / Perda Média | 2.08× |
Walk-forward: 10 de 20 janelas lucrativas. OOS agregado: +220 bps.
Retornos OOS por janela. 10/20 lucrativas — 50%, mal acima do aleatório.
Validação Cruzada: EURGBP Horário
Se o colapso de entropia é um fenômeno real de forex, deveria transferir para pares correlacionados. Testamos em EURGBP usando 28.8M ticks da Darwinex, agregados em 12,801 barras horárias. Mesmos parâmetros.
| Métrica | EURUSD | EURGBP |
|---|---|---|
| Trades | 44 | 23 |
| Win Rate | 41% | 30% |
| Profit Factor | 1.44 | 0.76 |
| Total | +198 bps | -64 bps |
| Stop-outs | — | 61% |
Falhou. Apenas 16 trades OOS em 9 janelas de walk-forward — ruído estatístico.
Validação Cruzada: Equities
Também testamos em SPY, QQQ, IWM, GLD e TLT. O sinal disparou 0-9 vezes em 2 anos. SPY: 9 trades, -88 bps, 89% stop-outs. Mercados baseados em sessão não possuem a dinâmica contínua de entropia que forex tem.
ECVT é específico de EURUSD, no melhor cenário.
Por Que Isso É Inconclusivo
A avaliação honesta:
- 44 trades não é suficiente. Você precisa de 200+ para ter confiança estatística de que um profit factor não é sorte. Um PF de 1.44 em 44 trades tem aproximadamente 30% de probabilidade de ocorrer por acaso.
- 10/20 janelas de walk-forward = 50%. Cara ou coroa. Edges reais acertam 60-70%.
- +198 bps em 2 anos ≈ 1% anualizado. Custos de transação comem a maior parte.
- Zero validação cross-pair. Se fosse estrutural, EURGBP deveria mostrar.
- Par único, timeframe único. A definição de risco de overfitting.
O Que Aprendemos
O padrão de colapso de entropia é real — conseguimos observá-lo visualmente em toda sequência de consolidação-antes-de-rompimento. Mas detectá-lo sistematicamente com precisão e frequência suficientes para operar lucrativamente? Não conseguimos ainda.
O paper de Singha operou com sequências de trades em nível de tick com transições de Markov. Nossa adaptação para retornos OHLC perde a granularidade que faz o sinal funcionar. Pode haver algo aqui com tick data adequado e a metodologia original de Markov, mas não validamos.
Status: Inconclusivo. Não morto — a física subjacente é sólida. Mas não operável com nossa implementação atual.
Código: quant-research. Veja 31 Estratégias Testadas para onde isso se encaixa no panorama geral.