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?
| Biblioteca | Para que serve | Observação |
|---|---|---|
| pandas e NumPy | Tabelas de candles, indicadores, retornos | Base de tudo |
| ccxt | Dados e ordens em corretoras cripto | Mais de 100 corretoras na mesma interface |
| MetaTrader5 | Dados e ordens via terminal MT5 | Forex, CFDs, ouro |
| backtrader | Backtest orientado a eventos, também opera ao vivo | Comissões, slippage, sizers, analisadores |
| vectorbt | Backtest vetorizado e muito rápido | Testa milhares de parâmetros de uma vez |
| backtesting.py | Backtest simples com gráficos interativos | Stop, alvo e otimizador prontos |
| Matplotlib / Plotly | Gráficos | Curva 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
- Instale o Python 3Pelo site oficial; no Windows, marque a opção de adicionar ao PATH.
- Crie um ambiente virtualpython -m venv venv, para isolar as bibliotecas do projeto.
- Instale as bibliotecaspip install pandas ccxt matplotlib (e backtrader ou vectorbt depois).
- 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.
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.
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
- 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
Este conteúdo é informativo e não é recomendação de investimento. Encontrou um erro? Escreva para contato@boletimbitcoin.com.