O Dia em Que Desliguei Meu Próprio Interruptor de Segurança
Em algum ponto da história do meu primeiro bot de live trading existe um commit do qual não me orgulho. Ele tem duas palavras. No meio do sistema em execução, para fazer um problema desaparecer, mexi no mecanismo de segurança que deveria proteger a conta e escrevi: if False.
Funcionou, da mesma forma que desligar um alarme de incêndio “funciona”. O alarme parou. Aquilo que o alarme vigiava, não.
A proteção que não parava de disparar
No início, eu tinha feito uma coisa certa: dei ao bot ao vivo um limite de perda diária. Se a conta caísse demais em um único dia, o sistema deveria parar de operar e esperar por mim. É o tipo mais básico de disjuntor, e no papel era exatamente o tipo de disciplina que se diz a um iniciante para construir.
O problema é que ele continuava disparando quando nada estava de fato errado. Toda vez que o bot alocava caixa em uma posição, a proteção via o saldo de caixa cair e interpretava isso como uma perda. Então ela fazia o seu trabalho, ruidosa e constantemente, interrompendo um sistema que não estava passando pela condição de perda que a proteção alegava. Um alarme que dispara a cada poucos minutos sem motivo não é um recurso de segurança; é ruído. E o ruído, no fim das contas, acaba sendo silenciado.
O hotfix de duas palavras
Então eu o silenciei. No meio da sessão, com o bot rodando, desabilitei a verificação de perda diária — if False — e coloquei no ar. As interrupções pararam. O bot voltou a operar livremente. Por alguns minutos pareceu uma solução.
Não era uma solução. Foi uma das decisões mais perigosas que tomei em todo aquele projeto, e vale a pena ser preciso sobre o porquê.
O que eu realmente fiz
A proteção estava disparando porque estava sendo alimentada com informação ruim — ela confundia gastar caixa em uma posição com perder dinheiro. Aquilo era um bug real, e tinha uma correção real: ensinar a proteção a diferença entre comprar e perder.
Eu não fiz isso. Eu desliguei a proteção. Tratei um problema de medição como se fosse um problema de proteção, e o resolvi removendo a proteção. Esse é o equivalente, em engenharia, a tirar a bateria de um detector de fumaça porque ele não para de apitar. O apito para. A proteção também.
Uma proteção desligada é uma dívida que se acumula
Aqui está a parte que deveria ter me assustado mais do que assustou na época. Antes do hotfix, meu problema era apenas irritante: uma proteção que me interrompia com frequência demais. Depois do hotfix, meu problema era invisível e ilimitado — um bot ao vivo, operando dinheiro real, sem nenhum limite de perda funcional.
Os falsos alarmes tinham um custo que eu conseguia ver: trading interrompido. A proteção desligada tinha um custo que eu não conseguia ver — até o dia em que uma perda genuína talvez chegasse e descobrisse que não havia nada em seu caminho. Eu havia trocado uma irritação visível e sobrevivível por um risco invisível e ilimitado, e havia feito isso para que uma luz vermelha ficasse verde mais rápido.
Essa é a sedução de desabilitar uma salvaguarda: o custo é adiado. Nada de ruim acontece imediatamente. A conta, se vier, vem depois e de uma só vez — no pior momento possível, que é exatamente o momento para o qual a proteção existia.
A jogada certa: conserte a proteção, não a silencie
A resposta correta era a entediante. A salvaguarda pretendida era válida, mas suas entradas de medição e contabilidade estavam quebradas. Então você conserta a entrada: separe os sinais que a alimentam para que ela reaja a perdas reais, não ao movimento comum de caixa para dentro de posições. Uma vez que a proteção conseguia distinguir uma perda real de uma compra normal, ela parou de gritar lobo — e estava lá, intacta, para as perdas que de fato importariam.
A regra que tirei disso é quase constrangedoramente simples, e agora a trato como quase absoluta: você não continua operando com um mecanismo de segurança desligado. Se uma proteção dispara errado, diagnostique suas entradas e sua própria lógica antes de alterá-la ou desabilitá-la — e conserte-a ou substitua-a antes de retomar, em vez de operar desprotegido.
O sentido inteiro de uma proteção é o momento em que você não está lá
Há uma razão pela qual isso importa mais para um sistema automatizado do que para quase qualquer coisa que você opere à mão. Um bot ao vivo roda enquanto você dorme, enquanto você está no trabalho, enquanto você quase esqueceu que ele existe. Seus mecanismos de segurança não são realmente para os momentos em que você está observando — você mal precisa deles aí. Eles são para os momentos em que você não está: o movimento brusco às 4 da manhã, o bug que só é acionado em um feriado, a cascata que se desenrola nos noventa segundos em que você se afastou da mesa.
Quando você desabilita uma proteção para superar uma irritação hoje, você está tomando emprestado contra exatamente esses momentos. Você está apostando que a hora não observada será uma hora calma. O mercado não oferece essa aposta em termos justos.
Mantenho aquele commit de duas palavras em mente como uma espécie de rótulo de advertência. if False é a correção mais fácil do mundo e, muitas vezes, não é correção alguma — é uma forma de converter um problema que você consegue ver em um desastre que você não consegue.
— Sem sinais, sem retornos, não é aconselhamento de investimento.