Nueva versión de la plataforma MetaTrader 5 build 5430: gráficos mejorados en el motor Blend2D

 

El viernes 14 de noviembre de 2025 se lanzará la versión actualizada de la plataforma MetaTrader 5.

En esta versión hemos actualizado el núcleo gráfico para renderizar gráficos. Ahora se usa el moderno motor Blend2D en lugar del anticuado GDI. El motor ofrece una representación mucho más rápida y fluida de gráficos e indicadores. Gracias a los modernos algoritmos de renderizado y a la compatibilidad con optimizaciones de hardware, ofrece gráficos nítidos y detallados, un trabajo correcto con la transparencia y una visualización estable en todos los sistemas, incluidas las pantallas de alta resolución.

Nueva versión de MetaTrader 5 build 5430: gráficos mejorados en el motor Blend2D>

Además, hemos ampliado el soporte de la biblioteca de álgebra lineal OpenBLAS en MQL5 agregando unas 20 nuevas funciones para trabajar con matrices y vectores.

Asimismo, en la nueva versión hemos mejorado la versión web de la plataforma: ahora es aún más estable y segura, y existe la posibilidad de cambiar el modo de visualización del volumen en la profundidad de mercado.


MetaTrader 5 Client Terminal

  1. Terminal: Actualizado el núcleo gráfico para la representación de gráficos. Ahora, en lugar del anticuado GDI, se utiliza el moderno motor Blend2D

    Mayor rendimiento
    Blend2D utiliza una arquitectura de renderizado moderna y usa eficientemente procesadores multinúcleo, lo que garantiza un renderizado fluido de gráficos e indicadores incluso con un gran número de objetos en pantalla.

    Aceleración y optimización de hardware para CPU modernas
    Blend2D está optimizado para los modernos conjuntos de instrucciones (SSE, AVX), lo cual aumenta significativamente la velocidad de renderizado en comparación con GDI, que no utiliza estas características.

    Gráficos claros y fluidos
    Con algoritmos avanzados de antialiasing y un manejo preciso del color, Blend2D ofrece líneas más suaves, transiciones más fluidas y gráficos visualmente más limpios, especialmente perceptibles al escalar y trabajar en altas resoluciones (HiDPI, 4K).

    Efectos modernos y transparencia
    Blend2D admite la composición alfa y operaciones avanzadas de color, lo que permite mostrar elementos translúcidos, sombras y otros efectos gráficos avanzados.

    Renderizado unificado y estable
    Blend2D funciona con la misma estabilidad en todos los sistemas, ofreciendo resultados idénticos independientemente de la versión del sistema operativo o de la configuración del controlador de vídeo.


    Ahora para renderizar gráficos se utiliza el nuevo núcleo de gráficos Blend2D


  2. MQL5: Añadidos métodos matriciales que realizan cálculos de álgebra lineal (matriz-vector) BLAS Level 2:

    • BlasL2GeMV — producto de una matriz por un vector.
    • BlasL2GeR — actualización del rango (rango 1).
    • BlasL2GeRC — variante para matrices complejas con acoplamiento.
    • BlasL2SyMV — producto de una matriz simétrica por un vector.
    • BlasL2SyR — actualización de matrices de rango 1.
    • BlasL2SyR2 — actualización de matrices de rango 2.
    • BlasL2HeMV — producto de una matriz hermitiana por un vector.
    • BlasL2HeR — actualización de una matriz hermitiana de rango 1.
    • BlasL2HeR2 — actualización de una matriz hermitiana de rango 2.
    • BlasL2TrMV — producto de una matriz triangular por un vector.

  3. MQL5: Añadidos métodos matriciales que realizan cálculos de álgebra lineal BLAS Level 3 (matriz-matriz):

    • BlasL3GeMM — producto de matrices ordinarias.
    • BlasL3SyMM — producto de matrices donde la matriz A es simétrica.
    • BlasL3HeMM — producto de matrices donde la matriz A es hermitiana.
    • BlasL3TrMM — producto de matrices donde la matriz A es triangular.
    • BlasL3SyRK — actualización de una matriz simétrica de rango k.
    • BlasL3HeRK — actualización de una matriz hermitiana de rango k.
    • BlasL3SyR2K — actualización de una matriz simétrica de rango 2k.
    • BlasL3HeR2K — actualización de una matriz hermitiana de rango k.

  4. MQL5: Corregido un error de WebRequest que, en algunos casos, provocaba la interrupción de la conexión con el host remoto.
  5. MQL5: Corregido un fallo que se producía en raras ocasiones cuando las variables no estaban inicializadas.
  6. MQL5: Corregido un fallo que se producía en raras ocasiones al utilizar la función IntegerToString.
  7. Tester: Corregida la duplicación de eventos personalizados al llamar a EventChartCustom durante las pruebas visuales.
  8. Tester: Corregido el comportamiento de IsStopped al detener las pruebas de forma forzosa.

MetaTrader 5 WebTerminal

  1. Añadida la posibilidad de cambiar el modo de visualización del volumen en la profundidad de mercado. Utilice el botón del panel superior para ver los volúmenes en lotes o unidades.


    Cambie el modo de visualización del volumen en la profundidad de mercado


  2. Corregida el bloqueo al ver la profundidad de mercado en un dispositivo móvil.
  3. Corregida la visualización del precio actual en la ventana de diálogo comercial. Si no se lograba realizar una transacción (por ejemplo, por falta de fondos en la cuenta), junto con el mensaje correspondiente se podía mostrar un precio cero en la ventana de diálogo.
  4. Mayor seguridad en el almacenamiento de datos en el navegador del usuario. 


La actualización estará disponible a través del sistema Live Update.

 

Hola equipo de MetaQuotes, creo que he encontrado un bug respecto al uso del especificador "final".
Comenzaré explicando un breve ejemplo de cómo "ocurre" este bug. Digamos que tengo una clase base CObject con una función virtual Function().
Ahora también crearé otra clase CFigure; esta clase hereda de CObject, sobrescribiendo la función Function() con el especificador final. A este punto, si se crea otra clase heredera de CFigure y se sobrescribe la función Function(), nos debería dar un error de compilación indicando que la función no puede ser sobrescrita, dado que ha sido declarada con el especificador final, y efectivamente da ese error.

El código que se basa en mi idea es el siguiente.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CObject 
 {
public:
                     CObject(void) {}
                    ~CObject(void) {}

  virtual void       Function() { Print("CObject");}
 };

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CFigure : public CObject
 {
public:
                     CFigure(void) {}
                    ~CFigure(void) {}
  void               Function() override final {  Print("CFigure"); }
 };


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CRect : public CFigure
 {
public:
                     CRect(void) {}
                    ~CRect(void) {}
  void               Function() override final { Print("CRect"); }
 };

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
 {
  CObject* ptr = new CRect();
  ptr.Function();
  delete ptr;
  Print(__MQLBUILD__);   
 }
//+------------------------------------------------------------------+

Al tratar de compilar este script, obtuvimos un error de compilación como era de esperarse.

'CFigure::Function' method declared as 'final' cannot be overridden by 'CFigure::Function'      test.mq5        33      22
   see declaration of function 'CFigure::Function'      test.mq5        21      22
1 errors, 0 warnings            1       0

Bueno, el bug en cuestión aparece cuando, en vez de definir el cuerpo de la función CFigure::Function() en el cuerpo de la clase CFigure, la definimos fuera de esta.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CObject
 {
public:
                     CObject(void) {}
                    ~CObject(void) {}

  virtual void       Function() { Print("CObject");}
 };

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CFigure : public CObject
 {
public:
                     CFigure(void) {}
                    ~CFigure(void) {}
  void               Function() override final;
 };

//+------------------------------------------------------------------+
void CFigure::Function(void)
 {
  Print("CFigure");
 }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CRect : public CFigure
 {
public:
                     CRect(void) {}
                    ~CRect(void) {}
  void               Function() override final { Print("CRect"); }
 };

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
 {
  CObject* ptr = new CRect();
  ptr.Function();
  delete ptr;
  Print(__MQLBUILD__);
 }
//+------------------------------------------------------------------+

Al compilar el script, sorprendentemente no obtenemos errores.

code generated                  0
0 errors, 0 warnings, 511 msec elapsed, cpu='X64 Regular'                       0

Ahora, ejecutado el script test.mq5, como output en la sección Experts obtenemos esto.

2025.12.21 20:05:58.339 test (USDCAD,M15)       CRect
2025.12.21 20:05:58.339 test (USDCAD,M15)       5430

Y esto también es un error, dado que debería imprimirse CFigure si se respeta el especificador final, pero no.

Debido a lo anterior, agradecería al equipo de MetaQuotes si pudiera revisar este bug y considerar una posible corrección en futuras builds.

 
Niquel Mendoza # :

Hola equipo de MetaQuotes, creo que he encontrado un bug respecto al uso del especificador "final" .

Confirmo el error y lo informé a MQ.