Colapso de Entropia como Sinal de Timing de Volatilidade

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.

entropyvolatilityeurusdstrategy

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étricaValor
Trades44
Win Rate41%
Profit Factor1.44
Total+198 bps
Ganho Médio / Perda Média2.08×

Walk-forward: 10 de 20 janelas lucrativas. OOS agregado: +220 bps.

Curva de equity walk-forward 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étricaEURUSDEURGBP
Trades4423
Win Rate41%30%
Profit Factor1.440.76
Total+198 bps-64 bps
Stop-outs61%

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.

Assista à História Completa