API
PG
REDIS
CEDRO
CLOSED
BRT

Estratégias Quantitativas

Catálogo de estratégias com edge estatístico documentado, implementáveis com os dados que a plataforma já coleta hoje (Cedro PRT, carry_snapshots, DXY/external_collector). Foco em microestrutura, arbitragem estatística e defasagem cross-asset — não em padrões gráficos subjetivos.

Multivariate AggregationNão implementadoCARREGANDO…

Termômetro DOL — Cruzamento de Extremo

Racional

O Termômetro DOL agrega 11 indicadores ponderados (Bias 18% · Carry 12% · Regime 11% · DXY 11% · VIX 10% · TNX 9% · FRP0 9% · Tom Política 7% · Ouro 7% · Brent 6% · WIN 5%). Quando o score agregado cruza extremos (>75 bullish DOL ou <25 bearish DOL), o consenso multivariado é forte o suficiente pra produzir follow-through direcional de 30–60 min.

EN: The Termômetro DOL score aggregates 11 weighted indicators (Bias, Carry, Regime, DXY, VIX, TNX, FRP0, Political Tone, Gold, Brent, WIN). When the aggregate crosses extreme thresholds (>75 bullish DOL or <25 bearish DOL), multivariate consensus is strong enough to produce 30–60 min directional follow-through.

Gatilho de Entrada

Quando o score do Termômetro cruza para cima de 75 (DOL bullish forte) ou para baixo de 25 (DOL bearish forte) e o cruzamento persiste por ≥2 leituras seguidas (~2min), entrar na direção indicada pelo consenso multivariado.

score(t) > 75 AND score(t-1) ≤ 75 → long DOL. score(t) < 25 AND score(t-1) ≥ 25 → short DOL. Persistir ≥2 snapshots seguidos (~2min) antes de armar entrada.
📊 dollar_pulse_snapshots (score 0–100, ~1min)📊 Termômetro DOL já computado pelo engine /dollar_pulse
Regras de Saída
STOP LOSS
1.5 × ATR(14, 1min) OU score retornar à zona neutra (40–60)
TAKE PROFIT
2.0 × ATR(14, 1min) OU score atingir extremo oposto do mesmo lado
MAX HOLD: 60 min
Métricas Esperadas (estimativa)
WIN RATE
62%
AVG R
1.5×
MAX DD
9%
TRADES/DIA
2
Números são estimativas baseadas em análise teórica + research de microestrutura. Validação requer backtest formal (checklist abaixo).
Filtros Automáticos (Mute Gates)
Condições que o engine DEVE checar antes de armar. Se qualquer gate atender, o sinal nunca dispara — sem exceção.
Bloquear nos dias de FOMC — Fed muda regime e vários indicadores subjacentes (DXY, VIX, TNX) entram em modo defensivo simultaneamente, gerando cruzamentos falsos.
fonte: us_calendar
⏳ carregando
Bloquear nos dias de Copom — mudança de Selic distorce Carry/DI/Bias ao mesmo tempo, score fica instável.
fonte: bcb_calendar
⏳ carregando
Caminho de Automação
LINGUAGEM
Rust
ESTIMATIVA
~4h dev
apps/crates/engines/src/strategy_termometro_crossover.rs
Backtest Agendado
7 dias
alvo: 23 de jun. de 2026
Auditoria 2026-05-24 descobriu que o score não era persistido em prod — computado on-the-fly a cada GET /dollar_pulse, sem histórico. Migration 066 + engine dollar_pulse_snapshotter (loop 60s) deployado hoje começa a acumular 1 row/min. Esperar ~30 dias úteis pra ter sample estatisticamente decente (~40k rows) antes de re-rodar o notebook v2 (que já está pronto).
Critério de aceitação: Win rate ≥ 55% E avg R-multiple ≥ 1.2 — acima desses limiares, autoriza port pra Rust engine `apps/crates/engines/src/strategy_termometro_crossover.rs`.
💬 trigger: “retoma o backtest do Termômetro Crossover
Tail Risk
Quando 1 indicador dominante diverge dos outros 10 (ex: news súbita move só o DXY), o score pode cruzar artificialmente. Engine deve checar variance entre indicadores antes de armar — alta variance = consenso fraco = abortar.
Fonte / Evidência

Multi-factor / ensemble signals são padrão em quant institucional (Fama-French 3-factor, AQR risk-parity, Two Sigma). O Termômetro DOL é proprietary do MoneyDol — vantagem competitiva única, nenhum outro produto retail BR agrega 11 indicadores assim.

BreakoutNão implementadoMUTADO POR FILTRO

Opening Range Breakout (ORB-15)

Racional

Os primeiros 15min (09:00–09:15 BRT) estabelecem o range de abertura do DOLFUT [high_15, low_15]. Rompimentos acima de high_15 ou abaixo de low_15 após 09:15 têm follow-through estatístico em 60–70% dos casos — fluxo institucional que não coube na abertura puxa o breakout.

EN: The first 15 minutes (09:00–09:15 BRT) establish DOLFUT's opening range [high_15, low_15]. Breakouts above high_15 or below low_15 after 09:15 produce statistically significant follow-through 60–70% of the time — institutional flow that didn't fit in the opening drives the breakout.

Gatilho de Entrada

Após o range de 15min de abertura estar formado (09:15 BRT), entrar long no rompimento de high+1tick OU short no rompimento de low−1tick, sempre confirmado por volume acima da média recente.

Computar [high_15, low_15] entre 09:00–09:15 BRT. Após 09:15: long se close_1min > high_15 + 1tick. Short se close_1min < low_15 − 1tick. Confirmar com volume_1min > média(volume_1min últimos 5min).
📊 ticks DOLFUT (Cedro live, segundo-a-segundo)📊 candles_1m agregados (pra computar high/low do range)
Regras de Saída
STOP LOSS
Outro extremo do range (range_size = high_15 − low_15)
TAKE PROFIT
1.5 × range_size projetado a partir do breakout point
MAX HOLD: 180 min
Métricas Esperadas (estimativa)
WIN RATE
58%
AVG R
1.5×
MAX DD
11%
TRADES/DIA
1
Números são estimativas baseadas em análise teórica + research de microestrutura. Validação requer backtest formal (checklist abaixo).
Filtros Automáticos (Mute Gates)
Condições que o engine DEVE checar antes de armar. Se qualquer gate atender, o sinal nunca dispara — sem exceção.
Operar somente entre 09:15 e 12:00 BRT. Após meio-dia o range perde validade preditiva.
janelas BRT: 09:15–12:00
fonte: time_brt
✗ bloqueado agora
Bloquear em dias com news USD high-impact pré-09:00 (NFP, CPI) — gap de abertura invalida o range padrão.
fonte: us_calendar
⏳ carregando
Bloquear em dias de FOMC (decisão à tarde) — mercado pré-posiciona, range perde caráter institucional.
fonte: us_calendar
⏳ carregando
Caminho de Automação
LINGUAGEM
Rust
ESTIMATIVA
~6h dev
apps/crates/engines/src/strategy_opening_range_breakout.rs
Último Backtest
24 de mai. de 2026 · v1 · 8d data
INCONCLUSIVE
N TRADES
0
WIN RATE
0%
AVG R
0.00×
PNL
0.0pts
Janela puxada teve 8 dias úteis (Cedro só começou a streamar DOLFUT há pouco tempo). 6 dos 8 dias foram filtrados pelo gate `range_size < 0.4 × ATR(20, 1d)` — ATR baseline calculado com janela curta fica inflado, gera "small range" false positives. 1 dia bloqueado por FOMC. Restou 1 dia útil, range médio 11pts (p95=21pts). Zero breakouts qualificados. Mesmo problema do VWAP: filtro baseado em rolling window descalibrado pela amostra curta.
Backtest Agendado
22 dias
alvo: 08 de jul. de 2026
45d pra ATR(20, 1d) baseline calibrar. Quando re-rodar: considerar reduzir `range_min_ratio_atr` de 0.4 → 0.25 (filtro menos agressivo) OU aumentar lookback do ATR diário. Apagar `analytics/notebooks/data/*orb*.csv` pra forçar repull com janela maior.
Critério de aceitação: Win rate ≥ 55% E avg R-multiple ≥ 1.3 E N ≥ 40 trades — acima desses limiares, autoriza port pra Rust engine `apps/crates/engines/src/strategy_opening_range_breakout.rs`.
💬 trigger: “retoma o backtest do ORB
Tail Risk
Dias de range estreito (consolidação) geram breakouts falsos repetidos (whipsaw). Engine deve filtrar: se range_size < ATR(20, 1d) × 0.4, abortar — mercado provavelmente em sleep mode.
Fonte / Evidência

Mark Fisher, "The Logical Trader" (ACD Method). Tony Crabel, "Day Trading with Short Term Price Patterns and Opening Range Breakout". Aplicação em DOL/WDO documentada em conteúdo retail BR (Aulas Fraja).

Macro CurveNão implementadoCARREGANDO…

DI Curve Slope → DOL Direcional

Racional

A mudança intra-day no slope da curva DI (spread 5Y−2Y) reflete a revisão do mercado sobre a trajetória futura da Selic. Achatamento (BC mais hawkish) → BRL fortalece → DOL cai. Inclinação (dovish) → BRL enfraquece → DOL sobe. Sinal funciona em horizonte de 30–90 min.

EN: Intraday change in the DI curve slope (5Y−2Y spread) reflects market revisions of future Selic path. Curve flattening (BC perceived as more hawkish) → BRL strengthens → DOL falls. Steepening (dovish) → BRL weakens → DOL rises. The signal works on a 30–90 min horizon.

Gatilho de Entrada

Quando o spread DI 5Y-2Y muda mais de 5bps numa hora (e a mudança persiste por 15min), entrar contra o movimento esperado da Selic: curva achatando = short DOL, curva inclinando = long DOL.

slope(t) = di_5y(t) − di_2y(t) em bps. delta_slope = slope(t) − slope(t-60min). Entrada: short DOL se delta_slope < −5 bps E persistir 15min. Long DOL se delta_slope > +5 bps E persistir 15min.
📊 di_curve_snapshots (1Y, 2Y, 5Y points, ~1min)📊 ticks DOLFUT (Cedro live, pra entry/exit)
Regras de Saída
STOP LOSS
slope_delta reverter mais de 8bps OU 1.5 × ATR(14, 1min)
TAKE PROFIT
2.0 × ATR(14, 1min) OU slope retornar ao baseline pré-trigger
MAX HOLD: 90 min
Métricas Esperadas (estimativa)
WIN RATE
60%
AVG R
1.4×
MAX DD
10%
TRADES/DIA
2
Números são estimativas baseadas em análise teórica + research de microestrutura. Validação requer backtest formal (checklist abaixo).
Filtros Automáticos (Mute Gates)
Condições que o engine DEVE checar antes de armar. Se qualquer gate atender, o sinal nunca dispara — sem exceção.
Bloquear no dia do Copom e D+1 — mudança discreta de Selic destrói o relacionamento contínuo slope→DOL.
fonte: bcb_calendar
⏳ carregando
Bloquear em dias com news USD high-impact — slope BR pode reagir a fluxo externo, descorrelacionando do BC.
fonte: us_calendar
⏳ carregando
Caminho de Automação
LINGUAGEM
Rust
ESTIMATIVA
~5h dev
apps/crates/engines/src/strategy_di_curve_directional.rs
Tail Risk
Leilões do Tesouro (NTN-F especialmente) distorcem o slope artificialmente sem refletir expectativa de Selic. Engine ideal cruzaria com calendário do Tesouro — backend ainda não cobre isso, por enquanto monitorar manualmente.
Fonte / Evidência

Yield curve como predictor cambial documentado em BIS Working Paper No. 451 ("The Yield Curve and FX"). Aplicação ao DI brasileiro discutida em research da Itaú BBA Macro e BB DTVM.

Mean ReversionNão implementadoMUTADO POR FILTRO

VWAP Mean Reversion Intraday

Racional

O DOLFUT exibe forte reversão intra-day ao seu VWAP (preço médio ponderado por volume) fora de janelas de news. Quando o preço se desvia mais de 2σ do VWAP da sessão e o volume está normal (liquidez institucional presente), a reversão ao VWAP ocorre em 15–45 min.

EN: DOLFUT exhibits strong intraday mean reversion to its volume-weighted average price (VWAP) outside news windows. When price deviates more than 2σ from session VWAP and volume is normal (institutional liquidity present), reversion to VWAP occurs within 15–45 min.

Gatilho de Entrada

Quando o preço se afasta mais de 2 desvios padrão do VWAP intraday E a liquidez está normal (≥70% do volume médio do mesmo horário), entrar contra o movimento — short se preço acima do VWAP, long se abaixo.

VWAP_t = Σ(price × volume) / Σ(volume) desde 09:00. dev = (price − VWAP) / σ(price − VWAP, 60min). Entrada: short se dev > +2.0. Long se dev < −2.0. Volume_pct (volume sessão / média mesmo horário últimos 10 dias) deve ser > 0.7.
📊 ticks DOLFUT com price e volume (Cedro live)📊 VWAP calculado desde a abertura da sessão (09:00 BRT)
Regras de Saída
STOP LOSS
3σ do diff (price − VWAP) OU 1.5 × ATR(14, 1min)
TAKE PROFIT
price ≈ VWAP (reversão completa, dev cruza 0.5)
MAX HOLD: 45 min
Métricas Esperadas (estimativa)
WIN RATE
65%
AVG R
1.3×
MAX DD
7%
TRADES/DIA
4
Números são estimativas baseadas em análise teórica + research de microestrutura. Validação requer backtest formal (checklist abaixo).
Filtros Automáticos (Mute Gates)
Condições que o engine DEVE checar antes de armar. Se qualquer gate atender, o sinal nunca dispara — sem exceção.
Operar 10:00–16:30 BRT. Antes das 10h o VWAP é instável (range pequeno); após 16:30 começa drift de close.
janelas BRT: 10:00–16:30
fonte: time_brt
✗ bloqueado agora
Bloquear em dias com news USD high-impact — mercado entra em trend mode e VWAP perde poder de atração.
fonte: us_calendar
⏳ carregando
Bloquear em dias de FOMC — mesmo motivo (trend mode pós-decisão).
fonte: us_calendar
⏳ carregando
Caminho de Automação
LINGUAGEM
Rust
ESTIMATIVA
~4h dev
apps/crates/engines/src/strategy_vwap_mean_reversion.rs
Último Backtest
24 de mai. de 2026 · v2_relaxed (dev=1.5, vol_pct=0.5) · 8d data
INCONCLUSIVE
N TRADES
4
WIN RATE
100%
AVG R
0.56×
PNL
3.3pts
Bug v1 (zero trades) diagnosticado: era filtro de volume, não o threshold do dev. 49% dos minutos têm |dev|>1.5 mas só 5.6% passa vol_pct>0.5 — volume baseline está descalibrado porque lookback de 10 sessões cai em janela onde DOLFUT Cedro mal tinha começado a streamar. 4/4 trades viraram TP em ~1.5min (sinal funciona) mas N=4 é statistically noise.
Backtest Agendado
22 dias
alvo: 08 de jul. de 2026
45d pra volume baseline calibrar conforme ticks DOLFUT acumulam via Cedro live. Quando re-rodar: voltar aos params ORIGINAIS (dev_entry=2.0, vol_pct_min=0.7) — v2 relaxado foi só pra diagnóstico, não pra produção. Apagar `analytics/notebooks/data/dol_vwap_60d.csv` pra forçar repull com janela maior.
Critério de aceitação: Win rate ≥ 60% E avg R-multiple ≥ 1.0 E N ≥ 60 trades (mínimo estatístico) — acima desses limiares, autoriza port pra Rust engine.
💬 trigger: “retoma o backtest do VWAP
Tail Risk
Dias de trend forte (gap continuação) quebram a reversão — preço se afasta progressivamente do VWAP sem reverter. Engine deve detectar: se 3 sinais consecutivos falharem, suspender estratégia até reset da sessão (dia seguinte).
Fonte / Evidência

Berkowitz, Logue, Noser (1988) — origin paper do VWAP como métrica de execução. Mean reversion intraday em futuros documentada em Lo, MacKinlay, "A Non-Random Walk Down Wall Street" (1999). DOL/WDO especialmente mean-reverting comparado ao mini-índice (que tem trend factor maior).

Checklist de Backtest Antes de Subir pra Produção

  1. Pull 6+ meses de dados históricos: ticks DOLFUT/WDOFUT, broker_rankings, carry_snapshots, DXY (external_data). Garantir continuidade — gaps no Cedro (cedro_connection_logs) devem virar timestamps excluídos do backtest.
  2. Walk-forward analysis com janela in-sample 4 meses + out-of-sample 1 mês, deslizando mês a mês. Parâmetros ajustados em IS e validados em OOS — evita curve-fitting.
  3. Slippage realista: assumir 0.5 tick de slippage em entrada e saída no DOLFUT (mais em horários de baixa liquidez). Custo de corretagem + emolumentos B3 (~R$ 1.20/contrato).
  4. Sharpe ratio, max drawdown, profit factor, win rate, avg R-multiple por estratégia E por regime (Termômetro DOL alto/médio/baixo). Estratégia que só funciona em regime específico precisa de gate explícito.
  5. Comparar com benchmark naive (buy-and-hold do contrato + carry trade puro). Edge real só conta se Sharpe líquido > 1.0 vs benchmark após custos. Caso contrário, descartar.
Próximos passos: validar cada estratégia em Python notebooks (pandas + plotly contra dados históricos) antes de portar pra Rust engine. Live triggers ficam pra v2 desta tela.