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
Comentários
0Ainda não há comentários.