Simulação Monte Carlo no trading de robôs

Um backtest mostra o que aconteceria com uma regra em um único caminho: a sequência de ticks que realmente ocorreu. Só que esse caminho é apenas um entre muitos possíveis. Se a ordem dos resultados fosse um pouco diferente, a mesma regra poderia ter quebrado a banca ou terminado bem melhor. A simulação Monte Carlo serve para responder a essa pergunta: o que acontece com a minha configuração em milhares de caminhos plausíveis? Neste guia explicamos o método, mostramos como montar uma simulação simples para um robô da Deriv, como interpretar os resultados e onde ela pode enganar.
O que é uma simulação Monte Carlo
Monte Carlo é o nome dado a qualquer método que usa sorteios aleatórios repetidos para estimar um resultado difícil de calcular diretamente. No trading, a ideia é gerar muitas sequências de operações, cada uma com resultados sorteados de acordo com uma probabilidade e um pagamento, aplicar a mesma gestão de risco a todas e olhar a distribuição dos resultados finais. Em vez de um número ("o robô terminaria com +12%"), você obtém uma faixa ("em 90% dos caminhos, o resultado ficou entre X e Y") e a frequência de eventos ruins, como perder metade da banca.
Ela não substitui o backtest: ela o complementa. O backtest testa a regra contra dados reais; o Monte Carlo testa a gestão de risco contra a variância.
Por que um único histórico não basta
Imagine dois robôs com a mesma taxa de acerto e o mesmo pagamento. No histórico de um deles, as perdas vieram espalhadas; no do outro, vieram em bloco. O primeiro parece estável e o segundo parece perigoso, mas os dois têm exatamente as mesmas características. A diferença foi a ordem dos acontecimentos, e a ordem é justamente a parte aleatória. Quando a gestão de risco depende da sequência, como acontece com stops de sessão, progressões e ciclos de recuperação, olhar um único caminho é como julgar um dado por um único lançamento.
Os ingredientes da simulação
- Probabilidade de acerto: a teórica do contrato (por exemplo, 50% em par/ímpar) ou a medida em um teste fora da amostra. Use a estimativa conservadora.
- Pagamento: o lucro sobre a entrada quando o contrato ganha. Em contratos de dígitos, ele fica abaixo do valor justo; a relação está explicada em taxa de acerto vs payout.
- Regra de entrada: valor fixo, percentual da banca ou progressão (Soros, Fibonacci, gale).
- Banca inicial e critério de ruína: a partir de quando a configuração não consegue mais operar.
- Horizonte: quantas operações cada caminho terá, por exemplo, 1.000.
- Número de caminhos: milhares, para que as frequências fiquem estáveis.
Um exemplo completo com números
Rodamos uma simulação simples com 10.000 caminhos de 1.000 operações cada. Premissas: 50% de chance, lucro de 95% sobre a entrada, banca inicial de 100 unidades e entrada inicial de 1 unidade. Comparamos três configurações: entrada fixa, gale até G2 e gale até G3, ambos com multiplicador 2,1. Consideramos ruína quando a próxima entrada não cabe no saldo.
| Configuração | Banca mediana ao final | Caminhos que terminaram no lucro | Caminhos com ruína | Queda máxima mediana |
|---|---|---|---|---|
| Entrada fixa | 75,0 | 21,8% | 1,3% | 42,1% |
| Gale até G2 | 55,5 | 26,2% | 33,0% | 76,2% |
| Gale até G3 | 8,7 | 27,2% | 52,9% | 93,0% |
Três leituras importantes saem dessa tabela:
- A mediana cai em todos os casos. Com pagamento abaixo do justo, a expectativa é negativa, e a entrada fixa termina perto do valor previsto pela conta (100 menos 1.000 vezes 0,025, ou 75).
- As progressões aumentam um pouco a fração de caminhos no lucro, porque transformam muitos sinais em pequenos ganhos.
- Mas multiplicam a ruína. Um em cada três caminhos com gale até G2 terminou sem conseguir operar; com G3, mais da metade. É o perfil de ganhos pequenos e perdas raras e grandes que descrevemos em ciclos de recuperação.
Esses números valem para as premissas acima, não para qualquer robô. O valor da simulação está em mudar as premissas e ver como o risco reage.
Como montar a sua em poucas linhas
Não é preciso software caro. O núcleo de uma simulação cabe em poucas linhas de Python:
import random
def caminho(n=1000, banca=100.0, entrada=1.0, p=0.5, pay=0.95):
pico, queda_max = banca, 0.0
for _ in range(n):
if entrada > banca:
return banca, queda_max, True # ruína
if random.random() < p:
banca += entrada * pay
else:
banca -= entrada
pico = max(pico, banca)
queda_max = max(queda_max, (pico - banca) / pico)
return banca, queda_max, False
resultados = [caminho() for _ in range(10000)]
A partir daí, basta ordenar os saldos finais para obter mediana e percentis, contar quantos caminhos chegaram à ruína e olhar a distribuição das quedas máximas. Para testar uma progressão, troque a regra que define a entrada a cada operação. Para testar stops de sessão, divida cada caminho em sessões e encerre a sessão quando o limite for atingido. Uma planilha também resolve, usando a função de número aleatório e arrastando as fórmulas por milhares de linhas, embora fique lenta mais rápido.
Duas formas de sortear os resultados
Sorteio paramétrico
É o exemplo acima: cada operação é sorteada a partir de uma probabilidade fixa. É simples e adequado para índices sintéticos, em que a probabilidade teórica de cada contrato de dígitos é conhecida.
Reamostragem do histórico
Em vez de usar uma probabilidade, você sorteia, com reposição, operações reais do seu histórico ou do seu backtest. Isso preserva o tamanho real dos ganhos e das perdas, inclusive de entradas variáveis. A limitação é que o resultado nunca será melhor do que a qualidade do histórico: se ele foi otimizado demais, a reamostragem herda o overfitting.
Como ler os resultados
- Mediana, não média: em distribuições assimétricas, poucos caminhos muito bons puxam a média para cima. A mediana mostra o caminho típico.
- Percentis baixos: o percentil 5 responde "como fica um caminho ruim, mas não extremo?". É nele que a sua banca precisa sobreviver.
- Queda máxima: a maior distância entre um pico e um vale. Pergunte-se se você continuaria seguindo as regras depois de uma queda desse tamanho.
- Frequência de ruína: qualquer número relevante aqui é um sinal para reduzir entradas, níveis de progressão ou o horizonte. O conceito está detalhado em risco de ruína.
- Maior sequência de perdas: útil para calibrar stops de sessão de forma realista.
Usos práticos para quem usa robô
- Dimensionar a entrada: teste entradas de 0,5%, 1% e 2% da banca e veja como a ruína e a queda máxima mudam.
- Avaliar progressões: compare entrada fixa com gale, Soros ou Fibonacci sob as mesmas premissas.
- Calibrar limites de sessão: verifique com que frequência o stop de perda é atingido e se ele protege a banca nos caminhos ruins. Veja limites de sessão.
- Testar a sensibilidade: rode de novo com uma taxa de acerto um ou dois pontos menor. Se o resultado muda radicalmente, a configuração é frágil.
- Ajustar expectativas: ver a faixa completa de resultados ajuda a não abandonar regras após uma fase ruim que estava dentro do esperado, nem a aumentar entradas após uma fase boa que era só sorte.
Os limites da simulação
A simulação Monte Carlo é tão boa quanto as premissas. Ela não descobre vantagem onde não existe: se a probabilidade e o pagamento colocados nela vêm de uma estimativa otimista, o resultado será otimista. Ela também assume, no modo paramétrico, que as operações são independentes, o que é razoável para índices sintéticos, mas pode ser falso para regras em mercados reais. E ela não modela falhas técnicas, como quedas de conexão, atrasos de execução e erros de configuração, que no mundo real também consomem banca. Use a simulação para medir riscos e descartar configurações frágeis, nunca para prometer resultados.
Erros comuns
- Usar a taxa de acerto do melhor período do backtest como premissa.
- Rodar poucos caminhos e tirar conclusões de frequências instáveis.
- Olhar só a média dos resultados finais.
- Esquecer de aplicar na simulação os mesmos stops e progressões usados no robô.
- Tratar a ausência de ruína em 1.000 caminhos como prova de que ela é impossível.
Como o Codexium usa dados
O Codexium registra cada operação no histórico, o que permite usar os seus próprios resultados em uma reamostragem e comparar o que aconteceu com o que a simulação dizia ser plausível. Antes de levar qualquer configuração para a conta real, recomendamos simular, testar longamente na demo e revisar as métricas de desempenho com honestidade.
Resumo
A simulação Monte Carlo troca um único caminho por milhares de caminhos plausíveis e mostra a faixa de resultados e a frequência de eventos ruins de uma configuração. Ela deixa claro, com números, que progressões aumentam a chance de ruína sem melhorar a expectativa e que a entrada fixa pequena é a configuração mais resistente à variância. É uma ferramenta para medir riscos, não para prever lucros.
Perguntas frequentes
Para que serve a simulação Monte Carlo no trading?
Para estimar a faixa de resultados possíveis de uma regra e de uma gestão de risco, incluindo a chance de quedas grandes e de ruína, em vez de confiar em um único histórico.
Quantas simulações são necessárias?
Não existe número mágico, mas milhares de caminhos costumam deixar as frequências estáveis. Uma boa verificação é rodar duas vezes com sementes diferentes e conferir se os números quase não mudam.
Monte Carlo substitui o backtest?
Não. O backtest verifica a regra contra dados reais; o Monte Carlo testa como a gestão de risco se comporta diante da variância. Os dois se complementam.
Posso fazer uma simulação Monte Carlo no Excel?
Sim. Com a função de número aleatório da planilha você sorteia cada operação e calcula o saldo linha a linha. Para muitos caminhos, uma linguagem como Python costuma ser mais rápida.
Um resultado positivo na simulação garante lucro?
Não. A simulação só reflete as premissas usadas. Se a taxa de acerto ou o pagamento estiverem otimistas, o resultado também estará, e falhas reais de execução não entram no modelo.


