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.

6 comentários:

  1. Rapaz você foi show!!! muito obrigado por suas informações... não as tire do ar, não vou copia-las para mim pois vc merece realmente o crédito vou repassar seu link! Busquei muito tempo por essa informações, inclusive as dos bdis eu já as tinha. O link de FTP foi de excelente serventia aos meus trabalhos e estou muito grato a sua pessoa!

    Obrigado, bons trabalhos e um abraço!

    ResponderExcluir
  2. Parabéns aí e obrigado pelo compartilhamento de informações. Eu havia achado as URLs também igual a vc e com seu post descobri que é mais fácil de fato o ftp. Mas até agora não entendi como descompactar a extensão dos arquivos ".ex_".
    Eu estava descompactando o bdi e lendo com meu codigo java pra importar automaticamente. Mas não achei como descompactar e utilizar os dados dos arquivos disponíveis no ftp.
    Vc poderia me passar esta dica?

    Obrigado,

    Adriano

    ResponderExcluir
  3. Amigo, obrigado pela gentileza. Deu certo aqui. Tks

    ResponderExcluir
  4. Boa noite. Vc ainda está trabalhando com estas importações? Os arquivos BDI foram extintos. O XML que o substituiu não possui todas as informações do anterior.
    Como vc está fazendo? Documentação é bem escassa...

    Parabéns pelo POST.

    Obrigado,

    Adriano

    ResponderExcluir
    Respostas
    1. Oi Adriano,

      A documentação é escassa e foi um trabalho insano de detetive decifrar alguns campos dos XMLs e a relação entre elementos.

      A grande sacada é você usar o XML de Instrumentos (BVBG.28) e amarrar ele com o BVBG.86 (Pregao). Dessa forma você consegue datas de vencimento, strikes etc.

      Minha empresa (http://elekto.com.br) fez um "conversor" que foi usado com sucesso por um grande banco, e por uma tesouraria de Agro, enquanto eles terminavam a transição de alguns sistemas legados para usar o novo sistema.

      Nos procure caso queira um serviço, binários ou mesmo o fonte.

      Mas a chave está no enorme BVBG.28.

      Excluir