Como usar a API da Binance com Python: Guia completo 2025
Se você está começando a explorar o universo das criptomoedas ou já possui alguma experiência em trading, integrar a API da Binance com Python pode ser o próximo passo para automatizar estratégias, coletar dados em tempo real e melhorar a eficiência das suas operações. Neste artigo, vamos percorrer todo o caminho – da criação das chaves de API até a implantação de um bot de negociação em produção – de forma detalhada, técnica e voltada para o público brasileiro.
Introdução
A Binance, maior exchange de cripto do mundo por volume de negociação, oferece uma API REST e WebSocket robusta, permitindo que desenvolvedores e traders criem aplicações personalizadas. Em 2025, a documentação oficial está ainda mais completa, com endpoints para futuros, opções, staking e até para o novo serviço de Binance Pay. Porém, o maior desafio para iniciantes costuma ser a configuração do ambiente e a segurança na manipulação das credenciais.
Principais Pontos
- Instalação e configuração do
python-binance, a biblioteca mais utilizada. - Como gerar e proteger as chaves de API da Binance.
- Exemplos práticos de chamadas REST e WebSocket.
- Gestão de limites de taxa (rate limits) e tratamento de erros.
- Boas práticas para deploy seguro em produção (Docker, AWS, Heroku).
1. Preparando o ambiente Python
Antes de qualquer código, certifique-se de que sua máquina possui o Python 3.11 ou superior. A versão mais recente traz melhorias de desempenho que são importantes quando lidamos com streams de dados de alta frequência.
python -m venv venv
source venv/bin/activate # Linux/macOS
venv\Scripts\activate # Windows
pip install --upgrade pip
Instale a biblioteca oficial python-binance e outras dependências úteis:
pip install python-binance pandas numpy python-dotenv websockets
2. Obtendo as chaves de API da Binance
Para acessar a API, você precisa de duas informações:
- API Key – identificador público.
- Secret Key – chave privada usada para assinatura HMAC SHA256.
Procedimento:
- Faça login na sua conta Binance.
- Acesse API Management no menu de usuário.
- Crie uma nova API, nomeando-a (ex.:
my_python_bot). - Copie a
API Keye aSecret Key. **Guarde a Secret Key em local seguro** – ela será exibida apenas uma vez.
Para evitar que as credenciais fiquem expostas no código, utilizaremos o pacote python-dotenv. Crie um arquivo .env na raiz do projeto:
BINANCE_API_KEY=SuaAPIKeyAqui
BINANCE_SECRET_KEY=SuaSecretKeyAqui
E carregue-as no script Python:
from dotenv import load_dotenv
import os
load_dotenv()
api_key = os.getenv('BINANCE_API_KEY')
api_secret = os.getenv('BINANCE_SECRET_KEY')
3. Conectando à API REST
Com as credenciais carregadas, a conexão é simples:
from binance.client import Client
client = Client(api_key, api_secret)
Vamos testar a conexão obtendo o preço atual do par BTCBRL:
ticker = client.get_symbol_ticker(symbol='BTCBRL')
print(f"Preço BTC/BRL: R${float(ticker['price']):,.2f}")
Se tudo estiver configurado corretamente, o console exibirá o preço em reais, formatado como R$ 123.456,78.
4. Operações básicas com a API
4.1. Consultando o livro de ofertas (order book)
depth = client.get_order_book(symbol='ETHBRL', limit=100)
print('Best bid:', depth['bids'][0])
print('Best ask:', depth['asks'][0])
4.2. Histórico de trades
trades = client.get_recent_trades(symbol='BNBBRL', limit=50)
for t in trades:
print(t['id'], t['price'], t['qty'], t['isBuyerMaker'])
4.3. Dados de candles (klines)
import pandas as pd
klines = client.get_klines(symbol='ADAUSDT', interval=Client.KLINE_INTERVAL_1HOUR, limit=500)
df = pd.DataFrame(klines, columns=['open_time','open','high','low','close','volume','close_time','quote_asset_volume','trades','taker_buy_base','taker_buy_quote','ignore'])
df['close'] = pd.to_numeric(df['close'])
print(df[['open_time','close']].tail())
5. Executando ordens de negociação
Para enviar ordens, a conta precisa estar habilitada para trading e as chaves devem ter permissão de Enable Trading. Recomenda‑se usar uma conta de testnet antes de operar com fundos reais.
5.1. Ordem de mercado
order = client.order_market_buy(
symbol='SOLBRL',
quantity=10 # quantidade de SOL
)
print('Order ID:', order['orderId'])
5.2. Ordem limitada
order = client.order_limit_sell(
symbol='SOLBRL',
quantity=10,
price='150.00' # preço limite em reais
)
print('Order placed:', order['status'])
5.3. Ordem stop‑limit
order = client.create_order(
symbol='SOLBRL',
side=Client.SIDE_SELL,
type=Client.ORDER_TYPE_STOP_LOSS_LIMIT,
timeInForce=Client.TIME_IN_FORCE_GTC,
quantity=10,
price='140.00', # preço limite de venda
stopPrice='145.00' # gatilho de stop
)
print('Stop‑limit order ID:', order['orderId'])
6. Gerenciamento de limites de taxa (Rate Limits)
A Binance impõe limites de chamadas por minuto (por exemplo, 1200 weight por minuto). Cada endpoint tem um “weight” associado. O python‑binance já trata a maioria dos limites, mas é importante implementar lógica de retry exponencial.
import time
from binance.exceptions import BinanceAPIException, BinanceOrderException
def safe_call(func, *args, **kwargs):
retries = 0
while retries < 5:
try:
return func(*args, **kwargs)
except BinanceAPIException as e:
if e.code == -1003: # Too many requests
wait = 2 ** retries
print(f'Retrying in {wait}s...')
time.sleep(wait)
retries += 1
else:
raise
raise Exception('Max retries exceeded')
# Uso:
price = safe_call(client.get_symbol_ticker, symbol='BTCBRL')
7. Segurança avançada
Além de armazenar as chaves em .env, considere:
- Uso de IAM Roles na AWS para injetar variáveis de ambiente.
- Criptografia das credenciais com
AWS KMSouHashiCorp Vault. - Restrição de IPs nas configurações da API Binance – limite o acesso ao seu servidor.
- Assinatura HMAC manual: caso precise de endpoints não cobertos pela biblioteca.
import hmac, hashlib, urllib.parse
query_string = urllib.parse.urlencode(params)
signature = hmac.new(api_secret.encode('utf-8'), query_string.encode('utf-8'), hashlib.sha256).hexdigest()
8. Estratégia automatizada: exemplo de bot simples
Vamos montar um bot que compra BTCBRL quando o preço cai 2% abaixo da média móvel de 24h e vende quando sobe 3% acima da mesma média.
import time
import numpy as np
def get_ma24h(symbol):
klines = client.get_klines(symbol=symbol, interval=Client.KLINE_INTERVAL_1HOUR, limit=24)
closes = [float(k[4]) for k in klines]
return np.mean(closes)
symbol = 'BTCBRL'
position = None
while True:
price = float(client.get_symbol_ticker(symbol=symbol)['price'])
ma24 = get_ma24h(symbol)
if not position and price < ma24 * 0.98:
# compra
qty = round( (1000 / price), 6) # compra R$1.000
order = client.order_market_buy(symbol=symbol, quantity=qty)
print(f'Comprado {qty} BTC a R${price:.2f}')
position = {'qty': qty, 'entry': price}
elif position and price > position['entry'] * 1.03:
# vende
order = client.order_market_sell(symbol=symbol, quantity=position['qty'])
print(f'Vendido {position["qty"]} BTC a R${price:.2f}')
position = None
time.sleep(60) # aguarda 1 minuto
Este é um exemplo didático; em produção, adicione logs, controle de risco (stop‑loss) e monitoramento.
9. Recebendo dados em tempo real com WebSocket
Para estratégias de alta frequência, o WebSocket reduz latência. O endpoint wss://stream.binance.com:9443/ws permite subscrever a streams como !ticker@arr (todos os tickers) ou btcusdt@depth (livro de ofertas).
import asyncio
import websockets
import json
async def ticker_ws():
url = 'wss://stream.binance.com:9443/ws/btcbrl@ticker'
async with websockets.connect(url) as ws:
while True:
data = await ws.recv()
ticker = json.loads(data)
print(f"Preço: R${float(ticker['c']):,.2f} | Volume: {ticker['v']}")
asyncio.run(ticker_ws())
10. Tratamento de erros e logging estruturado
Utilize o módulo logging com nível INFO ou ERROR. Salve logs em arquivos rotativos para não encher o disco.
import logging
from logging.handlers import RotatingFileHandler
logger = logging.getLogger('binance_bot')
logger.setLevel(logging.INFO)
handler = RotatingFileHandler('bot.log', maxBytes=5*1024*1024, backupCount=3)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
try:
price = client.get_symbol_ticker(symbol='BTCBRL')['price']
logger.info(f'Preço BTC/BRL: {price}')
except Exception as e:
logger.error('Erro ao obter preço', exc_info=True)
11. Deploy em produção
Algumas opções populares no Brasil:
- Docker – cria containers isolados, facilitando escalabilidade.
- Heroku – plano gratuito ainda permite dynos pequenos, ideal para testes.
- AWS Elastic Beanstalk ou Fargate – para projetos que precisam de alta disponibilidade.
Exemplo de Dockerfile simplificado:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "bot.py"]
Não esqueça de definir as variáveis de ambiente no serviço de orquestração (ex.: BINANCE_API_KEY e BINANCE_SECRET_KEY).
12. Perguntas Frequentes (FAQ)
Qual a diferença entre a API da Binance Spot e a de Futures?
A API Spot lida com negociação à vista (comprar/vender ativos reais). A API Futures permite operar contratos com alavancagem, exigindo endpoints diferentes e gerenciamento de margem.
É seguro usar a API em uma conta com grandes valores?
Sim, desde que siga boas práticas: restrinja IPs, nunca exponha a Secret Key, use chaves com permissão apenas de leitura para consultas e crie chaves separadas para trading.
Posso usar a Binance Testnet para validar meu bot?
Sim. A Testnet replica o ambiente de produção, porém com fundos fictícios. Troque o endpoint base para https://testnet.binance.vision e gere chaves específicas para a Testnet.
Conclusão
Integrar a API da Binance com Python abre um leque enorme de possibilidades – desde a coleta de dados históricos para análise até a execução automática de estratégias de alta frequência. Neste guia, abordamos tudo que você precisa para começar: configuração do ambiente, segurança das credenciais, chamadas REST e WebSocket, gerenciamento de limites de taxa, tratamento de erros e boas práticas de deploy.
Comece experimentando na Testnet, ajuste seu algoritmo e, quando estiver confiante, migre para a conta real com cautela. Lembre‑se de monitorar continuamente os logs, atualizar as dependências e rever as políticas de segurança. Boa codificação e bons trades!