2011-02-28

Download dos Arquivos de Mercado da BM&FBovespa

Atenção: Se estás procurando a URL para os arquivos da Bolsa, veja a nota de 2011-11-10, ao final do artigo. Ela resolve, em definitivo, qualquer questão sobre onde baixar.
No dia-a-dia do mercado é necessário alimentar sistemas (e planilhas) com os dados de mercado de diversas fontes. No Brasil fonte principal é a BM&FBovespa (da fusão da BM&F e da BOVESPA).
A BM&FBovespa é bastante transparente, permitindo a partir das página a busca das informações necessárias com relativa facilidade. Eles fornecem, gratuitamente, um bom conjunto de informações na forma de arquivos texto muito simples, facilmente interpretáveis por maquina.
A partir da Home deles, navengando-se em Mercado | Mercadorias e Futuros | Dados Históricos | Pesquisa por Pregão se chega a uma página onde pode-se selecionar os arquivos e suas datas e baixar todos os selecionados de uma só vez. A partir desta mesma página pode-se consultar o layout de cada arquivo.
Para integrar esses dados com sistemas financeiros há dois caminhos a seguir:
  1. Implementa-se um robô para navegar, selecionar, postar e baixar o arquivo resultante.
  2. Download direto do arquivo.
A opção 1 é ruim e só deve ser utilizada em último caso. Mudanças de layout, IDs de controles na página, tecnologia subjacente, etc podem quebrar a busca dos dados. Enfim, é uma solução frágil.
A opção 2 é bem melhor, mas onde estão os arquivos para download direto? Infelizmente a transparência da BM&FBovespa não foi tão longe, e embora os arquivos para download direto existam, suas URLs parecem ser um segredo bem guardado pelos desenvolvedores que os acharam.
Não mais! Para evitar que colegas passem a perder tempo achando uma informação que deveria ser fácil de localizar, neste post dou as URLs que conheço e utilizo no RiskSystem, Sistema para Risco de Mercado que minha empresa, a Elekto, desenvolve.
Vamos aos arquivos:
  • BDIN: No geral contém os preços das ações negociadas. Em http://www.bmfbovespa.com.br/fechamento-pregao/bdi/bdi@MM@@DD@.zip
  • BDPregao: Futuros, Opções, derivativos em geral. Em http://www.bmf.com.br/Ftp/ContratosPregaoFinal/BF@YY@@MM@@DD@.ex_
  • TaxasSwap: Taxas de Swaps realizados.Útil para a construção de curvas. Em http://www.bmf.com.br/Ftp/TaxasSwap/TS@YY@@MM@@DD@.ex_
  • Indic: Indicadores Agropecuários e Econômicos. Em http://www.bmf.com.br/Ftp/IndicadoresEconomicos/ID@YY@@MM@@DD@.ex_
  • PremiosDeReferencia: Prêmios de Referência para Opções. Em http://www.bmf.com.br/Ftp/PremioReferencia/RE@YY@@MM@@DD@.ex_
  • Arquivo zip contendo emissores (emissor.txt) e as emissões (numeraca.txt)
    http://www.bmfbovespa.com.br/isin/DownloadArquivo.asp?TipoArquivo=P
  • Arquivo zip com XML contendo os instrumentos da B3, BVBG.28 em
    http://www.bmf.com.br/Ftp/IPN/TS/BVBG.028.02/IN@YY@@MM@@DD@.zip
  • Aquivo zip com XML contendo o pregão da B3, BVBG.86 em
    http://www.bmf.com.br/Ftp/IPN/TRS/BVBG.086.01/PR@YY@@MM@@DD@.zip
  • Aquivo zip com XML contendo os índices da B3, BVBG.87 em
    http://www.bmf.com.br/Ftp/IPN/GPS/BVBG.087.01/IR@YY@@MM@@DD@.zip
Nessas URLs os termos @YY@, @MM@ e @DD@ são, como esperado, o ano, mês e dia do pregão desejado, com dois digitos sempre.
Note os arquivos com extensão “.ex_”. A BM&F comprime o txt num zip self-extráctil. Cuidado com o meio de extrair isso, não renomeie para “.exe” e execute! Especialmente não tente fazer isso via sistema. Razões: O arquivo é um executável de 16bits. Simplesmente não vai rodar em sistemas 64bits, e nem em sistemas 32bits com a segurança reforçada. A outra é que você, ao executar, abre uma porta para infecção. Ora, dirás, qual o risco da BM&F ser hackeada? Só de perguntar eu já tenho de medo do código que você desenvolve…
A solução para esses “.ex_” é abri-lo diretamente com uma ferramenta de extração, como o Rar (que tem uma biblioteca de extração, unrar.dll, de uso gratuíto), ou usar qualquer outra biblioteca capaz de extrair um arquivo de um zip, tal como a SharpZLib, Open Source, GPL, para .Net.
Uma nota para quem utilizar a SharpZLib: Como baixado o arquivo, ao extrair você poderá ter uma excessão dizendo algo como o “diretório central e local não coincidem”. De fato o utilitário usado pela BM&F é tão antigo que nem escrever um zip corretamente ele escreve. Na SharpZLib você terá de descobrir (Você não adora código livre?) o local  onde ocorre a excessão e “engolir” com um try-catch de forma que a extração chegue ao termo (e ela chega).
Como cheguei nessas URLs? As 3 primeiras foram passadas de geração em geração ao longo das empresas em que trabalhei. A última foi caçada com “tentativa-e-erro” usando-se o curl. Boa sorte procurando outras URLs de lá com esse método.
Se achardes outra, ou souberes, por favor, compartilhe!


Update em 2018-02-28: A B3 (junção da BM&F, Bovespa e Cetip) deixou de publicar em 2017-08 os arquivos BDin e BDPregao. Eles foram substituídos por 3 arquivos XMLs, que juntos, fornecem a mesma informação:  Instrumentos (BVBG.28),  BVBG.86 (Pregao) e Índices (BVBG.87). São enormes, mas a chave para ter a mesma informação que os anteriores é relacionar o BVBG.86 com o BVBG.87 usando os campos TckrSymb e FinStrumId. A Elekto, minha empresa, fez um conversor que foi usado com sucesso por alguns players do mercado, enquanto terminavam a adaptação em sistemas legados. Nos procure para negociar serviço, os binários do programa, ou mesmo o fonte.

Update em 2011-11-10: Após sofrimento, descobri que não sou muito esperto. Deve ter sempre existido um endereço FTP, navegável, e sei lá por qual razão eu nunca havia tentado ou achado. Pois então, o endereço, com acesso anonimo, é ftp://ftp.bmf.com.br, os mesmos arquivos listados no FTP são baixáveis via Http usando uma estrutura de diretórios similar. Por exemplo: o arquivo de Prêmios de Referência de Opções fica no FTP em ftp://ftp.bmf.com.br/PremioReferencia/RE111109.ex_, o endereço http correspondente fica em http://www.bmf.com.br/Ftp/PremioReferencia/RE111109.ex_. Simples assim.

Update em 2011-06-17: Urls para o arquivo de emissões (numerca.txt) e emissores (emissor.txt) da BM&MBovespa.