Nueva versión de MetaTrader 5 build 5260: mejoras en Algo Forge, extensión OpenBLAS y nuevas reglas de herencia en MQL5
Foro sobre el trading, sistemas de trading automáticos y simulación de estrategias comerciales.
Eventos del calendario con mas de 1 semana no cargan sus valores actuales.
Niquel Mendoza, 2025.09.07 17:09
Hola a todos,
Estoy trabajando con un EA de noticias que requiere del historial de eventos económicos para poder simularlos en el probador de estrategias. Durante las pruebas, noté resultados extraños, como la aparición del valor LONG_MIN.
Esto me recordó que los miembros de la estructura MqlCalendarValue, como actual_value entre otros miembros, están establecidos con el valor LONG_MIN cuando dicho valor no está definido. Por esa razón revisé el archivo CSV desde el cual el bot lee los eventos y confirmé que, efectivamente, algunos registros contenían ese valor.
Al consultar directamente en el calendario, observé que ciertos eventos aparecen con la marca ND (No Definido), por ejemplo: "dallas-fed-services-revenues" de USA. Sin embargo, al verificar en otras fuentes, encontré que este evento sí cuenta con un valor actualizado.
Todo indica que se trata de un error reciente.
Alguien sabe si este problema se podrá solucionar a futuro?
Foro sobre el trading, sistemas de trading automáticos y simulación de estrategias comerciales.
Niquel Mendoza, 2025.09.06 13:12
Hola,
Con la última versión build 5260 de MT5, un código que compilaba correctamente en versiones anteriores ahora ya no compila debido a los nuevos cambios en las reglas de ocultación de funciones.
El código de ejemplo es el siguiente:
//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class A { protected: int arr[]; public: void Init(); int operator[](const int index) { return arr[index]; } }; //+------------------------------------------------------------------+ void A::Init() { ArrayResize(arr, 10); MathSrand(GetTickCount()); for(int i = 0; i < 10; i++) { arr[i] = MathRand(); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class B : public A { public: using A::operator[]; int operator[](const string name) { return name == "Hello" ? arr[0] : arr[2]; } }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ enum ENUM_TYPE_SELECT { SELECT_0 = 0, SELECT_1 = 1 }; //+------------------------------------------------------------------+ class C : public B { public: using B::operator[]; // int operator[](const ENUM_TYPE_SELECT type) { return arr[type]; } }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { C instance; instance.Init(); const int val = instance[0]; Print(val); } //+------------------------------------------------------------------+
Obviamente, este código es una recreación simplificada de lo que realmente tengo implementado (en mi caso está adaptado a una lógica de sesiones).
Con esta nueva actualización, el operator[] definido en la clase C oculta a los demás operadores heredados. Para evitar este comportamiento utilicé "using", con el objetivo de "re-exponer" los operadores de las clases base y poder usarlos en la clase C.
Sin embargo, al momento de llamar a instance[0] (que en teoría debería invocar a operator[](const int index)), aparece el siguiente error:
const int val = instance[0]; // function must have a body mc.mq5 72 27
Por lo que entiendo, el compilador interpreta que el operador no tiene implementación y solo está declarado, cuando en realidad los tres operadores tienen cuerpo definido.
¿A alguien más le ha sucedido esto con la build 5260?
¿Alguna sugerencia para resolverlo?

- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
El viernes 5 de septiembre de 2025 se lanzará una versión actualizada de la plataforma MetaTrader 5.
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.
Además, MQL5 refuerza el control sobre la herencia y la sobrecarga de métodos en las clases y estructuras. El nuevo comportamiento de la herencia y las restricciones en el compilador evitarán posibles errores de aplicación.
También hemos mejorado el trabajo con archivos en los proyectos de Algo Forge: hemos acelerado los cálculos hash y corregido las falsas visualizaciones de los cambios en los archivos.
Asimismo, hemos publicado en el portal una guía de trabajo con MQL5 Algo Forge. En ella se muestran de forma accesible todas las características y ventajas del sistema Git para tráders algorítmicos: búsqueda y seguimiento de proyectos, suscripciones a publicaciones interesantes, trabajo en grupo y clonación de repositorios.
MetaTrader 5 Client Terminal
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:
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: 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):
see declaration of function 'Derived::Print'
see declaration of function 'Base::Print'
implicit conversion from 'number' to 'string'
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:
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.
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:
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.
Web Terminal
La actualización estará disponible a través del sistema Live Update.