Discussão do artigo "Otimização e ajuste fino do código-fonte para melhorar os resultados do backtesting"

 

Novo artigo Otimização e ajuste fino do código-fonte para melhorar os resultados do backtesting foi publicado:

Melhore seu código MQL5 otimizando a lógica, aprimorando os cálculos e reduzindo o tempo de execução para aumentar a precisão do backtesting. Ajuste finamente os parâmetros, otimize loops e elimine ineficiências para melhorar o resultado.

O desenvolvimento da nossa estratégia de negociação algorítmica começa com uma abordagem estruturada e metódica para o reconhecimento de padrões e a validação de sinais. A estratégia se baseia em um framework de análise de candles, projetado para identificar cenários de reversão de alta probabilidade. Para posições longas, a lógica detecta sistematicamente três candles de alta consecutivos, seguidos por um ou dois candles corretivos de baixa, culminando em um candle de alta de confirmação no índice 1, a última barra fechada.

Por outro lado, as posições curtas são acionadas pelo padrão inverso: três candles de baixa consecutivos, seguidos por um ou dois candles corretivos de alta, culminando em um candle de baixa de confirmação no índice 1. Essa configuração garante que os sinais sejam confirmados apenas na formação de uma nova barra, alinhando a execução com a ação do preço confirmada, e não com oscilações intrabarra.

Para a implementação prática dessa lógica, a arquitetura da estratégia dará prioridade ao desenvolvimento modular do código e à eficiência computacional. Primeiro, serão implementadas funções auxiliares para abstrair tarefas repetitivas, como a classificação de candles japoneses (identificação de tendência de alta/baixa) e a verificação de sequência (validação sequencial de padrões de candles). Essas funções usarão métodos nativos de acesso a dados de preço em MQL5, incluindo iOpen() e iClose(), minimizando cálculos redundantes por meio do cache de variáveis estáticas.


Autor: Hlomohang John Borotho

 

Por favor, esclareça-me como CTick e PTick funcionam. Vejo que ambos são declarados junto com Includes, mas nenhum deles é referenciado em outra parte do código. Em outras palavras, o que o CTick rastreia e o que o PTick rastreia?

(Não consigo encontrar nada na documentação do MQ).

 

The pursuit of reliable back-test results in algorithmic trading hinges not only on robust strategy logic but also on the efficiency and precision of the underlying code. Raw code optimization and tweaking are critical to ensuring that Expert Advisors (EAs) perform as intended, minimizing computational overhead while maximizing execution accuracy. Poorly optimized code can distort back-test outcomes through delayed order execution, incorrect signal detection, or resource exhaustion—issues that mask a strategy’s true potential.

Durante o processo de desenvolvimento da estratégia, tomaremos várias medidas importantes para garantir que o EA seja forte do ponto de vista funcional e sólido do ponto de vista técnico. Começaremos adicionando funções auxiliares personalizadas e blocos lógicos reutilizáveis para simplificar as operações e evitar códigos repetitivos. Em seguida, introduziremos variáveis e constantes bem estruturadas que melhoram a legibilidade do código e simplificam os ajustes de parâmetros. Esses ajustes fundamentais ajudarão na manutenção do código e melhorarão o tempo de execução geral durante cargas pesadas de back-test ou testes com vários símbolos.

Outra grande área de aprimoramento envolve o aproveitamento mais eficiente dos indicadores técnicos. Em vez de calcular cegamente os indicadores em cada tick ou barra, implementaremos uma lógica de atualização mais inteligente para reduzir a carga e o atraso. Também faremos experimentos com diferentes combinações de indicadores para dar suporte a uma melhor tomada de decisão na lógica do EA. Combinando o refinamento do código estrutural, as funções sensíveis ao desempenho e a otimização de indicadores, podemos melhorar drasticamente a qualidade e a velocidade do backtesting, aproximando-nos de uma estratégia consistentemente lucrativa e implementável.

Não quero ofender ninguém, mas devo dizer que este artigo é um fracasso. Aqui acima está a introdução, com muitas afirmações fortes e , todas as quais o autor não conseguiu implementar.

Minha intenção inicial era mostrar os problemas com o código, mas eles são tantos... que vou apontar apenas 2.

   double sl_distance = StopLoss * point;
   double tp_distance = TakeProfit * point;
   
   double sl = (tradeType == ORDER_TYPE_BUY) ? price - sl_distance :
                                               price + sl_distance;
   
   double tp = (tradeType == ORDER_TYPE_BUY) ? price + tp_distance :
                                               price - tp_distance;

   trade.PositionOpen(_Symbol, tradeType, In_Lot, price, sl, tp, NULL);

Código robusto? Onde é feita a verificação de erros? As entradas são usadas como estão, sem nenhuma verificação, os níveis de estoque não são verificados, a margem não é verificada, a solicitação de negociação não é verificada...

      // Verifique se há um padrão de alta
      for (int j = i; j >= i - min_bullish_count + 1; j--) {
         if (iClose(symbol, timeframe, j) > iOpen(symbol, timeframe, j)) {
            bullish_count++;
            first_bullish_low = getLow(5);
         } else break;
      }

Desempenho? Usando iClose/iOpen candle por candle? Essas funções são as mais lentas para lidar com dados.

Além disso, o getLow(5) parece ser um bug. Não verifiquei mais.

Não vou comentar sobre o algoritmo de negociação em si, apenas observei como o autor convenientemente selecionou um curto período da história em que o EA dá bons resultados.

Esse artigo é muito ruim.

 

Boa tarde, muito boa essa análise, mas complemento a mesma com a força, se volume!!! apesar dos candlesticks te darem informações o que acaba confirmando é o volume, dessa forma você poderia executar mais trade sem erro!!!


Saudações