Novos testes de robustez na base de código StrategyQuant: 5 métodos de Monte Carlo para tornar suas estratégias de negociação mais robustas

Ao desenvolver estratégias de negociação algorítmica, o backtesting fornece informações valiosas sobre o desempenho histórico. Entretanto, um único backtest representa apenas um resultado possível com base na sequência exata de eventos de mercado que ocorreram. Na realidade, os mercados são dinâmicos e imprevisíveis, com inúmeras variáveis que poderiam se desdobrar de forma diferente. É nesse ponto que o teste de robustez Monte Carlo se torna inestimável.

O StrategyQuant oferece vários métodos sofisticados de teste de Monte Carlo que ajudam os traders a entender como suas estratégias podem se comportar em diferentes cenários de mercado. Cada teste aborda desafios específicos de negociação no mundo real, desde imperfeições de execução até mudanças nos regimes de mercado. Vamos explorar esses cinco testes essenciais de robustez que todo operador algorítmico sério deve entender.

1. Randomização de blocos MACHR: Testando a dependência do regime de mercado

O que ele testa: O grau de robustez de sua estratégia em relação a mudanças na sequência de regimes de mercado.

O teste MACHR (Market Condition Historical Randomization) Block Randomization aborda uma questão fundamental: "E se as mesmas condições de mercado ocorressem, mas em uma ordem diferente?" Essa metodologia de teste inovadora foi desenvolvida por Marek ChrastinaO Sr. Koller, que foi várias vezes finalista do Top 3 no World Cup Trading Championship® (incluindo o 3º lugar no Global Cup Trading Championship 2020-2021 e no World Cup Championship of Futures Trading® 2021).

Marek, que administra a Quantum Global e se concentra em pesquisa e desenvolvimento de sistemas de negociação algorítmica, é usuário e colaborador do StrategyQuant há muito tempo. Sua experiência em negociação sistemática e gerenciamento de risco levou a várias contribuições valiosas para a plataforma StrategyQuant, incluindo essa sofisticada abordagem de teste de robustez. Você pode ler mais de seus insights em outros artigos do StrategyQuant que abordam tópicos como expectativas realistas de desempenho para carteiras de futuros algorítmicas e abordagens básicas para a diversificação da carteira de futuros.

Na negociação real, as condições de mercado não seguem sequências previsíveis. Mercados em alta, mercados em baixa, períodos de alta volatilidade e fases de consolidação podem ocorrer em ordens muito diferentes. Uma estratégia com bom desempenho durante uma sequência específica pode ter dificuldades se esses mesmos regimes surgirem de forma diferente.

Como funciona:

  • Criação de blocos: A sequência original de negociações é dividida em blocos de negociações consecutivas (padrão: 5 negociações por bloco, configurável de 2 a 50)
  • Amostragem de blocos bootstrap: A simulação seleciona blocos aleatoriamente com substituição, o que significa que alguns períodos de regime de mercado podem aparecer várias vezes, enquanto outros podem não aparecer
  • Preservação da estrutura do regime: Em cada bloco selecionado, a sequência de negociação original e as relações de tempo são mantidas
  • Reconstrução de carimbo de data/hora: A simulação reconstrói registros de data e hora cronológicos para manter os cálculos adequados da curva de patrimônio

Por exemplo, se seu backtest original contivesse:

  • Bloco 1: 5 negociações durante uma tendência de mercado em alta
  • Bloco 2: 5 negociações durante a consolidação de alta volatilidade
  • Bloco 3: 5 negociações durante uma queda no mercado de baixa
  • Bloco 4: 5 negociações durante a recuperação da baixa volatilidade

Uma simulação pode gerar: Bloco 2 → Bloco 1 → Bloco 2 → Bloco 4 (cenário de alta volatilidade), enquanto outra pode criar: Bloco 3 → Bloco 3 → Bloco 1 → Bloco 4 (cenário de mercado em baixa).

Ao executar mais de 500 simulações, você gera uma distribuição de resultados de desempenho que reflete o desempenho de sua estratégia em diferentes "históricos de mercado" possíveis. Uma estratégia que apresenta desempenho consistente em todas as simulações MACHR demonstra a verdadeira robustez do regime.

Você pode fazer o download desse teste aqui: Randomização de blocos de Monte Carlo MACHR

2. Jitter de parâmetros: Teste de sensibilidade a variações menores

O que ele testa: O quanto sua estratégia é resistente a desvios menores e imprevisíveis do comportamento perfeito do backtest.

Nas negociações ao vivo, as condições de mercado evoluem constantemente. A volatilidade muda, a liquidez flutua e os feeds de dados podem ter variações mínimas. Até mesmo estratégias bem otimizadas podem não funcionar exatamente como previsto devido a um leve "jitter" nos parâmetros ou cálculos de indicadores.

Como funciona:

  • Flicker de condição (entradas perdidas): Com base na probabilidade de pular 1TP9, uma porcentagem aleatória de negociações é removida do backtest, simulando instâncias em que uma leve instabilidade nos parâmetros faz com que as condições de entrada sejam perdidas por pouco.
  • Variação do nível de saída (flutuação de P/L): Para as negociações restantes, uma porcentagem aleatória (ajuste Probability) tem seu resultado final ligeiramente alterado pela modificação do preço de fechamento dentro da faixa de preço original da negociação

A principal percepção é que esses ajustes podem ser positivos ou negativos, simulando pequenas variações nos pontos de execução de stop loss, meta de lucro ou trailing stop. Isso difere da derrapagem fixa porque introduz um distúrbio probabilístico diretamente relacionado à sensibilidade potencial do parâmetro interno da estratégia.

Uma simulação pode ignorar as negociações #3 e #25 e melhorar ligeiramente a negociação #42, enquanto outra pode ignorar apenas a negociação #15, mas aplicar ajustes de preço maiores às negociações #8, #33 e #50.

Você pode fazer o download desse teste aqui: Jitter de parâmetro de Monte Carlo

3. Degradação aleatória da execução: Modelagem de problemas de execução no mundo real

O que ele testa: O desempenho de sua estratégia diante de imperfeições de execução, como derrapagem e spreads mais amplos.

As imperfeições de execução são comuns em negociações ao vivo. A derrapagem de preços, os spreads temporariamente mais amplos e os preenchimentos parciais podem fazer com que os preços reais de fechamento sejam menos favoráveis do que os preços ideais do backtest. Esse teste modela o impacto desses problemas de execução aleatória.

Como funciona:

  • Uma porcentagem aleatória de negociações (com base em Probability) tem seu resultado de execução degradado
  • O ClosePrice das negociações selecionadas é piorado em uma porcentagem aleatória (até a porcentagem máxima de degradação) da faixa de preço da negociação
  • "Pior" significa preços de fechamento mais baixos para negociações longas e preços de fechamento mais altos para negociações curtas

Diferentemente da derrapagem fixa aplicada a todas as negociações, esse teste é probabilístico:

  • As negociações afetadas são aleatórias
  • O grau de degradação de cada comércio afetado também é aleatório

Cada simulação representa um cenário único. Em uma delas, as negociações #5, #23 e #58 podem ser degradadas em pequenas quantidades, enquanto outra afeta as negociações #12, #23, #45 e #70 com níveis de degradação variados. Isso ajuda a avaliar a solidez da estratégia contra variações imprevisíveis de execução.

Você pode fazer o download desse teste aqui: Execução de degradação aleatória de Monte Carlo

4. Randomize o SWAP de cada negociação: testando a sensibilidade individual do swap

O que ele testa: Qual é a sensibilidade de sua estratégia às variações nos custos de financiamento overnight em nível de negociação individual.

SWAP refere-se à taxa de juros ou crédito aplicado ao manter posições durante a noite em negociações de forex ou CFD. É determinado por diferenciais de taxa de juros e pode afetar significativamente a lucratividade da estratégia, especialmente para estratégias de período de retenção mais longo.

Como funciona:

  • Cada negociação no backtest recebe valores de swap gerados aleatoriamente dentro de um intervalo especificado [-Range, Range]
  • Cada negociação recebe seu próprio valor de troca exclusivo
  • O intervalo determina o swap máximo positivo ou negativo que pode ser aplicado

Esse teste difere da randomização de swap do backtest completo ao implementar swaps exclusivos para cada negociação individual. Uma operação pode ter um swap positivo longo e um swap negativo curto, enquanto as operações subsequentes têm combinações de swap totalmente diferentes.

A execução de 500 simulações com swaps aleatórios para cada negociação fornece uma perspectiva de Monte Carlo sobre como as variações de swap afetam o resultado final de sua estratégia.

Você pode fazer o download desse teste aqui: Monte Carlo Randomize SWAP de cada negociação

5. Randomizar SWAP de todo o backtest: Teste de cenários de swap consistentes

O que ele testa: O desempenho de sua estratégia em ambientes de taxas de swap diferentes, mas consistentes.

Enquanto o teste anterior randomiza os swaps para cada negociação individual, este teste aplica taxas de swap consistentes em todas as negociações dentro de cada simulação, representando melhor os ambientes de taxas de juros variáveis.

Como funciona:

  • Cada simulação de backtest usa valores de swap gerados aleatoriamente dentro do intervalo especificado
  • Todas as negociações em uma única simulação usam as mesmas taxas de swap
  • O sistema garante que as trocas positivas e negativas sejam representadas nas simulações
  • Os parâmetros fixos incluem método de cálculo de swap, dia de swap triplo e hora de contagem de swap

Essa abordagem simula diferentes ambientes de taxas de juros do mercado em vez de variações de negociações individuais. Por exemplo, uma simulação pode representar um ambiente de alta taxa de juros com custos de swap consistentemente mais altos, enquanto outra representa um ambiente de baixa taxa com impacto mínimo de swap.

Você pode fazer o download desse teste aqui: Monte Carlo Randomize SWAP de todo o backtest

Implementação desses testes em seu desenvolvimento de estratégia

Para maximizar o valor desses testes de robustez:

  1. Comece com a randomização de blocos MACHR para entender a dependência de sua estratégia em relação às sequências de regime de mercado
  2. Aplicar Jitter de Parâmetro para testar a sensibilidade a pequenas variações operacionais
  3. Degradação da execução do uso para modelar custos de negociação e derrapagem realistas
  4. Teste de sensibilidade SWAP se sua estratégia mantiver posições durante a noite

Para cada teste, execute um mínimo de 100 simulações, embora mais de 500 simulações forneçam percepções estatísticas mais confiáveis. Preste atenção a:

  • Desempenho médio em todas as simulações
  • Desvio padrão de resultados (quanto menor, melhor para a consistência)
  • Piores cenários (proteção contra perdas)
  • Porcentagem de simulações lucrativas

Conclusão

O teste de robustez Monte Carlo transforma o desenvolvimento da estratégia de uma avaliação de resultado único em uma avaliação de risco abrangente. Esses cinco testes StrategyQuant abordam os desafios de negociação mais críticos do mundo real: dependência de regime, sensibilidade de parâmetros, qualidade de execução e custos de financiamento.

Uma estratégia realmente robusta deve demonstrar desempenho consistente em todos esses testes. Se sua estratégia apresentar alta variação em qualquer teste, considere isso como um sinal de alerta que requer mais investigação e possível refinamento da estratégia.

Lembre-se: a meta não é o desempenho perfeito em todas as simulações, mas sim o desempenho consistente e previsível que você pode implementar com confiança nos mercados reais. Esses testes ajudam a preencher a lacuna entre a perfeição do backtest e a realidade das negociações no mundo real.

 

Para obter instruções detalhadas sobre como importar esses snippets personalizados para o StrategyQuant, acesse: Guia Importar/Exportar indicadores personalizados e snippets

clonex / Ivan Hudec

Ivan Hudec, conhecido como "Clonex" no fórum, é um experiente operador algorítmico, consultor e pesquisador que negocia há 15 anos e usa o StrategyQuant X (SQX) desde 2014. Ele contribui para o blog do SQX e aprimora o software adicionando novos indicadores, snippets e incorporando a programação Python para análise avançada de dados, algoritmos de aprendizado de máquina e modelagem quantitativa. Ivan oferece sua experiência para ajudar outras pessoas a acelerar seus projetos de negociação e abordá-los de maneiras inovadoras.

0 Comentários
mais antigos
mais recentes Mais votado
Feedbacks embutidos
Ver todos os comentários

Continuar lendo