Bot de trading automatizado para criptomoedas na Binance, desenvolvido em Python com estratégia baseada em indicadores técnicos (RSI, EMA e Volume).
- Características
- Arquitetura
- Pré-requisitos
- Instalação
- Configuração
- Como Executar
- Estratégia de Trading
- Customização da Estratégia
- Estrutura do Projeto
- Avisos Importantes
- Trading automatizado na Binance
- Análise técnica com RSI, EMA e Volume
- Gerenciamento de risco com Stop Loss e Take Profit
- Notificações via Telegram
- Controle inteligente de posições
- Totalmente configurável
┌─────────────────┐
│ TraderJob │ (Loop principal)
└────────┬────────┘
│
├─► TradeService (Ordens de compra/venda)
│ │
│ └─► BinanceClient (API Binance)
│
└─► ImprovedStrategy (Análise técnica)
│
└─► RSI, EMA, Volume
- Python 3.8+
- Conta na Binance com API habilitada
- Bot do Telegram (opcional, para notificações)
git clone https://github.com/seu-usuario/binance-trading-bot.git
cd binance-trading-botpython -m venv venv
# Linux/Mac
source venv/bin/activate
# Windows
venv\Scripts\activatepip install -r requirements.txtrequirements.txt:
python-binance==1.0.19
requests==2.31.0
python-dotenv==1.0.0
Crie um arquivo .env na raiz do projeto:
# Binance API
BINANCE_API_KEY=sua_api_key_aqui
BINANCE_API_SECRET=sua_api_secret_aqui
# Telegram (opcional)
TELEGRAM_BOT_TOKEN=seu_token_do_bot
TELEGRAM_CHAT_ID=seu_chat_id- Acesse Binance API Management
- Crie uma nova API Key
- IMPORTANTE: Habilite apenas permissões de Spot Trading
- Configure IP whitelist para maior segurança
- Teste primeiro na Testnet: https://testnet.binance.vision/
- Fale com @BotFather no Telegram
- Crie um novo bot com
/newbot - Copie o token fornecido
- Obtenha seu Chat ID falando com @userinfobot
from trader_job import TraderJob
# Inicializa o bot com configurações padrão
bot = TraderJob(
symbol="BTCUSDT",
interval=60, # Verifica a cada 60 segundos
klines_interval="15m", # Usa candles de 15 minutos
trade_quantity=0.001 # 0.001 BTC por operação
)
# Inicia o bot
bot.start()bot = TraderJob(
symbol="ETHUSDT", # Pode usar outros pares
interval=30, # Verificação a cada 30s
klines_interval="5m", # Candles de 5 minutos (mais agressivo)
klines_limit=150, # Analisa mais dados históricos
min_usdt_balance=20, # Mínimo de $20 para operar
trade_quantity=0.01 # 0.01 ETH por operação
)
bot.start()python main.pyA estratégia está implementada em services/strategy.py e utiliza:
| Indicador | Função | Configuração Padrão |
|---|---|---|
| RSI | Identifica sobrecompra/sobrevenda | Período: 14 |
| EMA Curta | Detecta tendências de curto prazo | Período: 9 |
| EMA Longa | Detecta tendências de longo prazo | Período: 21 |
| Volume | Confirma força do movimento | Mínimo: 1.2x a média |
O bot executa uma COMPRA quando 2 de 3 condições são atendidas:
- ✅ RSI < 30 (mercado sobrevendido)
- ✅ EMA(9) > EMA(21) (tendência de alta)
- ✅ Volume > 1.2x média (confirmação)
O bot executa uma VENDA quando:
- Gerenciamento de Risco (prioridade):
- 🛑 Stop Loss: -2% de perda
- 🎯 Take Profit: +3% de lucro
OU quando 2 de 2 condições são atendidas:
- ✅ RSI > 70 (mercado sobrecomprado)
- ✅ EMA(9) < EMA(21) (tendência de baixa)
Toda a lógica de trading está centralizada no arquivo services/strategy.py.
Para modificar a estratégia, edite a classe ImprovedStrategy:
# services/strategy.py
class ImprovedStrategy:
def __init__(self,
rsi_period=14, # Período do RSI
rsi_oversold=30, # Limite de sobrevenda
rsi_overbought=70, # Limite de sobrecompra
ema_short=9, # EMA rápida
ema_long=21, # EMA lenta
min_volume_ratio=1.2, # Volume mínimo (1.2x média)
stop_loss_pct=2.0, # Stop loss em %
take_profit_pct=3.0): # Take profit em %
# ...strategy = ImprovedStrategy(
rsi_oversold=25, # Mais restritivo
rsi_overbought=75, # Mais restritivo
stop_loss_pct=1.5, # Stop loss mais apertado
take_profit_pct=2.0 # Take profit menor
)strategy = ImprovedStrategy(
rsi_oversold=35, # Menos restritivo
rsi_overbought=65, # Menos restritivo
ema_short=5, # EMAs mais rápidas
ema_long=13,
stop_loss_pct=3.0, # Stop loss mais largo
take_profit_pct=5.0 # Take profit maior
)# No TraderJob, use timeframes menores
bot = TraderJob(
interval=15, # Verifica a cada 15s
klines_interval="1m", # Candles de 1 minuto
trade_quantity=0.001
)
# Na Strategy, use períodos menores
strategy = ImprovedStrategy(
rsi_period=7,
ema_short=5,
ema_long=13
)Você pode criar uma estratégia completamente customizada:
# services/strategy.py
class MinhaEstrategiaCustomizada:
def __init__(self, param1, param2):
self.param1 = param1
self.param2 = param2
def should_buy(self, klines_data):
"""
Implemente sua lógica de compra aqui
klines_data: lista de candles
[0] Open time, [1] Open, [2] High, [3] Low,
[4] Close, [5] Volume, [6] Close time
Return: True para comprar, False caso contrário
"""
closes = [float(k[4]) for k in klines_data]
# Sua lógica aqui
# Exemplo: compra se preço subiu nos últimos 3 candles
return closes[-1] > closes[-3]
def should_sell(self, klines_data):
"""
Implemente sua lógica de venda aqui
Return: True para vender, False caso contrário
"""
closes = [float(k[4]) for k in klines_data]
# Sua lógica aqui
return closes[-1] < closes[-3]Depois, use no TraderJob:
from services.strategy import MinhaEstrategiaCustomizada
# Em trader_job.py, substitua:
self.strategy = MinhaEstrategiaCustomizada(param1=10, param2=20)binance-trading-bot/
├── services/
│ ├── binance_client.py # Cliente da API Binance
│ ├── trade_service.py # Lógica de ordens (compra/venda)
│ └── strategy.py # ESTRATÉGIA DE TRADING
│
├── utils/
│ └── telegram_notifier.py # Notificações Telegram
│
├── trader_job.py # Loop principal do bot
├── main.py # Entry point
├── .env # Variáveis de ambiente (não commitar!)
├── .env.example # Exemplo de configuração
├── requirements.txt # Dependências Python
└── README.md # Este arquivo
- ❌ NUNCA commite o arquivo
.envcom suas credenciais - ✅ Use
.gitignorepara proteger dados sensíveis - ✅ Configure IP whitelist na Binance API
- ✅ Habilite apenas permissões necessárias (Spot Trading)
- ✅ Use a Testnet para testes: https://testnet.binance.vision/
- 🎯 Comece com valores pequenos para testar
- 📊 Teste na Testnet antes de usar dinheiro real
- 🛡️ Nunca invista mais do que pode perder
- 📉 Mercado cripto é volátil - use stop loss adequados
- 🔄 Monitore o bot regularmente - não deixe 100% sozinho
Antes de usar com dinheiro real, teste na Testnet:
- Acesse https://testnet.binance.vision/
- Crie uma conta de teste
- Gere API Keys de teste
- Configure no
.env:
BINANCE_TESTNET=true
BINANCE_API_KEY=testnet_key
BINANCE_API_SECRET=testnet_secretO bot gera logs detalhados:
[TraderJob] 🔄 Ciclo #15 - 2026-01-06 15:30:00
[TraderJob] 💵 Preço atual: $42,350.00
[TraderJob] 📍 Posição aberta: NÃO
[Strategy] Análise de COMPRA:
Preço atual: $42350.00
RSI: 28.50 (oversold < 30): ✓
EMA 9: $42400.00 | EMA 21: $42300.00
EMA cruzamento: ✓
Volume ratio: 1.35x (min 1.2x): ✓
[Strategy] 🟢 SINAL DE COMPRA (3/3 condições)
[TraderJob] 🟢 Executando COMPRA de 0.001 BTCUSDT
Contribuições são bem-vindas! Sinta-se livre para:
- Reportar bugs
- Sugerir novas features
- Enviar pull requests
- Melhorar a documentação
Este projeto é disponibilizado para fins educacionais. Use por sua conta e risco.
Para dúvidas ou problemas:
- Verifique a documentação da Binance API
- Revise os logs do bot para identificar erros
- Teste na Testnet para isolar problemas