Bots e APIs

7 regras de gestão de risco obrigatórias para bots

Bot sem gestão de risco = conta destruída garantida. As 7 regras que separam bots profissionais de scripts amadores que blevam contas.

📚 13 min 🤖 Bots e APIs 📅 Maio 2026

Bot bem programado mas com gestão de risco ruim destrói conta mais rápido que humano em tilt. Quando código executa em milissegundos, erros amplificam exponencialmente. Aqui estão as 7 regras inegociáveis para qualquer bot que toque dinheiro real.

Por que bot precisa de regras MAIS rígidas que humano

Humano em tilt comete 5-10 trades ruins em sequência. Bot bugado pode fazer 500 em segundos.

Casos reais documentados:

  • Knight Capital (2012): bug em deploy fez perder US$ 460 milhões em 45 minutos
  • Trader retail UK (2019): bot com loop de erro fez 1.200 trades em 3 horas, perdeu £15.000
  • Trader BR (2023, documentado em fórum): bot Deriv esqueceu daily stop, perdeu R$ 8.000 em 1 noite

Em código, “esquecer” uma checagem não é falha do humano — é bug que executa indefinidamente. As 7 regras protegem contra isso.

Regra 1: Daily Loss Limit absoluto

O que é: bot PARA automaticamente se perdas do dia atingem limite predefinido.

Implementação:

# Check ANTES de cada trade
DAILY_LOSS_LIMIT = -50  # em USD

if daily_pnl <= DAILY_LOSS_LIMIT:
    log.critical(f"DAILY LOSS LIMIT HIT: {{daily_pnl}}")
    notify_telegram("Bot parado: daily loss")
    bot.stop()
    sys.exit(1)  # mata processo completamente

Como calibrar:

  • Conservador: 1-2% do capital total
  • Moderado: 3-5%
  • Agressivo (NÃO recomendado): 10%+

Importante: limite é em USD/equivalente, NÃO em número de trades. Trade-count pode mascarar perdas grandes.

Regra 2: Daily Win Cap (sim, parar de ganhar)

Conceito contraintuitivo: bot deve PARAR depois de atingir target.

Por quê:

  • Streak de vitórias frequentemente precede streak de derrotas (regression to mean)
  • Ganhar muito alimenta overconfidence (mesmo em bot — você intervém no código)
  • Mais trades = mais oportunidades para bug se manifestar
  • Preservar lucro > tentar maximizar
DAILY_PROFIT_TARGET = 75

if daily_pnl >= DAILY_PROFIT_TARGET:
    log.info(f"Daily target hit: {{daily_pnl}}")
    notify_telegram(f"Bot parado: target ${{DAILY_PROFIT_TARGET}}")
    bot.stop()

Calibração: target tipicamente 1.5-2x do daily loss limit.

Regra 3: Max consecutive losses

Bot para após N perdas consecutivas. Sinal de que condições mudaram ou bot tem bug.

MAX_CONSECUTIVE_LOSSES = 5
consecutive_losses = 0

def on_trade_close(profit):
    global consecutive_losses
    if profit < 0:
        consecutive_losses += 1
        if consecutive_losses >= MAX_CONSECUTIVE_LOSSES:
            log.warning(f"Max consecutive losses: {{consecutive_losses}}")
            bot.pause(minutes=60)  # pausa, não kill
            consecutive_losses = 0
    else:
        consecutive_losses = 0  # reset on win

Geralmente pause ao invés de kill — permite recuperação se condição passa.

Regra 4: Position size based on equity (não fixo)

Position size deve ajustar conforme equity sobe/desce. Não use stake fixo.

def calculate_position_size(current_equity, risk_pct=1.0):
    """
    Calculate position size based on current equity.
    Risk 1% means: if stop hit, lose 1% of equity.
    """
    risk_amount = current_equity * (risk_pct / 100)
    stop_distance_usd = STOP_DISTANCE_PIPS * PIP_VALUE
    position_size = risk_amount / stop_distance_usd
    return max(MIN_POSITION, min(position_size, MAX_POSITION))

# A cada trade:
current_equity = api.get_balance()
position_size = calculate_position_size(current_equity, risk_pct=1.0)

Por quê isso importa:

  • Em drawdown, position diminui automaticamente (preserva capital)
  • Em equity growth, position cresce (composto)
  • Estoura risco se você esquecer atualizar manualmente

Regra 5: Heartbeat e health check

Bot deve mandar “estou vivo e funcionando” periodicamente. Se silêncio, algo está errado.

async def heartbeat():
    while True:
        equity = await api.get_balance()
        positions = await api.get_open_positions()
        log.info(f"♥️ Equity: ${{equity}}, Open: {{len(positions)}}")

        # Send to monitoring (Telegram, email, etc)
        if minutes_since_last_alert >= 60:
            notify_telegram(f"♥️ Bot OK | Equity: ${{equity}}")

        await asyncio.sleep(300)  # every 5 min

Implemente:

  • Telegram bot para notificações (gratuito)
  • Email backup se Telegram falhar
  • Log file rotativo (não fica gigante)
  • Monitoramento externo (uptimerobot.com ou similar)

Regra 6: Try/except em TUDO crítico

Bot Python sem error handling = bomba relógio. Wrap todas as operações críticas:

async def place_trade_safely(direction, stake):
    try:
        contract_id = await api.buy({{...}})
        log.info(f"Trade OK: {{contract_id}}")
        return contract_id

    except ConnectionError as e:
        log.error(f"Connection lost: {{e}}")
        await reconnect()
        return None

    except InsufficientBalance:
        log.critical("Saldo insuficiente! Parando bot.")
        bot.stop()
        return None

    except Exception as e:
        log.exception(f"Unexpected error: {{e}}")
        notify_telegram(f"⚠️ Erro: {{e}}")
        bot.pause(minutes=10)
        return None

Categorias críticas que SEMPRE precisam try/except:

  • Conexão com API (broker)
  • Execução de ordens
  • Leitura de tick/price feed
  • Cálculos com dados externos
  • Operações de arquivo/banco de dados

Regra 7: Kill switch manual + auto

Você DEVE conseguir parar o bot a qualquer momento de fora.

Kill switch manual:

# Check arquivo "KILL" no diretório do bot
if os.path.exists("KILL"):
    log.critical("KILL file detected. Stopping bot.")
    bot.stop()
    os.remove("KILL")
    sys.exit(0)

# Para parar bot manualmente:
# touch KILL  (Linux/Mac)
# type nul > KILL  (Windows)

Kill switch via Telegram:

# Bot Telegram aceita comando /kill
@bot.message_handler(commands=['kill'])
def kill_handler(message):
    if message.from_user.id != AUTHORIZED_USER_ID:
        return  # só você pode
    log.critical("KILL via Telegram")
    trading_bot.emergency_stop()
    bot.reply_to(message, "Bot parado.")

Auto kill switch (drawdown extreme):

MAX_DRAWDOWN_KILL = -200  # USD absoluto
WEEKLY_KILL_LIMIT = -100

if total_drawdown <= MAX_DRAWDOWN_KILL:
    notify_telegram("🚨 EMERGENCY KILL: max drawdown")
    bot.kill()  # não pause - kill

Kill switches são última linha de defesa. Você não vai usar quase nunca, mas precisa estar lá para quando precisar.

Checklist completo antes de operar

📋 Pre-launch checklist

Antes de bot tocar dinheiro real, confirme:

✅ Daily loss limit configurado e testado
✅ Daily profit cap configurado
✅ Max consecutive losses limita
✅ Position sizing dinâmico baseado em equity
✅ Heartbeat funcionando (você recebe notificações)
✅ Try/except em operações críticas
✅ Logging completo (file rotativo)
✅ Kill switch manual testado
✅ Kill switch Telegram testado
✅ Auto kill drawdown testado
✅ 90+ dias rodando em demo sem bug
✅ Capital “casino money” (pode perder tudo sem afetar vida)
✅ Monitoramento externo configurado
✅ Backup do código em Git (rollback se necessário)
✅ VPS estável (não PC pessoal)

Não passou em todos? Não opere ainda. Adicione o que falta.

O custo de pular essas regras

Cada regra parece “exagero” até o dia que salvaria sua conta. Casos vistos:

  • Sem daily limit: bot fez 250 trades durante NFP, perdeu 80% conta em 2h
  • Sem kill switch: trader em viagem, bot bugou, blevou conta em 8h sem ele poder fazer nada
  • Sem position sizing dinâmico: em drawdown de 50%, position continuou tamanho original, blevou em + 1 trade
  • Sem try/except: exception não tratada parou bot durante trade aberto, posição ficou esquecida
  • Sem heartbeat: bot crashou em 2:00 AM, ninguém notou até dia seguinte

Programar essas regras leva 4-8 horas. Pode salvar R$ 5.000-50.000.

💡 Conselho final

Considere as 7 regras como seatbelt + airbag + ABS do seu bot.

Você dirige sem? Tecnicamente possível. Sensato? Não.

Mesma lógica para bot tocando seu dinheiro.

Não opere bot sem essas 7 regras

Cada hora investida programando proteções pode salvar meses de poupança.

Bot Python tutorial Por que Martingale falha