Bloomberg Data Pipeline¶
Este documento descreve a arquitetura e o funcionamento do pipeline de extração de dados da Bloomberg utilizado no LuxorASAP. Ele cobre desde a extração via blpAPI, passando pelo armazenamento em ADLS, até a transformação e integração das tabelas finais.
Visão Geral¶
flowchart TD
subgraph **Bloomberg Data Pipeline**
MDE[market_data_extractor.py]
MDE -->|--datapoint| Raw1[px_last_raw + last_all_flds_raw]
MDE -->|--histdata| Raw2[hist_px_last_raw + hist_all_flds_raw + holidays_raw]
Raw1 --> Raw[ADLS: luxorasap/raw/parquet]
Raw2 --> Raw
Raw -->|market_data_loader.py| Enriched[("px_last, hist_px_last, holidays, last_all_flds, hist_all_flds<br>(luxorasap/enriched/parquet)")]
end
Etapa 1 – Extração via market_data_extractor.py¶
O script market_data_extractor.py é o ponto inicial do pipeline, responsável por consultar dados da Bloomberg via blpAPI e salvar arquivos .parquet no ADLS em luxorasap/raw/parquet.
Modos de Execução¶
1. --datapoint: Extração contínua (BDP)¶
flowchart TD
subgraph **Datapoint**
MDEX["market_data_extractor.py"]
MDEX --> A1["Leitura: historico_trades_ativos.xlsx (aba ativos)"]
MDEX --> A2["Leitura: historico_trades_ativos.xlsx (aba asset_field_map)"]
A1 --> C1{"Disable BDP = FALSE?"}
C1 -->|Sim| Q1["BDP → px_last_raw.parquet"]
A2 --> C2{"Last_Data = TRUE?"}
C2 -->|Sim| Q2["BDP → last_all_flds_raw.parquet"]
Q1 & Q2 --> W1["Grava em luxorasap/raw/parquet"]
end
Este modo do market_data_extractor.py realiza chamadas contínuas à API BDP da Bloomberg para extrair os últimos preços (px_last_raw) e outros campos configurados (last_all_flds_raw).
A frequência da extração (day, hour, minute) e os ativos consultados são definidos nas abas ativos e asset_field_map do Excel historico_trades_ativos.xlsx.
O script também contabiliza os hits consumidos (máximo de 500 mil por dia).
2. --histdata: Extração histórica (BDH + BDS)¶
flowchart TD
subgraph **Histdata**
MDEX["market_data_extractor.py"]
MDEX --> B1["Leitura: historico_trades_ativos.xlsx (aba ativos)"]
MDEX --> B2["Leitura: historico_trades_ativos.xlsx (aba asset_field_map)"]
B1 --> C3{"Hist_Price = TRUE?"}
C3 -->|Sim| Q3["BDH → hist_px_last_raw.parquet"]
B2 --> C4{"Historical_Data = TRUE?"}
C4 -->|Sim| Q4["BDH → hist_all_flds_raw.parquet"]
MDEX --> Q5["BDS → holidays_raw.parquet"]
Q3 & Q4 & Q5 --> W2["Grava em luxorasap/raw/parquet"]
end
Este modo executa consultas únicas para baixar preços históricos (hist_px_last_raw), campos históricos (hist_all_flds_raw) e feriados de mercado (holidays_raw).As configurações são feitas no mesmo Excel, nas colunas
Hist_Price, Historical_Data e Start_Date.Esse modo não é contínuo e não possui limitação explícita de uso por parte da Bloomberg.
Resumo¶
| Modo | Função BBG | Tabelas de Saída | Fonte de Frequência | Observações |
|---|---|---|---|---|
--datapoint |
BDP | px_last_raw, last_all_flds_raw |
aba ativos e asset_field_map | Consulta contínua (day/hour/minute). Monitora limite de 500 k hits/dia |
--histdata |
BDH & BDS | hist_px_last_raw, hist_all_flds_raw, holidays_raw |
abas ativos e asset_field_map | Execução pontual (batch). Sem limite explícito |
Etapa 2 – Integração via market_data_loader.py¶
Após a extração, o script market_data_loader.py observa alterações nas pastas raw/parquet e inicia a transformação e integração dos dados.
flowchart TD
subgraph **Loader**
ML["market_data_loader.py"]
ML --> M1["Monitora: luxorasap/raw/parquet"]
M1 --> px_raw["px_last_raw.parquet"]
M1 --> hist_px["hist_px_last_raw.parquet"]
M1 --> fld_raw["last_all_flds_raw.parquet"]
M1 --> hist_fld["hist_all_flds_raw.parquet"]
M1 --> hol_raw["holidays_raw.parquet"]
subgraph Enriquecimento
px_raw --> Merge["Merge com fontes externas"]
Merge --> px["px_last.parquet"]
hist_px --> Ajuste["Corrige FIAs via IBOV"]
Ajuste --> hpx["hist_px_last.parquet"]
fld_raw --> lfld["last_all_flds.parquet"]
hist_fld --> hfld["hist_all_flds.parquet"]
hol_raw --> hol["holidays.parquet"]
end
subgraph Output
px & hpx & lfld & hfld & hol --> E[("luxorasap/enriched/parquet")]
end
end
Ao identificar novos arquivos, ele integra os dados da Bloomberg com outras fontes de preço internas, corrige preços dos FIAs com base no IBOV
e gera as tabelas finais enriquecidas (px_last, hist_px_last, holidays, last_all_flds, hist_all_flds) na pasta luxorasap/enriched/parquet.
Fontes integradas em px_last.parquet:¶
px_last_raw(Bloomberg via BDP)hist_non_bbg_px_lastcustom_pricescustom_funds_quotasall_funds_quotashist_vc_px_last
Transformações adicionais:¶
- FIAs: os preços em
hist_px_last_rawsão corrigidos até o dia atual com base no IBOV.
Tabelas finais geradas em luxorasap/enriched/parquet:¶
px_last.parquet: últimos preços de todos os ativos.hist_px_last.parquet: históricos ajustados (com correções).holidays.parquet: feriados integrados.last_all_flds.parquet: campos atuais de ativos.hist_all_flds.parquet: campos históricos de ativos.
Conclusão¶
Este pipeline garante a extração estruturada e robusta dos dados da Bloomberg, respeitando as limitações da API e unificando múltiplas fontes de preço em uma camada final confiável. O processo está preparado para rodar de forma contínua e automática, assegurando que os dados estejam sempre atualizados para alimentar modelos, dashboards e análises internas da Luxor.