Definição: o que significa teste de algoritmo
O teste de algoritmo é o processo de avaliar um sistema automatizado baseado em regras usando dados e métricas definidos para entender como ele teria se comportado sob premissas específicas. Em um contexto forex, um “algoritmo” normalmente significa um conjunto determinístico de regras para decisões (por exemplo, quando entrar/sair e como o tamanho da posição é definido). O ponto-chave é que testar não é o mesmo que prever: descreve comportamento passado ou simulado dado um cenário específico.
Exemplo de cenário prático (com premissas explícitas)
Abaixo está um exemplo prático usando números simplificados. Ele é intencionalmente não baseado em dados de mercado em tempo real.
Objetivo e período de teste
Suponha que você queira testar um algoritmo que abre e fecha negociações usando estas mecânicas fixas:
- Apenas uma posição pode estar aberta por vez.
- Quando uma negociação é aberta, ela fecha após exatamente 5 passos de preço.
- O lucro/prejuízo é calculado a partir de um único preço de entrada e um único preço de saída.
- O tamanho da posição é constante: 10 unidades por negociação.
Premissas (declare-as explicitamente):
- Dados de teste: 3 “negociações” independentes de amostras semelhantes a históricas, com preços de entrada e saída conhecidos.
- Tratamento de spread/slippage: você modela os custos de transação usando um custo constante por negociação de 0,50 (nas suas unidades de lucro/prejuízo escolhidas).
- Nenhum financiamento, rollover ou impostos estão incluídos.
- Todos os preços são tratados como perfeitamente conhecidos no momento da decisão (sem look-ahead).
Dados de entrada
Suponha que as três negociações tenham os seguintes preços de entrada e saída (o movimento de preço determina o lucro/prejuízo bruto):
- Negociação A: entrada 100,0 → saída 101,0 (movimento +1,0)
- Negociação B: entrada 200,0 → saída 198,5 (movimento −1,5)
- Negociação C: entrada 50,0 → saída 50,2 (movimento +0,2)
Para converter o movimento em lucro/prejuízo bruto, suponha uma conversão linear simples:
- Lucro/prejuízo bruto = movimento × tamanho da posição
- Tamanho da posição = 10 unidades
Então:
- Lucro/prejuízo bruto da Negociação A = (+1,0) × 10 = +10,0
- Lucro/prejuízo bruto da Negociação B = (−1,5) × 10 = −15,0
- Lucro/prejuízo bruto da Negociação C = (+0,2) × 10 = +2,0
Aplicar custos de transação
Suponha um custo de transação fixo por negociação fechada de 0,50.
- Lucro/prejuízo líquido por negociação = lucro/prejuízo bruto − 0,50
Resultados:
- Negociação A líquido = 10,0 − 0,50 = 9,5
- Negociação B líquido = −15,0 − 0,50 = −15,5
- Negociação C líquido = 2,0 − 0,50 = 1,5
Lucro/prejuízo líquido total no teste de 3 negociações = 9,5 + (−15,5) + 1,5 = −4,5
Métricas que você pode verificar
A partir das mesmas premissas, você pode calcular:
- Taxa de acerto = 2 negociações vencedoras de 3 = 66,7%
- Lucro/prejuízo líquido médio por negociação = (−4,5) / 3 = −1,5
- Lucro bruto (soma dos vencedores) = 9,5 + 1,5 = 11,0
- Prejuízo bruto (soma absoluta dos perdedores) = 15,5
- Fator de lucro = lucro bruto / prejuízo bruto = 11,0 / 15,5 ≈ 0,71
Este é um exemplo “prático” porque outra pessoa pode reproduzir cada número usando as mesmas entradas e fórmulas. Se não puder, o cenário de teste está pouco claro.
Como a mecânica difere da variabilidade de mercado/provedor
No uso real, vários itens normalmente variam e podem mudar os resultados mesmo que as regras do algoritmo permaneçam as mesmas:
- Comportamento do mercado: regimes de volatilidade, correlações e mudanças de tendência.
- Detalhes de execução: qualidade da execução de ordens, timing e custos realizados.
- Qualidade dos dados: se os preços semelhantes a históricos refletem o que poderia ter sido observado sem look-ahead.
O exemplo acima separou a mecânica fixa (manutenção de 5 passos, tamanho constante, modelo de custo) das partes variáveis (os movimentos de preço). Essa separação é central para um bom teste porque diz o que é determinado pelo seu algoritmo versus pelas suas premissas.
Limitações materiais e modos de falha
Pelo menos uma limitação importante é que o teste pode produzir conclusões enganosas se as premissas não corresponderem à realidade. Modos de falha comuns incluem:
- Overfitting: ajustar regras ou parâmetros do algoritmo até que correspondam a uma amostra histórica específica, reduzindo o desempenho em novos dados.
- Incompatibilidade de execução: preenchimentos simulados e modelos de custo podem ser otimistas demais em comparação com a execução real.
- Custos e condições ocultos: a negociação real pode envolver efeitos não representados no modelo de custo simplificado (por exemplo, spreads variáveis ou outras taxas).
- Vazamento de dados: usar informações no teste que não estariam disponíveis no momento da decisão infla os resultados.