Discusión sobre el artículo "Optimización y ajuste de código sin procesar para mejorar los resultados de las pruebas retrospectivas"

 

Artículo publicado Optimización y ajuste de código sin procesar para mejorar los resultados de las pruebas retrospectivas:

Mejore su código MQL5 optimizando la lógica, refinando los cálculos y reduciendo el tiempo de ejecución para mejorar la precisión de las pruebas retrospectivas. Ajuste los parámetros, optimice los bucles y elimine ineficiencias para obtener un mejor rendimiento.

El desarrollo de nuestra estrategia de trading algorítmico comienza con un enfoque estructurado y metódico para el reconocimiento de patrones y la validación de señales. En esencia, la estrategia emplea un marco basado en velas diseñado para identificar escenarios de reversión de alta probabilidad. Para posiciones largas, la lógica detecta sistemáticamente tres velas alcistas consecutivas, seguidas de una o dos velas bajistas correctivas, que culminan en una vela alcista de confirmación en el índice 1 (la barra cerrada más recientemente).

Por el contrario, las posiciones cortas se activan mediante un patrón inverso: tres velas bajistas consecutivas, sucedidas por una o dos velas alcistas de retroceso y finalizadas por una vela bajista de confirmación en el índice 1. Esta configuración garantiza que las señales se validen solo tras la formación de una nueva barra, alineando la ejecución con la acción del precio confirmada en lugar de con las fluctuaciones dentro de la barra.

Para operacionalizar esta lógica, la arquitectura de la estrategia priorizará el diseño de código modular y la eficiencia computacional. En primer lugar, se implementarán funciones auxiliares para abstraer tareas repetitivas, como la clasificación de velas (determinación alcista/bajista) y la validación de secuencia (verificaciones de patrones de velas consecutivas). Estas funciones aprovecharán los métodos de acceso a datos de precios nativos de MQL5, incluidos `iOpen()` y `iClose()`, al tiempo que minimizan los cálculos redundantes mediante el almacenamiento en caché de variables estáticas.


Autor: Hlomohang John Borotho

 

Por favor, acláreme cómo funcionan CTick y PTick. Veo que ambos se declaran junto con Includes, pero no se hace referencia a ninguno de los dos en ninguna otra parte del código. En otras palabras, ¿qué es lo que CTick rastrea; y qué es lo que PTick rastrea?

(No encuentro nada en la documentación de 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 el proceso de desarrollo de la estrategia, daremos varios pasos clave para asegurarnos de que el EA es funcionalmente fuerte y técnicamente sólido. Empezaremos añadiendo funciones de ayuda personalizadas y bloques lógicos reutilizables para agilizar las operaciones y evitar el código repetitivo. A continuación, introduciremos variables y constantes bien estructuradas que mejoren la legibilidad del código y simplifiquen los ajustes de parámetros. Estos ajustes fundamentales ayudarán a mantener el código y mejorarán el tiempo de ejecución general durante cargas de backtest pesadas o pruebas multisímbolo.

Otro aspecto importante de la mejora es el aprovechamiento más eficaz de los indicadores técnicos. En lugar de calcular ciegamente los indicadores en cada tick o barra, implementaremos una lógica de actualización más inteligente para reducir la carga y el retardo. También experimentaremos con diferentes combinaciones de indicadores para apoyar una mejor toma de decisiones en la lógica del EA. Combinando el refinamiento estructural del código, las funciones que tienen en cuenta el rendimiento y la optimización de los indicadores, podemos mejorar drásticamente tanto la calidad como la velocidad de las pruebas retrospectivas, lo que nos acercará a una estrategia rentable y desplegable de forma consistente.

No quiero ofender a nadie, aunque tengo que decir que este artículo es un fracaso. Aquí arriba está la introducción, con un montón de afirmaciones fuertes y , todo lo cual el autor no logró poner en práctica.

Mi intención inicial era mostrar los problemas con el código, pero son tantos... así que me limitaré al punto 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? ¿Dónde se comprueban los errores? Las entradas se utilizan tal cual sin ninguna comprobación, no se comprueban los stoplevels, no se comprueban los márgenes, no se comprueban las solicitudes de negociación...

      // Comprobar patrón alcista
      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;
      }

¿Rendimiento? ¿Usando iClose/iOpen vela por vela? Estas funciones son las más lentas para manejar datos.

Adicionalmente el getLow(5) parece un bug. No he comprobado más.

No voy a comentar sobre el algoritmo de trading en sí, sólo noté cómo el autor seleccionó convenientemente un corto período en la historia donde el EA da buenos resultados.

Este artículo es muy pobre.