Nueva versión de MetaTrader 5 build 5260: mejoras en Algo Forge y nuevas reglas de herencia en MQL5

En esta versión, hemos continuado la expansión de la biblioteca de álgebra lineal OpenBLAS en MQL5 añadiendo una nueva sección de funciones. Con estas herramientas, los desarrolladores conseguirán un ciclo de transformación completo: desde el preentrenamiento de la matriz hasta el cálculo preciso y estable de su espectro

5 septiembre 2025

Terminal

  1. Corregida la visualización de los ajustes de margen en las especificaciones del instrumento comercial. Antes, al utilizarse el apalancamiento flotante (por ejemplo, según el volumen de las posiciones en la cuenta), en algunos casos la configuración del margen en las especificaciones del contrato se mostraba incorrectamente.
  2. Corregida la clasificación de las órdenes en la pila, si el símbolo permite comerciar con precios negativos. Las solicitudes con precios positivos, negativos y cero ahora se muestran correctamente y en el orden correcto. 
  3. Añadido al manual del terminal el apartado Cómo el simulador descarga los datos históricos En él hemos reunido la información básica necesaria para comprender el trabajo del simulador de estrategias con la historia comercial. El simulador carga siempre un "búfer histórico previo al arranque" para garantizar la estabilidad de los cálculos:
    • D1 y siguientes desde principios del año anterior. Esto ofrece una reserva de al menos 1 año de historia.  Por ejemplo, si la fecha de inicio de la prueba es el 01.03.2023, el simulador descargará los datos del terminal histórico a partir del 01.01.2022. Es decir, 14 meses antes de la fecha de inicio de las pruebas.
    • W1 - 100 barras semanales (~2 años).
    • MN1 - 100 barras mensuales (~8 años).

    Si existen menos datos, el simulador desplazará la fecha de inicio real a la fecha disponible más próxima en la que se cumplan las condiciones.

    Debido a estos requisitos, a veces sucede que las pruebas no empiezan en la fecha especificada, sino en una fecha posterior. Y esto se ve acompañado de un mensaje en el diario del simulador:

    start time changed to 2024.03.15 00:00 to provide data at beginning

MQL5

  1. Añadido 5 nuevos métodos a OpenBLAS: la nueva sección Matrix Balance, que amplía las posibilidades de trabajar con matrices cuadradas. El nuevo conjunto de funciones ofrece:
    • Equilibrado de matrices para mejorar la precisión de los cálculos de valores propios.
    • Recuperación de los vectores propios tras las transformaciones pertinentes.
    • Reducción a la forma de Hessenberg y la descomposición de Schur, incluida la generación de matrices ortogonales.

    Con estas herramientas, los desarrolladores conseguirán un ciclo de transformación completo: desde el preentrenamiento de la matriz hasta el cálculo preciso y estable de su espectro.

    Para ello, se utilizan algoritmos LAPACK de eficacia probada (GEBAL, GEBAK, GEHRD, ORGHR, HSEQR) que garantizan un alto rendimiento y fiabilidad:

    • MatrixBalance equilibra las matrices cuadradas (reales o complejas) usando permutaciones y/o escalado de filas y columnas. Reduce la norma 1, mejorando la precisión del cálculo posterior de los valores/vectores propios (usando como base la función LAPACK GEBAL).
    • EigenVectorsBackward — forma vectores propios (derechos o izquierdos) de la matriz original después de equilibrar, ejecuta la transformación inversa (basada en GEBAK). 
    • ReduceToHessenbergBalanced — convierte la matriz equilibrada a la forma de Hessenberg triangular superior usando una transformación ortogonal (GEHRD).
    • ReflectHessenbergBalancedToQ — genera una matriz ortogonal Q, que es el producto de matrices reflexivas formadas por reducción a la forma de Hessenberg (ORGHR).
    • EigenHessenbergBalancedSchurQ — realiza la descomposición de Schur: calcula los valores propios de la matriz de Hessenberg, así como las matrices T (forma de Schur triangular superior) y Z (matriz vectorial), y de ser necesario, actualiza Q (HSEQR).


  2. Añadidos dos nuevos métodos a la sección Eigen Values. Ambas funciones permiten obtener eficientemente los vectores propios tras la descomposición de Shur y complementan el conjunto completo de herramientas de álgebra lineal en MQL5:

    • EigenVectorsTriangularZ — calcula los vectores propios de una matriz real cuasi-triangular superior o compleja triangular superior (forma de Schur). Utiliza la descomposición A = Q · T · Qᴴ (TREVC). Se caracteriza por su gran precisión.
    • EigenVectorsTriangularZBlocked — variante en bloque del cálculo de vectores propios (TREVC3). Funciona más rápido que EigenVectorsTriangularZ, pero puede resultar menos precisa.


  3. Introducido un cambio importante en la herencia: la regla de method hiding.

    Antes, si una clase o estructura derivada definía un método con el mismo nombre que en la clase básica, se producía la sobrecarga: todas las variantes de los métodos (tanto del ancestro como del descendiente) estaban disponibles en el descendiente. Ahora, los métodos con el mismo nombre en el descendiente ocultan los métodos del ancestro (method hiding).

    Si necesita llamar a un método ancestro oculto, deberá especificar explícitamente el ámbito al llamarlo:
    class Base
      {
    public: 
       void Print(int x)   { ::Print("Base int: ", x); }
       void Print(double y){ ::Print("Base double: ", y); }
      };
    
    class Derived : public Base
      {
    public:
       void Print(string s){ ::Print("Derived string: ", s); }
      };
    
    void OnStart()
      {
       Derived d;
       d.Print("text");    // call of Derived::Print(string)
       d.Print(10);        // ATTENTION! Calling Derived::Print(string) since Base::Print is hidden (inaccessible)
       d.Base::Print(10);  // explicit call to hidden parent method
      }
    Durante algún tiempo, el compilador MQL5 generará una advertencia si un método ancestro oculto es más adecuado según los parámetros de llamada que un método descendiente disponible. El ejemplo para el código anterior es d.Print(10):
    call resolves to 'void Derived::Print(string)' instead of 'void Base::Print(int)' due to new rules of method hiding
       see declaration of function 'Derived::Print'
       see declaration of function 'Base::Print'
    implicit conversion from 'number' to 'string'

  4. Añadido el operador using para recuperar sobrecargas de métodos ancestros.

    Para gestionar el nuevo comportamiento, en MQL5 ha aparecido el operador using. Este permite "atraer" al ámbito de una clase o estructura todas las sobrecargas de métodos del tipo básico:
    class Base
      {
    protected:
       void Print(int x)   { ::Print("Base int: ", x); }
       void Print(double y){ ::Print("Base double: ", y); }
      };
    
    class Derived : public Base
      {
    public:
       void Print(string s){ ::Print("Derived string: ", s); }
       using Base::Print;  // return Print overloads from Base
      };
    
    void OnStart()
      {
       Derived d;
       d.Print("text");   // Derived::Print(string)
       d.Print(42);       // Base::Print(int)
       d.Print(3.14);     // Base::Print(double)
      }
    Si eliminamos using Base::Print;, las llamadas d.Print(42) y d.Print(3.14) no estarán disponibles, solo quedará el método Derived::Print(string)

    Además, en el ejemplo anterior, podemos ver que los métodos protegidos del ancestro ahora están disponibles en el descendiente (protected ha cambiado a public)

    De este modo, los desarrolladores tienen ahora un control más flexible y predecible sobre las jerarquías de las clases y pueden determinar exactamente qué sobrecargas de los métodos del ancestro deben permanecer disponibles en el descendiente.

MetaEditor

  1.  Acelerados los cálculos hash SHA-1 para operaciones Git al trabajar con Algo Forge. El resultado es un aumento de la productividad de más de un 40% en las operaciones masivas.
  2. Corregida la lógica de comprobación de las modificaciones de archivos para operaciones Git. Si solo hemos cambiado la hora de modificación pero el contenido sigue siendo el mismo, el archivo ya no se considerará modificado. Esto eliminará las falsas detecciones y evitará conflictos con el repositorio remoto.


Algo Forge

Publicada la Guía de trabajo con MQL5 Algo Forge. Con ella, aprenderá todas las ventajas clave de Git, sin su complejidad:
  1. almacenamiento seguro de la historia de versiones y la gestión de ramas
  2. experimentación rápida y fusión segura de los cambios,
  3. repositorios propios o bifurcaciones del proyecto de otra persona con un solhttps://www.mql5.com/go?link=https://forge.mql5.io/help/en/guideo clic,
  4. trabajo en equipo transparente en el que se registrará la contribución de todos,
  5. catálogo de proyectos abiertos y la oportunidad de aprender de los demás.


    Clonación de proyectos ajenos
    En forge.mql5.io, vaya al proyecto que desea clonar y ejecute el comando Fork. Rellene el nombre de la bifurcación que está creando con su correspondiente descripción, y guarde luego los cambios:

    Clonación de proyectos

    A continuación, vaya a MetaEditor con la misma cuenta MQL y ejecute el comando (Refresh) en el Navegador.  El proyecto clonado aparecerá en la carpeta Shared projects. Ahora cárguelo desde el portal Algo Forge con el comando Git Clone. Descargará no solo todos los archivos del proyecto, sino también toda la historia de confirmaciones y todas las ramas de ese proyecto. Es decir, podrá seguir trabajando en la bifurcación con toda la historia del proyecto clonado.  

    Comando Git Clone para obtener un proyecto de Algo Forge


Web Terminal

  1. Corregida la visualización de la hora de la sesión de trabajo y de cotización en las especificaciones del símbolo
  2. Corregida la visualización de la configuración de márgenes en las especificaciones del símbolo
  3. Modificada la visualización de las sesiones de los instrumentos comerciales en las especificaciones del símbolo
  4. Añadido soporte para cuentas comerciales de tipo Contest, estas cuentas se muestran en color azul, las Demo, en verde.
  5. Corregida la precisión de los cálculos de márgenes con apalancamiento flotante en algunos casos. 
  6. Corregido el siguiente error al abrir una cuenta nueva: en algunos casos, el botón "Next" para pasar al siguiente paso no funcionaba.
  7. Corregido el error que impedía colocar una orden límite entre los precios de compra y venta en el modo de ejecución bursátil.
  8. Corregido el error de visualización del precio de ejecución de una orden. Tras el envío de la orden, en la ventana se mostrará el resultado de su ejecución: la ejecución con éxito de la operación comercial o el rechazo con la descripción del motivo donde se explica porqué no ha sido ejecutada. En algunos casos, el precio de ejecución aparecía como "0".
  9. Corregido el error que impedía mostrar el botón de cierre rápido de posiciones.

    Botón de cierre de posición

  10. Corregida la visualización de las divisas de las cuentas comerciales en la ventana de selección de la lista de cuentas.