💰 Despejando todo o depósito de cripto

Hoje na mesa temos o projeto jhonwick547/trading_bot.
À primeira vista, parece uma séria candidatura ao sucesso. Um robô de negociação automática para Binance, escrito em Python. Mas na prática, é um manual de como não escrever software financeiro. Se você executar isso em uma conta real, o mercado vai te devorar.

Qual é o pesadelo? 🤡

1️⃣Machine Learning de Schrödinger
No código, importa-se orgulhosamente sklearn e carrega-se um modelo:
self.model = joblib.load(model_path)

Mas no método generate_signals... ele não é usado em lugar nenhum. 🤡
Os sinais são gerados através de um conjunto de ifs de nível de 5ª série: «Se RSI < 60 e MACD está subindo — compre».
Para que serve o Random Forest? Aparentemente, para fazer o cooler do notebook zumbir de forma mais convincente.

2️⃣ Corrida mortal
Vejamos a função execute_trade.
1. O robô envia uma ordem a mercado (create_market_buy_order).
2. O robô tenta colocar Stop Loss e Take Profit em requisições separadas.

Pergunta de um milhão: o que acontece se entre os passos 1 e 2 sua internet cair, o script travar ou a Binance retornar um erro de API?
Resposta: Você fica com uma posição aberta sem stop loss. Uma vela na direção errada — e adeus, liquidação.
Em sistemas normais, usam-se ordens OCO (One Cancels the Other) ou enviam-se ordens em lote para que a entrada e o stop sejam atômicos (ou pelo menos o mais próximos possível).

3️⃣ Matemática que não funciona
Função de cálculo de posição calculate_position_size:
risk_amount = balance * self.balance_pct  # 10% do depósito
position_size = risk_amount / (entry_price - stop_loss)

O autor confunde risco por trade com volume de entrada.
Se entry_price está próximo de stop_loss, o denominador tende a zero, e o tamanho da posição vai para o espaço. Há um min(), mas a lógica de cálculo do volume a partir de um risco fixo é mal implementada. No final, você arrisca centavos ou todo o depósito, dependendo da volatilidade.

4️⃣ Trabalho duplicado
No loop start_trading, o robô baixa candles (fetch_data) e calcula indicadores para verificar o sinal.
Se houver sinal, ele chama execute_trade, onde... baixa candles novamente e calcula indicadores novamente.
Aparentemente, para que a Binance banir o IP mais rápido por requisições extras.

5️⃣ Chaves hardcoded
Em if __name__ == "__main__":, as chaves são sugeridas para serem escritas diretamente no código.
api_key = 'YOUR_API_KEY'
Nunca. Ouviu? Nunca armazene segredos no código. Use .env.

👨🏻‍⚖️ Veredito:
Externamente parece um robô de negociação, mas na essência é um gerador de perdas aleatórias.

#assando_código