Sistema completo para monitoramento de fluxos de capital estrangeiro em 10 mercados (Brasil, México, Chile, Índia, Coreia, Taiwan, China A via HK Connect, Japão, Indonésia, EUA). Backend em Python (FastAPI), banco SQLite embarcado, scheduler diário, frontend React servido pelo mesmo processo.
O que está realmente "ao vivo"
Dado
Fonte
Frequência
Status
Preços/índices dos 10 mercados
yfinance (Yahoo Finance)
Diário
✅ Ao vivo
Fluxo estrangeiro · Brasil
B3 "Dados de Mercado" CSV oficial
Mensal (D+2)
✅ Ao vivo (parser real)
Fluxo estrangeiro · Taiwan
TWSE JSON público
Diário
✅ Ao vivo
Câmbio BRL/USD
Banco Central do Brasil · PTAX
Diário
✅ Ao vivo
Macro/BoP anual (10 países)
World Bank API
Anual
✅ Ao vivo
Fluxos diários · Índia
NSDL (scraper a implementar)
Diário
🟡 Stub + seed real
Fluxos diários · Coreia
KRX KIND (scraper a implementar)
Diário
🟡 Stub + seed real
Fluxos diários · HK Connect
HKEX (turnover apenas pós-Ago/2024)
Diário
🟡 Cobertura limitada
Fluxos · Demais
Calibrado / estimado
Mensal
🟡 Seed real
Os "seeds reais" foram ancorados em totais mensais publicados (B3 R$ 26,3 bn em Jan; NSDL Rs 1,17 tn em Mar; KRX KRW 3,14 tn em 6/Mai etc.) — o scheduler atualiza eles automaticamente quando você implementar os scrapers restantes.
Três formas, em ordem do menos ao mais técnico. Escolha conforme a sua máquina:
1. Executável standalone (sem Python instalado)
Baixe o binário pré-compilado para o seu sistema (Windows / macOS / Linux) na aba Releases do repositório. Esses binários são produzidos automaticamente pelo GitHub Actions a cada tag — você não precisa fazer nada além de baixar, descompactar e clicar duas vezes.
Windows: xcap-windows-x64.zip → descompacte → duplo-clique em xcap.exe
macOS: xcap-macos-arm64.tar.gz → descompacte → cd xcap && ./xcap
Linux: xcap-linux-x64.tar.gz → descompacte → cd xcap && ./xcap
O binário inclui Python e todas as dependências. Não precisa instalar nada. Na primeira execução:
Abre o navegador automaticamente em http://localhost:8000
Cria xcap.db no mesmo diretório (modo portátil) ou no diretório do usuário, conforme permissões
Baixa o histórico do yfinance (~40s)
Atualiza diariamente via scheduler embarcado
Para construir o binário você mesmo:
bash
1# macOS / Linux2./build.sh
34# Windows5build.bat
(precisa de Python instalado apenas para construir, não para rodar o binário produzido)
2. Script de execução com auto-install (com Python já instalado)
Esses scripts criam um virtualenv local, instalam as dependências na primeira execução, e iniciam o dashboard. Subsequentes execuções pulam a instalação.
GET / # Frontend (index.html)
GET /api/health # status
GET /api/countries # metadados dos 10 mercados
GET /api/flows/daily?country=BR&days=120
GET /api/flows/monthly?country=BR
GET /api/indices/{country}?days=252
GET /api/macro/{country} # World Bank: portfolio + FDI
GET /api/signals?days=60&severity=critical&country=BR
GET /api/overview # dashboard summary
POST /api/admin/refresh # trigger manual (X-Admin-Token header)
POST /api/admin/seed # reseed real monthly data
Variáveis de ambiente
XCAP_DB=xcap.db # caminho do SQLite
XCAP_ADMIN_TOKEN=change-me # auth para /api/admin/*
XCAP_SCHEDULE=0 22 * * 1-5 # cron do daily update
XCAP_PORT=8000
Conector B3 — como funciona (implementado)
O B3Connector em connectors.py é um conector real, não um stub. Pipeline:
Download do CSV oficial em https://sistemaswebb3-listados.b3.com.br/marketDataProxy/MarketDataCall/GetDownloadMarketData/RELATORIO_DADOS_DE_MERCADO.csv (na verdade um ZIP, apesar da extensão).
Extração do CSV de dentro do ZIP, decodificação latin-1.
Parsing da seção "Movimentação dos Investidores Estrangeiros Mensal (R$ Milhões)" usando regex para localizar o cabeçalho e parser de números no formato brasileiro (1.234,56 e parênteses para negativos).
Conversão BRL→USD via API PTAX do Banco Central (olinda.bcb.gov.br/.../CotacaoDolarDia), com fallback para taxa estática se a BCB estiver fora.
Upsert no fact_flow_monthly com kind='real' e nota com a taxa de câmbio usada.
Redistribuição diária via seed_daily_from_monthly(db_path, country='BR') — preserva o total mensal exato, gera ruído gaussiano por dia útil.
Audit trail: cada download é arquivado em data/snapshots/b3/RELATORIO_YYYY-MM-DD.bin (rotação 30 dias).
Testar isoladamente:
python connectors.py b3 data/xcap.db
Latência: dados da B3 são publicados em D+2 ("Participação dos investidores e movimentação dos investidores estrangeiros: D+2" conforme aviso oficial na página do produto).
Troubleshooting do build PyInstaller
Antivírus marca o xcap.exe como suspeito (Windows)
Falso positivo comum em binários PyInstaller. Soluções:
Adicione exceção no Defender / outro AV
Para distribuição pública, assine o exe com um certificado (Authenticode)
Use o GitHub Releases — binários baixados de fonte conhecida têm reputação melhor
Build falha com ModuleNotFoundError ao rodar
Algum import dinâmico escapou. Adicione o módulo a hiddenimports em xcap.spec ou use --collect-submodules <nome> no build.sh.
Binário muito grande (~150 MB)
Esperado — inclui Python, pandas, yfinance, numpy. Para reduzir:
Remova pandas se não usa nada além de filtragem básica (substitua por dict + csv)
Use --exclude-module para libs realmente não usadas
Não use UPX (false positives de AV)
yfinance não funciona no binário frozen
Adicione --collect-all yfinance ao comando do PyInstaller (já incluso em build.sh/.bat).
No macOS aparece "xcap não pode ser aberto porque o desenvolvedor não pode ser verificado"
Macs bloqueiam binários não assinados. Solução temporária:
xattr -dr com.apple.quarantine dist/xcap/xcap
Para distribuição pública, é preciso codesign + notarização Apple.
Porta 8000 em uso
O launcher.py detecta automaticamente e usa 8001, 8002, etc. Veja a URL no banner ao iniciar.
Implementando os scrapers restantes
Os 3 stubs restantes em connectors.py mostram exatamente onde cada exchange publica os dados.
Endpoints documentados (todos públicos, sem auth):
NSDL FPI: https://www.fpi.nsdl.co.in/Reports/Latest.aspx — ASP.NET, precisa POST do __VIEWSTATE com a data
KRX KIND: http://data.krx.co.kr/comm/bldAttendant/getJsonData.cmd — POST com bld=dbms/MDC/STAT/standard/MDCSTAT02401
HKEX Stock Connect: turnover apenas; net diário foi descontinuado em Ago/2024 pela SSE/SZSE