7 minutos de leitura

Como baixar dados da B3 com MetaTrader5 e Python

Por Rodrigo Soares Tadewald
Conteúdos do artigo

Neste artigo, você irá aprender o passo a passo para baixar dados da B3 usando MetaTrader5 e Python.

Se você preferir, pode seguir o passo a passo em vídeo:

https://youtu.be/TwjXWPPiN5Y

Obter dados históricos intradiários de qualidade da bolsa de valores brasileira nunca foi uma tarefa fácil. Até meados de 2020, era possível obter séries de até 2 anos atrás de todas as negociações ocorridas na BMF & BOVESPA, através do seu ftp público. Porém, com a criação do UP2DATA, esse servidor foi desativado e o acesso a dados se tornou mais complicado.

baixar dados da B3
baixar dados da B3

Algumas bibliotecas públicas ainda permitem a obtenção parcial de dados históricos, como o yfinance e tvDataFeed, mas falham no que diz respeito à confiabilidade e alta disponibilidade.

Porém, recentemente um aluno da Asimov Academy me apresentou a API pública para Python do MetaTrader5, que, aparentemente, se mostrou a melhor opção até então.

O MetaTrader5 é uma plataforma popular para negociação de ativos financeiros, incluindo moedas, ações e commodities. A plataforma oferece uma ampla variedade de ferramentas e recursos para os traders. Neste artigo, vamos explorar como baixar dados de mercado financeiro do MetaTrader 5 usando Python. 

Como obter acesso ao MetaTrader5?

Primeiramente, é preciso alertar que este tutorial funcionará apenas no Windows. Se você, assim como eu, for usuário de outro sistema operacional (no meu caso, uso MacOS), precisará instalar uma máquina virtual para rodar uma instância do Windows.

Em segundo lugar, é essencial que você possua uma conta em uma corretora que ofereça uma licença gratuita do MetaTrader5. Muitas corretoras do mercado disponibilizam essa plataforma para seus clientes sem custos adicionais. Caso sua instituição financeira não ofereça o acesso, é possível criar uma conta gratuita em uma corretora que disponibilize o MetaTrader5.

Feito isso, você deverá receber um usuário e senha para acesso a servidores de produção (em que já é possível enviar ordens reais ao mercado) ou a servidores demo. Este último já será necessário para conseguirmos baixar os dados de mercado.

baixar dados da B3

Após abrirmos o software, notamos que é possível obter dados de mercado através de uma exportação manual. Para isso, clique em Exibir > Ativos.

baixar dados da B3

Na tela a seguir, você poderá navegar pelos ativos liberados para sua corretora. Ao selecionar qualquer um deles e ir até as abas Barras ou Ticks, você terá a opção de carregar dados históricos de diferentes janelas temporais e exportá-los em um arquivo CSV.

Mas e se você estiver interessado em centenas de ativos? Ou mesmo em todos? Felizmente, o MetaTrader5 possui uma API pública em Python que nos permite reproduzir esse procedimento de maneira programática.

Utilizando a API do MetaTrader5

Para começarmos, é necessário instalar a biblioteca. Para isso, utilize o comando:

pip3 install MetaTrader5

A documentação completa da biblioteca está disponível em: https://www.mql5.com/en/docs/python_metatrader5. Neste artigo, vamos explorar apenas as funções de captura de market data (dados de mercado).

Dentro do Python, crie um arquivo chamado credentials, coloque seu usuário e senha nele e salve-o. Vamos ler esses dados com nosso script, removendo a necessidade de adicionar esses dados sensíveis ao nosso código.

Começando com os imports e a leitura das credentials.

import MetaTrader5 as mt5
from datetime import datetime
import pandas as pd
login, password = open('credentials').read().split()
server = ‘’ # Adicione aqui o servidor informado por sua corretora.

Agora, utilizaremos a biblioteca para se conectar ao MetaTrader5. 

if not mt5.initialize(login=int(login), password=password, server=server):
    print("initialize() failed, error code = ", mt5.last_error())
    mt5.shutdown()

Ao executar esse código, o Python abrirá o MetaTrader e se conectará a ele. 

Podemos baixar dados de candle e ticks utilizando, respectivamente, as funções ​​copy_rates_range e copy_ticks_range.

Começando com ticks:

ticks = mt5.copy_ticks_range(
    'PETR4', # Símbolo desejado
    datetime(2023, 3, 1), # Data Inicial
    datetime(2023, 3, 7), # Data Final
    mt5.COPY_TICKS_ALL) # Flag da busca. Podemos passar também mt5.COPY_TICKS_TRADE e mt5.COPY_TICKS_INFO.
ticks = pd.DataFrame(ticks)

O resultado foi um DataFrame de 273 mil linhas, com todas as transações ocorridas em PETR4.

Para buscarmos dados de candles, usaremos o método copy_rates_range.

candles = mt5.copy_rates_range(
    'PETR4', # Símbolo desejado
    mt5.TIMEFRAME_M1, # Janela temporal. Outras opções podem ser encontradas na documentação.
    datetime(2023, 3, 1), # Data Inicial
    datetime(2023, 3, 7), # Data Final
    )
df_candles = pd.DataFrame(candles)

E o resultado:

De posse dessas duas simples funções, você já será capaz de montar sua base de dados própria para pesquisa de estratégias de investimento. 

Conclusão

Utilizar o MetaTrader 5 para baixar dados da B3 é a melhor opção gratuita para quem busca utilizar análise quantitativa para desenvolvimento de estratégias de investimento. Além disso, a integração com Python permite também a automatização de processos e a implementação de estratégias de trading.

Espero que este artigo tenha sido útil para você iniciar seus estudos e experimentos com essa poderosa ferramenta.

Dúvidas, comentários, sugestões? 

Deixe seu feedback abaixo.

Inscreva-se gratuitamente e fique atualizado

Receba toda semana um resumo dos principais conteúdos da Asimov direto no seu e-mail. 100% livre de spam.

Áreas de interesse:
Conteúdos do tutorial