Como baixar dados da B3 com MetaTrader5 e Python

Avatar de Rodrigo Tadewald Rodrigo Tadewald
5 minutos de leitura 4 meses atrás

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:

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.

ftb b3 desativado
ftp da bolsa cant be reached

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.

meta trader aberto

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.

abrindo ativos no meta trader 5

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.

tabela ohlc metatrader 5

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 as importações e a leitura das credenciais:

import MetaTrader5 as mt5
from datetime import datetime
import pandas as pd
login, password = open('credentials').read().split()
server = "xxx" # 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. E caso ocorra algum erro durante esta conexão, ele será exibido na tela.

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

Começando com os 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.

dados do meta trader no python

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:

dados meta trader 5 em python

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.

Curso Gratuito

Curso gratuito de Python

Do zero ao primeiro projeto em apenas 2 horas

Criar conta gratuita

Comentários

Comentar
Você tem o Acesso Básico.
Libere seu acesso ao suporte dos professores Garanta seu acesso PRO para tirar todas suas dúvidas com nossa equipe.
Seja PRO