Pular para conteúdo

Visão Geral

Fluxo end-to-end

flowchart TB
    subgraph Coleta["📥 Coleta de dados"]
        MT5[MetaTrader 5<br/>terminal da corretora]
        TD[Twelve Data<br/>fallback histórico]
        MT5 -->|tick + OHLCV| Collector
        TD -->|bootstrap| Collector
        Collector[Collector Worker<br/>scripts/run_collector.py]
    end

    Collector -->|UPSERT candles| DB[(PostgreSQL 16<br/>partições mensais)]

    subgraph ML["🤖 Pipeline ML"]
        Features[Feature Engineering<br/>FDA + ATR + EMA derived]
        Train[Treino<br/>LGBM + XGB + CatBoost]
        Predict[Predição<br/>+ Conformal + Meta-label]
        Features --> Train --> Predict
    end

    DB --> Features
    Predict -->|INSERT predictions| DB

    subgraph API["🌐 API FastAPI"]
        Auth[Auth multi-tenant<br/>X-API-Key + rate limit]
        Scan[/api/scan/]
        Account[/api/account/*/]
        Webhooks[/webhooks/eduzz/]
        Admin[/admin/*/]
        Auth --> Scan & Account
    end

    DB --> API
    API -->|sinais| EA[EA v2.27<br/>MT5 multi-símbolo]
    EA -->|executions| API

    subgraph Notif["📲 Notificações"]
        Telegram[Bot + Canal]
        Discord[Webhook]
        Email[SMTP HTML]
    end

    API --> Notif

    Eduzz[Eduzz<br/>checkout PIX/Cartão] -.->|HMAC webhook| Webhooks
    Webhooks --> Email

    subgraph Frontend["🖥️ Frontend"]
        Index[/Landing/]
        Conta[/Minha Conta<br/>tabs + KPIs/]
        Dash[/Dashboard/]
        Ops[/Ops admin/]
    end

    API --> Frontend

    subgraph DR["💾 Backup & DR"]
        B2[Backblaze B2<br/>us-east-005]
        DB -.->|pg_dump diário| B2
        Train -.->|sticky pickles| B2
    end

Componentes principais

Worker (scripts/run_worker.py)

Loop principal que orquestra:

  1. Coleta — fetch de candles via MT5 (websocket) ou Twelve Data (REST)
  2. Features — calcula indicadores (ATR, EMAs derivadas, FDA, sessões, vol expansion)
  3. Predição — carrega modelos do models/ e gera sinais a cada nova barra
  4. Persist — INSERT em predictions (partição do mês)
  5. Broadcast — confluência (H1+H4 mesma direção) → Telegram canal + Discord
  6. Drift check — diário, calcula PSI/CUSUM e marca modelos degradados

API (app/api/main.py)

FastAPI assíncrono com 11 routers:

Router Endpoints Auth
scan /api/scan X-API-Key
signals /api/signals/{symbol}/{tf} X-API-Key
history /api/history/* X-API-Key
executions POST /api/executions (EA reporta) X-API-Key
ea_status /api/ea-status X-API-Key
account /api/account/me|signals|executions|regenerate-key X-API-Key
performance /api/performance X-API-Key
calibration /api/calibration X-API-Key
models /api/models X-API-Key
status /api/status, /api/health X-API-Key/público
public /api/public/stats público
admin /admin/keys, /admin/monitoring-data X-Admin-Secret
webhooks /webhooks/eduzz HMAC-SHA256

EA (ea/ML_Sensorial_Scanner.mq5)

Single-file MQL5, 1852 linhas. Funciona como scanner único multi-símbolo:

  • Roda em um gráfico qualquer
  • Itera 14 pares × 4 TFs no loop
  • Consulta /api/scan a cada minuto
  • Abre posições respeitando MaxGlobalPositions, MaxPerSymbol
  • Gerencia: trailing, breakeven, time-stop, cooldown
  • Reporta ao backend via POST /api/executions

Frontend

Vanilla JS + Chart.js. Sem build step.

Página Stack
/ (landing) HTML + CSS animado
/resultados API public/stats + tabela
/dashboard Chart.js + WebSocket-free polling
/minha-conta 4 tabs + KPIs + equity curve + modal regen
/ops Admin dashboard (X-Admin-Secret)

Latências típicas (produção)

Operação p50 p95
/api/scan 45ms 120ms
/api/account/me 12ms 30ms
/api/account/signals?limit=50 28ms 75ms
/api/account/executions?days=30 35ms 95ms
Worker: predição completa (1 slot) 180ms 450ms

Throughput

  • Candles ingeridos: ~40 ativos × 4 TFs × ≈1/min = ~160 inserts/min
  • Predições geradas: 14 ativos × 4 TFs × 1/bar = 14-100/min (depende do TF)
  • API: ~50-200 requests/min (EA polling + frontend)
  • EA por assinante: 1 polling/min = 1440 requests/dia/assinante