Moeda de bitcoin diante de uma matriz de números binários
Trading

Python para trading: bibliotecas, dados e primeiros passos

Python para trading: quais bibliotecas usar (pandas, ccxt, backtrader, vectorbt, MetaTrader5), como baixar candles de cripto e fazer o primeiro backtest.

Imagem: Boletim Bitcoin

Por Redação Boletim Bitcoin

. Leitura de 6 min.

Python para trading serve para três tarefas: obter dados de mercado, testar estratégias no histórico e, se fizer sentido, executar ordens automaticamente pela API da corretora. Com poucas bibliotecas (pandas, ccxt e uma ferramenta de backtest) você baixa anos de candles de bitcoin em segundos e testa uma ideia com custos incluídos. Este guia mostra o caminho com código que funciona.

Em resumo: instale Python 3, pandas e ccxt. Use ccxt para baixar candles de corretoras cripto sem chave de API, pandas para calcular indicadores e simular a estratégia, e passe para backtrader, vectorbt ou backtesting.py quando precisar de stops, otimização e relatórios. Para forex e CFDs, o pacote oficial MetaTrader5 lê dados e envia ordens pelo terminal MT5.

Por que Python é tão usado no trading?

  • Bibliotecas maduras para dados, estatística e gráficos.
  • Conexão com dezenas de corretoras pela mesma interface.
  • Liberdade: qualquer dado, qualquer regra, milhares de variações testadas em lote.
  • Comunidade enorme, com exemplos e respostas para quase todo erro.

O preço da liberdade é responsabilidade: no Python, você mesmo garante que o backtest não olha para o futuro e que o robô ao vivo trata erros e desconexões. Para o panorama de plataformas, veja o que é trading algorítmico.

Quais bibliotecas usar?

BibliotecaPara que serveObservação
pandas e NumPyTabelas de candles, indicadores, retornosBase de tudo
ccxtDados e ordens em corretoras criptoMais de 100 corretoras na mesma interface
MetaTrader5Dados e ordens via terminal MT5Forex, CFDs, ouro
backtraderBacktest orientado a eventos, também opera ao vivoComissões, slippage, sizers, analisadores
vectorbtBacktest vetorizado e muito rápidoTesta milhares de parâmetros de uma vez
backtesting.pyBacktest simples com gráficos interativosStop, alvo e otimizador prontos
Matplotlib / PlotlyGráficosCurva de capital, drawdown

O repositório do ccxt informa suporte a mais de 100 corretoras, incluindo Binance e BingX, em várias linguagens. O VectorBT se diferencia por processar muitas estratégias juntas em arrays, acelerado por Numba. O backtrader tem módulos de comissão, slippage e integração com algumas corretoras. O Backtesting.py é leve, usa pandas, NumPy e Bokeh e traz otimizador.

Passo 1: preparar o ambiente

  1. Instale o Python 3Pelo site oficial; no Windows, marque a opção de adicionar ao PATH.
  2. Crie um ambiente virtualpython -m venv venv, para isolar as bibliotecas do projeto.
  3. Instale as bibliotecaspip install pandas ccxt matplotlib (e backtrader ou vectorbt depois).
  4. Use um editorVS Code ou Jupyter Notebook, que mostra tabelas e gráficos célula a célula.

Passo 2: baixar candles de cripto com ccxt

Dados públicos de mercado não exigem chave de API:

import ccxt
import pandas as pd

exchange = ccxt.binance()  # dados públicos não exigem chave de API
candles = exchange.fetch_ohlcv("BTC/USDT", timeframe="1d", limit=1000)

df = pd.DataFrame(candles, columns=["timestamp", "open", "high", "low", "close", "volume"])
df["date"] = pd.to_datetime(df["timestamp"], unit="ms")
df = df.set_index("date")
df.to_csv("btcusdt_1d.csv")
print(df.tail())

fetch_ohlcv devolve listas com tempo (em milissegundos), abertura, máxima, mínima, fechamento e volume. Cada corretora tem um limite de candles por chamada; o manual do ccxt descreve a paginação para baixar históricos maiores e lembra que o controle de limite de requisições (enableRateLimit) vem ativado por padrão.

Passo 3: calcular indicadores com pandas

import pandas as pd

df = pd.read_csv("btcusdt_1d.csv", parse_dates=["date"], index_col="date")

df["sma20"] = df["close"].rolling(20).mean()
df["sma50"] = df["close"].rolling(50).mean()
df["retorno"] = df["close"].pct_change()
df["vol_anual"] = df["retorno"].rolling(30).std() * (365 ** 0.5)

print(df[["close", "sma20", "sma50", "vol_anual"]].tail())

O método rolling cria janelas móveis: rolling(20).mean() é a média móvel simples de 20 períodos. A volatilidade anualizada usa 365 dias porque cripto negocia todos os dias; em ações, usa-se cerca de 252. Entenda as médias em médias móveis.

Gráfico de preço com uma média móvel simples e uma média móvel exponencial sobrepostas Médias móveis simples e exponenciais, que no pandas saem de rolling().mean() e ewm().mean(). Crédito: Alex Kofman, domínio público, via Wikimedia Commons.

Passo 4: o primeiro backtest, com custos

Com as colunas acima, a estratégia “comprado quando a SMA20 está acima da SMA50” fica assim:

posicao = (df["sma20"] > df["sma50"]).astype(int).shift(1).fillna(0)
trocas = posicao.diff().abs().fillna(0)
custo = 0.001  # 0,1% por troca: taxa + slippage estimado

ret_estrategia = posicao * df["retorno"].fillna(0) - trocas * custo
curva = (1 + ret_estrategia).cumprod()
drawdown = curva / curva.cummax() - 1

print(f"Retorno: {curva.iloc[-1] - 1:.1%} | Drawdown máximo: {drawdown.min():.1%}")

O shift(1) garante que a decisão tomada no fechamento de um dia só vale a partir do dia seguinte. Sem ele, o teste “compra” com uma informação que ainda não existia. Métricas, armadilhas e o efeito dos custos estão em backtest; por que não otimizar demais, em overfitting no trading.

Dica: compare sempre com "comprar e segurar" o mesmo ativo no mesmo período. Uma estratégia que rende menos que simplesmente manter o bitcoin, com mais trabalho e mais imposto, precisa de outro argumento, como drawdown bem menor.

Forex e CFDs: o pacote MetaTrader5

Para quem opera pelo MetaTrader 5, o pacote oficial conecta o Python ao terminal instalado. Ele lê barras e envia ordens, segundo a documentação do MQL5. Instalação: pip install MetaTrader5.

import MetaTrader5 as mt5
import pandas as pd

if not mt5.initialize():
    raise SystemExit(f"Falha ao conectar ao terminal: {mt5.last_error()}")

barras = mt5.copy_rates_from_pos("EURUSD", mt5.TIMEFRAME_H1, 0, 1000)
mt5.shutdown()

df = pd.DataFrame(barras)
df["time"] = pd.to_datetime(df["time"], unit="s")
print(df[["time", "open", "high", "low", "close"]].tail())

O terminal precisa estar aberto e logado; o passo a passo da documentação é feito no Windows. Para robôs que rodam dentro do próprio MT5, veja MQL5 Expert Advisor e o guia do MetaTrader 5.

Do backtest ao robô ao vivo

Pesquisa

  • Dados históricos em CSV
  • pandas, vectorbt, backtrader
  • Erros custam só tempo

Execução

  • Chaves de API e servidor ligado 24h
  • Tratamento de erros, reconexão, logs
  • Erros custam dinheiro

Para operar ao vivo em cripto, o ccxt usa os mesmos métodos com chaves de API (create_order, fetch_balance). Antes de ir para a conta real:

  • guarde as chaves em variáveis de ambiente, nunca no código;
  • crie a chave sem permissão de saque e com lista de IPs;
  • teste em ambiente de simulação quando a corretora oferecer;
  • tenha limite de perda diária e tamanho máximo de ordem no código.

Tudo isso está detalhado em API de corretora cripto. Lógicas prontas como grid e DCA, comparadas com tendência e reversão, estão em estratégias de robôs.

Para acompanhar a construção de um algoritmo completo em Python numa única aula em português, o vídeo abaixo é um bom complemento.

Erros comuns de quem começa

Atenção: os erros mais caros não são de sintaxe, e sim de método: usar o fechamento do candle para entrar no mesmo candle, ignorar taxas, testar só em mercado de alta, otimizar até a curva ficar perfeita e colocar a chave de API com permissão de saque dentro do código.
  • Fuso e datas: corretoras entregam horários em UTC. Converta com cuidado.
  • Dados faltando: candles ausentes distorcem médias; verifique lacunas.
  • Limites de requisição: respeite o rate limit ou a corretora bloqueia temporariamente o seu IP.
  • Imposto: operações automatizadas em cripto também entram na apuração; veja imposto de renda sobre criptomoedas.

Python é a ferramenta mais flexível para quem quer pesquisar e automatizar. Use essa flexibilidade para testar com rigor, e não para torturar os dados até eles confessarem.

Conteúdo informativo, não é recomendação de investimento.

Perguntas frequentes

Python serve para trading?

Sim. Python é a linguagem mais usada em pesquisa quantitativa por ter bibliotecas para dados (pandas), conexão com corretoras (ccxt, MetaTrader5) e backtest (backtrader, vectorbt, backtesting.py).

Quais bibliotecas Python usar para trading?

Para começar: pandas e NumPy para dados, ccxt para corretoras cripto, o pacote MetaTrader5 para forex e CFDs via MT5, e uma biblioteca de backtest como backtrader, vectorbt ou backtesting.py. Matplotlib ou Plotly para gráficos.

Preciso saber programar muito para usar Python no trading?

O básico de Python (variáveis, funções, listas e dicionários) e de pandas já permite baixar dados e testar estratégias simples. Para operar ao vivo, é preciso aprender tratamento de erros, logs e segurança de chaves.

Python ou Pine Script?

Pine Script é mais rápido para testar ideias no gráfico do TradingView. Python dá liberdade total para pesquisar com qualquer dado, testar milhares de variações e automatizar a execução por API.

Referências

  1. pandas: Series.rolling
  2. CCXT (GitHub)
  3. CCXT Manual
  4. MQL5: integração com Python (pacote MetaTrader5)
  5. backtrader
  6. VectorBT
  7. Backtesting.py
  • Python
  • trading algorítmico
  • pandas
  • ccxt
  • backtrader
  • vectorbt
  • MetaTrader5

Este conteúdo é informativo e não é recomendação de investimento. Encontrou um erro? Escreva para contato@boletimbitcoin.com.

Leia também