Direto ao ponto. O simulado dos 54 robôs passou no item que decidia o teste, o risco: o pior tombo pela medida oficial do teste foi de 227,51 dólares, contra uma banda de aprovação de 439 e uma linha de reprovação de 768. A checagem de execução reprovou. Em 3 de setembro pus o mesmo portfólio de robôs em conta real, no mesmo lote, com US$ 1.000,19. Dezoito dias depois ela estava 30,63 dólares abaixo do saldo-base.
Passou no critério que eu escrevi antes de ligar, e reprovou em outro. O teste de dois meses em conta simulada da Tickmill rodou de 14 de julho a 3 de setembro de 2026, 50,8 dias, com 15 grids e 39 robôs do StrategyQuant X no lote 0,01, e fechou 540 posições. O critério de aprovação era o tamanho do tombo, e a medida oficial dele, que chamo de regente, terminou em 227,51 dólares, abaixo até da mediana de 258 que o backtest produz em janelas de dois meses, usando 29,6% da linha de reprovação. A checagem de execução marcou 6 robôs. O resultado da era, patrimônio final menos saldo-base, foi de −18,14 dólares, ou −0,18%.
Encerrei o simulado no dia 50,8 dos 62 previstos, e 31 minutos depois os mesmos 54 robôs inicializaram na conta real 55948384, com saldo-base de US$ 1.000,19, contra os cerca de 1.200 dólares que o protocolo de julho previa para ela. O cálculo que decide o tamanho é curto. Robô no mesmo lote produz o mesmo tombo em dólar em qualquer conta, então os 227,51 que eram 2,31% da conta simulada viram 22,75% desta. Por isso criei uma segunda régua. Na foto de 21 de setembro, às 9h24, o patrimônio era de 969,56 e o resultado da era, −30,63 dólares (−3,06%).
Os quatro itens do teste e o que cada um deu
O protocolo foi escrito em 2 de julho, e as bandas em dólar desta carteira saíram em 12 de julho, dois dias antes do dia 0, de 122 janelas rolantes de 60 dias do backtest da carteira entre 2024 e 2026. Esse trecho vem depois da construção de cada robô no StrategyQuant X, mas foi nele que escolhi os 54 da carteira, então para a carteira as bandas são in sample. Otimistas por construção. A linha de 768 é o percentil 95 multiplicado por 1,75, a inflação de risco que o walk-forward do capítulo 11 mediu fora da amostra. Ela virou a linha de reprovação em 17 de agosto, no meio do teste. Até ali valiam cerca de 900 dólares, herdados das bandas de uma carteira anterior.
| Item | O que mede | Resultado |
|---|---|---|
| 1. Risco | Pior tombo da era contra as bandas | Passou: 227,51 dólares, 29,6% da linha de 768 |
| 2. Execução | Frequência e lado de cada robô contra o backtest | Reprovou: 6 robôs marcados |
| 3. Disjuntor | Quantas vezes a proteção tirou um robô | Sem medida: o extrato não separa stop de alvo |
| 4. Retorno | Registrado, fora do critério | −18,14 dólares, ou −0,18% |
O item 1 tem dois números. Os capítulos 17 e 18 publicaram 207,48 dólares, varrendo a série que o painel grava, do topo de 7 de agosto ao fundo de 21 de agosto. O teste usa o regente do dd_era.py, script que escrevi em 21 de julho, no sétimo dia da era, com a mesma régua de pior prejuízo por par que gerou as bandas. Ele reconstrói cada dia útil com barras de 5 minutos e põe o vale do dia no realizado acumulado na abertura mais o pior prejuízo aberto do dia, somando o pior de cada par. Deu 227,51 dólares, no mesmo dia. A diferença de 20,03 é de método: a série guarda um ponto por hora fora das últimas 24 horas e perde o minuto exato do fundo, e a reconstrução soma os piores de cada par mesmo quando eles aconteceram em horas diferentes.
O item 2 reprovou. O reconcilia.py compara as operações de cada robô ao vivo com as que o backtest previa no mesmo número de dias, e marca divergência com razão abaixo de 0,3 ou acima de 3,0, robô mudo quando 5 ou mais operações esperadas viraram zero, e posição presa quando ela passa de 30 dias e do tempo máximo que o backtest segurou. A rodada de 3 de setembro marcou 6 robôs. Dois mudos, o Strategy 4.6.77 e o 6.6.58. Quatro fora da frequência, três deles com razão de 0,2 e o 4.5.82(1) com 27 operações contra 8 esperadas, e três posições presas, uma delas aberta havia 46 dias num robô cujo backtest nunca segurou posição por mais de 4.
A causa das presas é mecânica: a variável global que conta o tempo de saída dos robôs SQX se perde quando o terminal é religado, e a posição passa do número de barras em que a regra de saída a fecharia. E tem um erro meu. A rotina escrita no protocolo mandava rodar o reconcilia toda semana, e ele só rodou no dia 50.
O item 3 ficou sem medida. O log do MT5 guarda uns 9 dias, e as 171 saídas de grid da era contadas em 2 de setembro chegaram ao extrato sem comentário, então o stop global que fecha a cesta de um grid aparece igual ao alvo. Os capítulos 17 e 18 disseram que nenhum robô foi retirado pelo disjuntor, e aquilo mediu o teto de drawdown de Monte Carlo de cada robô, que ninguém passou (o mais perto foi o grid cad_atr_H8a, com 24,2% do teto em 1º de setembro). O stop global dentro de cada grid segue sem contagem.
O retorno negativo e o que o encerramento mostrou
Dois meses de uma carteira com índice de Sharpe perto de 0,5 são ruído, e por isso o retorno ficou fora do critério. O número entra no texto assim mesmo. No backtest, 98% das janelas de dois meses fecharam positivas, com mediana de +532 dólares e pior janela em −90, e os −18,14 caíram entre as até 2% que não ficaram no azul, numa era de 50,8 dias e contra um backtest in sample. O protocolo manda investigar retorno negativo. A investigação chegou ao custo e ao encerramento.
| Etapa (dólares) | Valor |
|---|---|
| Lucro bruto das 540 posições | +49,32 |
| Comissão, 1.058 negócios a 0,03 cada | −31,74 |
| Swap | −29,71 |
| Resultado realizado | −12,13 |
| Posição aberta que já estava dentro do saldo-base no dia 0 | −6,01 |
| Resultado da era | −18,14 |
O custo levou 61,45 dólares contra um bruto de 49,32. Em 1º de setembro o bruto era 173,04. O encerramento derrubou o bruto. Às 9h41 do dia 3 o patrimônio já estava em 9.848,41, com 143,05 de prejuízo aberto, e fechar as 49 posições converteu aberto em realizado sem mexer no patrimônio. Os grids entregaram −241,13 nesse fecho e os SQX, +96,88. É o padrão do capítulo 18. O grid fecha ganho cedo e carrega a perda no aberto até o dia em que a era fecha tudo de uma vez.
A terceira pergunta do capítulo 18 também tem resposta. Em 1º de setembro faltavam 18 dólares para o saldo voltar aos 9.999,34 com que a conta simulada começou a operar em 30 de junho, e às 8h48 do dia 3 o saldo chegou a 10.000,08, com 118,11 de prejuízo aberto. Às 9h37 já estava em 9.991,46. O encerramento realizou o aberto e a conta terminou com 9.848,68, ou seja, 150,66 abaixo do ponto de partida.
O que a régua dizia sobre ir para o real com um item reprovado
A lista de reprovação, a que impede a conta real, tem quatro gatilhos: tombo acima de 768 sustentado janela após janela, um robô com cerca de 10 vezes a frequência do backtest ou operando no lado trocado, muito mais retiradas de disjuntor que as 1,7 esperadas em dois meses, e buraco de infraestrutura que faça o monitor mentir. O de tombo e o de infraestrutura não dispararam: o máximo foi 227,51, e as conferências de 14 de agosto e 1º de setembro acharam 54 gráficos com 54 robôs anexados. No de execução, a maior razão de frequência foi 3,4 vezes, e o detector de lado trocado acendeu uma vez, no Strategy 2.8.78, registrado no painel como vendedor, que entrou comprado em 4 das 5 entradas da era. Cinco entradas é o piso da regra. O de disjuntor ficou sem medida.
Em 2 de julho eu escrevi que o simulado podia ter margem de erro e só seria reprovado se mostrasse algo totalmente distinto do backtest. O item 2 reprovou sem acionar gatilho. A régua não tem linha para isso. Levei os robôs para a conta real em 3 de setembro, 11,2 dias antes dos 62 previstos, e registro aqui que essa decisão ficou fora do texto da régua. Dois consertos saíram do simulado e já rodam na conta real: a versão 1.21 do robô de grid, que refaz o relógio de reentrada e o contador de aumentos depois de um religa e responde à recuperação de estado reprovada no item 2, e o conserto do primeiro tick dos SQX.
Por que a conta real tem duas réguas
A conta real tem 10,14% do tamanho da simulada e roda os mesmos robôs, com os mesmos números mágicos, no mesmo lote 0,01. O tombo em dólar é o mesmo. O percentual cresce 9,86 vezes.
| Referência | Dólares | Na simulada (9.866,82) | Na real (1.000,19) |
|---|---|---|---|
| Pior tombo do simulado, pelo regente | 227,51 | 2,31% | 22,75% |
| Banda de aprovação, percentil 95 | 439 | 4,45% | 43,89% |
| Linha de reprovação | 768 | 7,78% | 76,79% |
A régua A continua em dólar e julga se o portfólio se comporta como o backtest, porque dividir as bandas por 10 faria a linha de reprovação disparar numa semana comum. A régua B é nova e mede o tombo em percentual do saldo-base, com alerta em 10% do saldo-base (100,02 dólares), atenção em 20% (200,04) e reprovação de capital em 30% (300,06). O alarme é a que dispara primeiro. Nesta conta é sempre a B.
Uma repetição do pior tombo do simulado, 22,75% do capital, cai entre a atenção e a reprovação de capital. Esses percentuais são ponto de partida. No backtest, o tombo de dois meses tem mediana de 258 e percentil 75 de 354, então de 25% a 50% das 122 janelas passariam dos 300,06, num backtest in sample que já é otimista.
O que conferi no dia 3, e as ordens do primeiro tick
Em Brasília, horário de todas as horas deste texto (o servidor da Tickmill fica 6 horas à frente), o depósito caiu às 8h29, o simulado foi encerrado às 9h41 e às 10h13 os 54 robôs inicializaram na conta real, com zero posição e o AutoTrading desligado, e os 15 grids, já na versão 1.21, recuperaram o estado em 20 a 22 segundos. Às 10h15 um script conferiu o ambiente: conta hedging como a simulada, os quatro pares com o nome exato, contrato de 100.000 unidades e lote mínimo de 0,01.
O defeito conhecido tinha aparecido duas vezes no simulado. Nos 39 SQX, a variável que guarda a hora da última barra nasce zerada a cada carga do robô, e o código tratava esse zero como barra nova, então no primeiro tick depois do religa as regras de entrada rodavam contra a última barra fechada, ao preço daquele instante. Em 12 de agosto o religa gerou 8 negócios em 2 segundos, 4 deles de SQX. Na conta real, às 10h13, vieram 25 tentativas. Todas voltaram com o código 10027, a recusa do MT5 por AutoTrading desligado no terminal. Virou regra desligar o AutoTrading antes do login.
O conserto mudou um ramo da lógica: com a hora guardada em zero, o robô registra a barra atual sem tratá-la como abertura. Publiquei nos 39 às 17h21, e o registro do religa diz zero ordem nos segundos seguintes. Isso vale para os SQX. O extrato mostra 8 entradas de grid 27 e 43 segundos depois do religa, seis delas em grids de USD/JPY. O robô de grid faz o mesmo por desenho, porque a hora da última barra dele também nasce zerada e, com zero posição, o primeiro tick depois de recuperar o estado conta como barra nova, e o comentário no código diz que é o comportamento da versão 1.20, mantido de propósito.
Os primeiros 18 dias na conta real
| Medida em 21/09, 9h24 (dólares) | Valor |
|---|---|
| Saldo, só o que fechou | 1.053,87 |
| Posição aberta | −84,31 |
| Patrimônio | 969,56 |
| Resultado da era, patrimônio menos saldo-base de 1.000,19 | −30,63 (−3,06%) |
| Posições fechadas / abertas | 192 / 49 |
O saldo está no maior valor da era e o patrimônio está abaixo do saldo-base, a divisão que o capítulo 18 mostrou no simulado. Quem puxa para baixo é o aberto.
| Medida, 192 fechadas | Grid (15 robôs) | SQX (39 robôs) |
|---|---|---|
| Posições fechadas | 46 | 146 |
| Acerto no líquido | 87,0% | 40,4% |
| Resultado fechado | +85,86 | −30,71 |
| Posição aberta agora | −134,07 | +49,76 |
| Fechado mais aberto | −48,21 | +19,05 |
O fechado da tabela, no líquido de cada posição, soma +55,15, e o saldo mostra +53,68 porque já pagou a comissão de entrada das 49 abertas (49 vezes 0,03, que dá 1,47), e pela mesma razão as famílias somam −29,16 contra os −30,63 do resultado da era. Os grids repetem o simulado. Fecham ganho em 87% das vezes e carregam 134,07 dólares de prejuízo aberto, mais que o fechado inteiro deles.
O tombo segue a regra que prometi no capítulo 18. Varri a série inteira que o painel gravou até 21 de setembro, 797 pontos, e o pior caminho vai do pico de 6 de setembro às 23h59 ao vale de 18 de setembro às 10h59: 100,17 dólares na métrica da série e 101,13 em patrimônio. A diferença de 0,96 é a comissão de entrada das 32 posições abertas a mais no vale (38, contra 6 no pico), que a série deixa de fora. É um piso, porque fora das últimas 24 horas a série guarda um ponto por hora.
O regente, pelo mesmo método do simulado, deu 198,59 dólares, também no dia 18. A reconstrução põe o vale do dia no realizado da abertura (−28,06) mais o pior prejuízo aberto do dia somando o pior de cada par (−133,77, com USD/JPY em −88,69, USD/CAD em −25,32 e GBP/USD em −19,76). Só que no dia 18 o portfólio fechou 20 posições com +74,01, e no instante do vale da série o realizado já estava em +41,94. A reconstrução mede como se o pior prejuízo aberto do dia tivesse convivido com o realizado da abertura. Ela também não serve de teto. Até 17 de setembro ela marcava 93,87, com o vale no dia 10, enquanto a série já tinha 100,76 em patrimônio no dia 9, porque ali o realizado caiu durante o dia.
O tombo da conta real foi de pelo menos 101,13. Na régua A, ele e o regente de 198,59 são 23,0% e 45,2% da banda de aprovação. Na régua B, os 101,13 são 10,11% do saldo-base, 1,11 dólar acima do alerta, e o vale de 9 de setembro, com 100,76, também passou dele. O regente ficou 1,45 abaixo da atenção. O painel guarda só o estado do instante, sem registro de alerta, e eu não consigo provar se o alerta acendeu na tela nas duas vezes.
E o vale tem um buraco logo depois. Às 11h06 do dia 18 o notebook que roda o terminal hibernou por bateria crítica e só voltou às 13h04, e a série ficou 1,97 hora sem ponto. Nesse intervalo o servidor executou o stop do Strategy 2.1.75, no USD/JPY, com −5,12 no líquido, porque o stop dos SQX mora na corretora. Os grids não têm stop no servidor. A proteção deles roda dentro do robô, e com o terminal apagado as cestas ficaram duas horas sem ela. O pior instante real pode ter caído dentro desse buraco.
Em 4 de setembro desliguei o AutoTrading antes do payroll das 9h30, porque os quatro pares são cotados contra o dólar e o dado bate nos 54 robôs ao mesmo tempo, o mecanismo do payroll de 7 de agosto. Uma ordem pendente do Strategy 1.5.81 executou mesmo assim. Ela estava no servidor da corretora, e desligar o AutoTrading impede ordem nova sem cancelar a que já está lá: executou seis segundos depois do dado e ficou aberta 10 minutos e 54 segundos, com +2,73. A regra que ficou é que toda parada apaga as ordens pendentes, e a conferência final lê as ordens além das posições.
O que eu ainda não sei sobre a conta real
- Se a execução real bate com o backtest robô a robô. O reconcilia.py, o item que reprovou no simulado, ainda não rodou na conta real.
- O tamanho real do tombo de 18 de setembro. A série dá 101,13 como piso. O regente, 198,59, junta o realizado da abertura com o pior aberto do dia, e no vale da série o realizado já estava em +41,94.
- Se a régua de capital fica como está, com a reprovação em 300,06, entre a mediana e o percentil 75 do tombo de dois meses do backtest.
- O stop de catástrofe dos grids no servidor, a versão 1.22, que ainda não começou.
- A causa do swap: −29,71 no simulado inteiro, +0,55 na conta real até 20 de setembro.
O que o próximo capítulo mede
A conta real completa um mês em 3 de outubro de 2026. O próximo capítulo sai com o tombo varrido na série, o regente pelo mesmo método, as duas réguas lado a lado, o reconcilia rodado na conta real e o fechado separado do aberto por família. A partir de 25 de setembro começa também uma série que abre um robô do portfólio por vez, com a lógica, o backtest e os dados de cada um no simulado e na conta real. Os dois números de tombo seguem saindo juntos.
Perguntas frequentes
Quanto tempo de simulado antes de levar um portfólio de robôs para a conta real?
Eu planejei 62 dias e encerrei com 50,8, depois de 540 posições fechadas por 54 robôs. O prazo vem da régua: as bandas de risco saíram de janelas de 60 dias do backtest, e o teste precisa de uma janela parecida para comparar.
Por que o drawdown em dólar é o mesmo numa conta de 10 mil e numa de mil?
O tamanho de cada posição é fixo em lote 0,01, então o robô ganha e perde os mesmos dólares nas duas contas. O pior tombo do meu simulado foi de 227,51 dólares, 2,31% de uma conta de 9.866,82. Numa conta de 1.000,19, o mesmo tombo vira 22,75% do capital, e por isso ela precisa de uma régua em percentual do saldo-base além da régua em dólar.
Referências
- MetaQuotes (consultado em 21/09/2026). MQL5 Reference: Trade Server Return Codes. mql5.com. O código 10027, TRADE_RETCODE_CLIENT_DISABLES_AT, é a recusa por AutoTrading desligado no terminal.
- Diário de um Portfólio de Robôs, capítulo 18: o recorde de saldo da era simulada e a regra de uma definição só para o resultado da era.
- Diário de um Portfólio de Robôs, capítulo 11: o walk-forward que mediu a inflação de risco de 1,75 fora da amostra.
- Quanto drawdown é normal num robô de trading: medi os mesmos 54 robôs em duas contas
- Anatomia de um Robô do Portfólio: o USD/JPY que tirou três robôs da carteira
- Anatomia de um Robô do Portfólio: por que o EUR/USD deu +US$ 17,95 no simulado e −US$ 14,65 no real?
- Anatomia de um Robô do Portfólio: o EUR/USD que fez uma operação em 50,8 dias no simulado
Presente para Leitores: Robô de Gradiente Linear Gratuito
Estou liberando o acesso ao meu setup pessoal de Gradiente Linear sem custo nenhum. É só clicar e me pedir o arquivo.
Quem escreve: Flávio Araújo
Trader algorítmico há mais de 13 anos, MBA em Mercado de Capitais e Derivativos. Mantém um laboratório próprio que já rodou mais de 20 milhões de backtests e analisou mais de 20 mil estratégias, e opera um portfólio de robôs acompanhado publicamente no blog. LinkedIn · Instagram · YouTube
