¿Qué novedades tiene MetaTrader 5?

Historial de actualizaciones de las plataformas desktop, móvil y web

29 septiembre 2023
MetaTrader 5 build 4000: Mejoras en el informe comercial y el terminal web

Terminal

  1. Añadida la visualización del aumento mensual de dinero en el nuevo informe comercial. Para ver los indicadores, vaya al informe "Summary" y seleccione el modo "Balance".



  2. Corregida y mejorada la visualización del nuevo informe comercial.
  3. ONNX Runtime se ha actualizado a la versión 1.16. Los detalles de la versión están disponibles en GitHub.
  4. Actualizadas las traducciones de la interfaz de usuario.

Terminal web MetaTrader 5

  1. Corregida la visualización de las ventanas de diálogo de cambio de contraseña y apertura de cuenta.
  2. Solucionado el error que se producía al mostrar el Stop Loss y el Take Profit en la historia tras la modificación de estos.
  3. Añadida la capacidad de desplazarse por la ventana de diálogo sobre la advertencia de riesgos.
  4. Actualizadas las traducciones de la interfaz de usuario.
  5. Introducidas varias mejoras y correcciones.
21 septiembre 2023
MetaTrader 5 build 3980: Mejoras y correcciones

Terminal

  1. Mejorado el nuevo informe comercial. Corregida la visualización del valor total de los swaps, así como el gráfico de beneficios de los símbolos.
  2. Optimizadas las páginas de recarga y retirada. Encontrará más información sobre la nueva integración de la plataforma con los sistemas de pago en nuestra noticia anterior sobre el build 3950.
  3. Optimizado el recálculo de transacciones financieras en toda la plataforma, incluido el simulador de estrategias. Ahora los indicadores de beneficio, márgenes y muchos otros parámetros se calculan más rápidamente.
  4. Actualizadas las traducciones de la interfaz de usuario.

MQL5

  1. Añadidos los métodos Conjugate para los tipos complex, vector<complex> y matrix<complex>. Estos realizan el conjugado para números complejos.
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       complex a=1+1i;
       complex b=a.Conjugate();
       Print(a, " ", b);
       /*
       (1,1) (1,-1)
       */
    
       vectorc va= {0.1+0.1i, 0.2+0.2i, 0.3+0.3i};
       vectorc vb=va.Conjugate();
       Print(va, " ", vb);
       /*
       [(0.1,0.1),(0.2,0.2),(0.3,0.3)]  [(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]
       */
    
       matrixc ma(2, 3);
       ma.Row(va, 0);
       ma.Row(vb, 1);
       matrixc mb=ma.Conjugate();
       Print(ma);
       Print(mb);
       /*
       [[(0.1,0.1),(0.2,0.2),(0.3,0.3)]
        [(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]]
    
       [[(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]
        [(0.1,0.1),(0.2,0.2),(0.3,0.3)]]
       */
       
       ma=mb.Transpose().Conjugate();
       Print(ma);
       /*
       [[(0.1,0.1),(0.1,-0.1)]
        [(0.2,0.2),(0.2,-0.2)]
        [(0.3,0.3),(0.3,-0.3)]]
       */
      }
  2. Añadido el procesamiento de la muestra del modelo ONNX del tipo Sequence of maps.

    Para los modelos ONNX que ofrecen secuencias Map en la capa de salida (ONNX_TYPE_SEQUENCE of ONNX_TYPE_MAP), se deberá transmitir un array de estructuras dinámico o fijo como parámetro de salida. Los dos primeros campos de esta estructura deberán coincidir con los tipos de clave y valor ONNX_TYPE_MAP y ser arrays fijos o dinámicos.

    Vamos a analizar el modelo iris.onnx, creado mediante el siguiente script de Python:
    from sys import argv
    data_path=argv[0]
    last_index=data_path.rfind("\\")+1
    data_path=data_path[0:last_index]
    
    from sklearn.datasets import load_iris
    iris_dataset = load_iris()
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0)
    from sklearn.neighbors import KNeighborsClassifier
    knn = KNeighborsClassifier(n_neighbors=1)
    knn.fit(X_train, y_train)
    
    #  Convert into ONNX format
    from skl2onnx import convert_sklearn
    from skl2onnx.common.data_types import FloatTensorType
    initial_type = [('float_input', FloatTensorType([None, 4]))]
    onx = convert_sklearn(knn, initial_types=initial_type)
    path = data_path+"iris.onnx"
    with open(path, "wb") as f:
        f.write(onx.SerializeToString())
    Abra el archivo onnx creado en MetaEditor:

    Visualización del modelo ONNX en el MetaEditor


    Como salida "output_probability" se muestra una secuencia de Map, cuya clave es de tipo INT64 (que se corresponde con el tipo long del lenguaje MQL5) y el valor de tipo float. Para obtener los datos de esta salida, declararemos la siguiente estructura:
    struct MyMap
      {
       long              key[];
       float             value[];
      };
    Aquí hemos utilizado arrays dinámicos con los tipos correspondientes. En este caso, podemos usar arrays fijos, ya que para este modelo Map siempre contiene 3 pares clave+valor.

    Como la secuencia se devuelve desde Map, se deberá transmitir un array de dichas estructuras como parámetro para obtener los datos de la salida output_probability, dinámica o fija, según las propiedades del modelo en particular. Ejemplo:
    //--- declaramos un array para recibir los datos de la capa de salida output_probability
    MyMap output_probability[];
    
    ...
    
    //--- ejecución del modelo
    OnnxRun(modelo,ONNX_DEBUG_LOGS,float_input,output_label,output_probability);

MetaEditor

  1. Corregida la visualización del tipo de parámetro de salida en el visor de modelos ONNX.

MetaTrader 5 Web Terminal build 3980

  1. Añadida al menú principal la sección de contacto con el bróker.
  2. Añadido el procesamiento del error de autorización con la ayuda del certificado SSL. Este tipo de autorización no es compatible con el terminal web, en su lugar se puede activar la autorización usando contraseñas de un solo uso.
  3. Corregido el enlace para descargar la versión de escritorio de la plataforma en el menú principal.
  4. Modificada la ventana de diálogo de gestión de cuentas. Si el bróker no dispone de cuentas demo o reales, la opción correspondiente del menú estará oculta.
14 septiembre 2023
MetaTrader 5 build 3950: Retirada/depósito en el terminal e informe comercial actualizado

Terminal

  1. Añadido soporte para operaciones de balance para la retirada y el depósito en una cuenta comercial directamente en el terminal del cliente.

    Hemos añadido la integración de los sistemas de pago más populares directamente en la plataforma MetaTrader 5, lo cual permite a los brókeres ofrecer a sus tráders un nuevo nivel de servicio. Al depositar o recargar la cuenta, simplemente tendrá que seleccionar el método más adecuado para usted y completar la transacción. Para mayor comodidad de los tráders, estos podrán guardar las tarjetas seleccionadas para no introducir sus datos cada vez. Al mismo tiempo, el bróker no almacenará ningún dato de pago ni número de tarjeta. Todos los datos introducidos por el usuario se enviarán para su verificación a través de canales seguros al sistema de pago que haya seleccionado para realizar el mismo.

    La nueva funcionalidad ofrece a los tráders la capacidad de administrar sus fondos con un solo clic sin salir del terminal de cliente.



  2. El informe de la historia de transacciones se ha rediseñado y actualizado por completo, ahora resulta más visual. Hemos revisado nuestro enfoque de la presentación de la información y hemos convertido los áridos informes estadísticos en gráficos y cuadros interactivos. Aún no hemos finalizado el trabajo, pero ya se pueden apreciar los cambios.

    Para ver las estadísticas comerciales, pulse "Informes" en el menú "Ver".




    El informe se divide en cuatro pestañas, cada una de las cuales contiene información añadida en su propia sección:

  3. Añadido el uso de instrucciones AVX2 cuando el procesador lo admita. Esto permitirá un uso más eficiente de las capacidades del procesador en el que se inicie el terminal. Ahora, al realizar la instalación o actualización, el propio terminal determinará la arquitectura del procesador e instalará la versión que resulte óptima para este procesador. Al inicio, el terminal escribirá un mensaje (AVX/AVX2) en el diario de registro, en el que mostrará para qué conjunto de instrucciones está diseñado el terminal.
    Terminal	MetaTrader 5 x64 build 3914 started for MetaQuotes Software Corp.
    Terminal	Windows 10 build 19045, 20 x Intel Xeon  E5-2630 v4 @ 2.20GHz, AVX, 41 / 63 Gb memory, 58 / 280 Gb disk, UAC, GMT+2
    

    Advanced Vector Extensions (AVX) — extensión del conjunto de instrucciones x86 para microprocesadores Intel y AMD, propuesto en 2008. Un mayor desarrollo dio como resultado el AVX2 y el AVX-512 (2013).

  4. Además de las dos versiones de los terminales MetaTrader 5 en X64 y AVX, hemos lanzado una tercera versión del terminal de escritorio compilada con soporte directo para los comandos AVX2. Al mismo tiempo, los modelos ONNX ahora también podrán funcionar con soporte para comandos AVX2.
  5. Añadida la visualización de enlaces a los documentos normativos necesarios del bróker. Ahora podrá obtener toda la información legal necesaria del bróker directamente en el terminal de cliente en el menú Help - Terms & Conditions.




  6. Corregida la autorización 2FA al utilizar de forma adicional la autorización ampliada con uso de certificados.
  7. Corregida la visualización de mensajes de correo interno al trabajar en MacOS.
  8. Corregida la visualización de la ventana Señales al trabajar en Wine.
  9. Publicados nuevos instaladores de terminales MT4/MT5 para Linux.
  10. Añadidos al menú Help los comandos para ir a las páginas de descarga de las versiones Linux y Mac del terminal. Para mayor comodidad de los tráders, hemos creado una sección especial en el sitio web donde se presentan las variantes del terminal comercial para todas las plataformas y para comerciar en el navegador.



  11. Corregida la inserción de imágenes en mensajes de correo interno.
  12. Publicados nuevos instaladores para el terminal MetaTrader 5 para Mac compatible con procesadores M1/M2. En relación con la transición a Wine 8.0.1, le recomendamos encarecidamente que elimine las versiones antiguas e instale las nuevas. Al usar versiones anteriores de Wine <8.0.0, se muestra un mensaje en el diario de registro del terminal indicando la necesidad de actualizar.
  13. Añadida la muestra de "VPS Hosting Speed Up" en el menú de escaneo de la red con el ping hasta su servidor comercial. Esto le permitirá ver claramente cómo disminuirá la latencia de su red alquilando un VPS en línea.



  14. Aumentada la seguridad de los requisitos para la complejidad mínima de contraseña, a saber:

    • la longitud de la contraseña será de al menos 8 caracteres
    • la contraseña deberá contener como mínimo 1 carácter en mayúscula y minúscula, 1 dígito y 1 carácter especial.

  15. Enlaces clicables en los registros del terminal. Ahora, al hacer doble clic en las líneas con enlaces https, se dará una transición al navegador con la apertura de enlaces.
  16. Corregida la búsqueda de instrumentos comerciales en la Observación del Mercado. Ahora el símbolo se buscará primero según el nombre y luego según el resto de campos: descripción, ISIN, etc.
  17. Corregida la contabilización de los beneficios de las transacciones al calcular el balance en los informes de la historia de transacciones de las cuentas. En algunos casos, el cálculo no tenía en cuenta el tipo de instrumento.

VPS Hosting

  1. Ahora puede enviar y ejecutar programas EX5 compilados para el conjunto de comandos x64/AVX/AVX2. Los programas con AVX512 en el VPS integrado no son compatibles.
  2. El número de localizaciones para alquilar un VPS integrado se ha incrementado a 27. Ahora la selección del servidor más cercano se ha vuelto aún más amplia.

MQL5

  1. Añadido el control de los ajustes de compilación, incluida la selección de conjuntos de instrucciones de procesador ampliadas: AVX, AVX2, AVX512, FMA3.

    Los procesadores modernos disponen de un conjunto de instrucciones ampliadas que aceleran significativamente los cálculos matemáticos, pero la gran mayoría de los programas modernos no usan dichas funciones. Hemos añadido el soporte para estas instrucciones al compilador MQL5, lo cual permitirá generar un código más eficiente y rápido.

    También hemos añadido la posibilidad de seleccionar con qué tipo de instrucciones se compilará un programa MQL5. Podrá especificar tanto ajustes generales para programas individuales en los Ajustes del MetaEditor como ajustes personales para proyectos:



  2. Las enumeraciones ENUM_AVERAGE_MODE y ENUM_CLASSIFICATION_METRIC se han añadido a los métodos de matrices y vectores.
  3. Añadido el método Set para vectores.
  4. Rediseñada la inicialización de OpenCL: ahora se inicializará con el primer uso real y no al cargar un programa MQL5 que contenga funciones OpenCL.
  5. Corregido el error al llamar a la función SocketIsConnected.
  6. Corregido el retraso al llamar al método OnDeinit al descargar indicadores personalizados.
  7. Corregido el error del compilador que provocaba que la longitud de la cadena en la propiedad Indicator_label se calculase incorrectamente, lo cual provocaba una visualización incorrecta de las descripciones emergentes para los objetos gráficos.
  8. Corregido el uso de comentarios de varias líneas en el cuerpo de la macro. Ejemplo de una macro en la que sucedía un error:
    #define MACRO1 /*
    #define MACRO2 */
    void OnStart()
    {
    #ifdef MACRO2
        Print( 2 );
    #else
        Print( 1 );
    #endif
    }
  9. Corregido el orden de los parámetros de la función MathAtan2. El orden ahora se corresponde con la función similar en C++.
  10. Añadido el nuevo valor TERMINAL_CPU_ARCHITECTURE a la enumeración ENUM_TERMINAL_INFO_STRING . También se ha añadido la macro __CPU_ARCHITECTURE__, que obtiene la arquitectura de la CPU de la computadora en la que se está ejecutando el terminal. Ejemplo de uso:
    void OnStart()
      {
       Print("CPU name:         ",TerminalInfoString(TERMINAL_CPU_NAME));
       Print("CPU cores:        ",TerminalInfoInteger(TERMINAL_CPU_CORES));
       Print("CPU architecture: ",TerminalInfoString(TERMINAL_CPU_ARCHITECTURE));  
       Print("");
       Print("EX5 architecture: ",__CPU_ARCHITECTURE__);                            
      }
    
    CPU name:         12th Gen Intel Core i9-12900K
    CPU cores:        24
    CPU architecture: AVX2 + FMA3
    
    EX5 architecture: AVX

  11. Cambiado el comportamiento del modificador extern. Ahora la declaración de una variable con el modificador extern se considerará una pre-declaración de variable.

    Nuevas restricciones:
    1. La pre-declaración de una variable no deberá contener una inicialización. Por ejemplo, al compilar el siguiente código, obtendremos el error "X - extern variable initialization is not allowed":
      extern int X=0;
      
      void OnStart()
        {
        }

    2. La variable extern deberá declararse en el programa sin la palabra clave extern. Por ejemplo, al compilar el siguiente código, obtendremos el error "unresolved extern variable X":
      extern int X;
      
      void OnStart()
        {
        }

    3. Al utilizar extern, será importante seguir el orden de inicialización, ya que se podrá obtener el acceso a una variable antes de inicializar esta. Por ejemplo, el siguiente código mostrará en el diario de registro "Y=0 X=5" porque la inicialización de la variable Y se produce antes de la inicialización de la variable X:
      extern int X;
      int        Y=X;
      
      void OnStart(void)
        {
         Print("Y=",Y," X=",X);
        }
        
      int X=_Digits;

MetaEditor

  1. Añadido el uso de instrucciones AVX2 cuando el procesador lo admita.
  2. Mejorada la visualización de variables locales al realizar la depuración.

Simulador

  1. Añadido el uso de instrucciones AVX2 cuando resultan compatibles con el procesador.
  2. Corregido el error que en algunos casos provocaba un bloqueo durante la compilación.
  3. Actualizadas las traducciones de la interfaz de usuario.

Correcciones de crash logs.


MetaTrader 5 Web Terminal build 3950

  1. Añadida la visualización del precio Ask a la configuración del gráfico.



  2. Acelerada la carga inicial del terminal.
  3. Añadida la posibilidad de cambiar la contraseña.
  4. Añadida la posibilidad de eliminar y guardar la contraseña.
  5. Añadido un periodo personalizado para mostrar la historia comercial.
  6. Corregido el error durante el cambio forzado de contraseña.
  7. Corregido el cálculo de diff, la distancia entre el precio de apertura y los niveles TP/SL.



  8. Corregido el error de interrupción de los ticks al cerrar todas las órdenes/transacciones.
  9. Corregida la visualización de eventos del calendario económico: en algunos casos, estos no se mostraban en el gráfico, a pesar de que la opción estaba habilitada.
  10. Corregido el error cuando los indicadores se reiniciaban al cambiar el símbolo en el gráfico.
  11. Corregido el error en la forma de abrir una cuenta real al confirmar el teléfono/correo electrónico.
  12. Traducciones añadidas y corregidas.
8 junio 2023
MetaTrader 5 build 3800: órdenes Book or Cancel, ayuda de IA al escribir código y soporte ampliado de ONNX

Terminal

  1. Añadido el soporte para la nueva política de ejecución de órdenes: Pasiva / Book or Cancel (BOC).



    La política BOC implica que la orden solo se puede colocar en la profundidad de mercado. Si la orden puede ejecutarse inmediatamente tras su colocación, se retirará. De hecho, con esta política, se garantiza que el precio de la orden colocada sea peor que el del mercado actual. El BOC se utiliza para aplicar el comercio pasivo, de forma que se garantice que la orden no se ejecute inmediatamente tras ser colocada y no afecte a la liquidez actual. Solo tiene soporte para órdenes límite y stop límite, y solo en el modo de ejecución bursátil.

    La disponibilidad de la nueva política de ejecución de instrumentos dependerá de su bróker.

  2. La plataforma comienza a usar el componente Microsoft Edge WebView2 para mostrar páginas HTML.

    En comparación con el MSHTML, ya obsoleto, el nuevo componente amplía enormemente las posibilidades de muestra de contenido web, ofreciendo acceso a tecnologías modernas. La transición a WebView2 mejorará el aspecto de algunas secciones de la plataforma, aumentará su rendimiento y creará interfaces más receptivas. En concreto, esto afectará a las secciones "Mercado", "Señales" y "VPS".
    El soporte completo para WebView2 ha aparecido solo en Windows 10. Recomendamos encarecidamente a todos los usuarios actualizar a las últimas versiones del sistema operativo siempre que sea posible. Al trabajar en Windows 7 y Wine, la plataforma seguirá utilizando el componente MSHTML obsoleto y las nuevas características no estarán disponibles en ellos. También le recomendamos con insistencia que instale todas las actualizaciones disponibles del sistema operativo. En estos momentos, la versión mínima recomendada es Windows 10 21H2 (compilación 19044, noviembre de 2021).

  3. Mejorado el sistema de seguridad en el Mercado. Ahora, para poder iniciar el producto, el usuario deberá estar autorizado en la plataforma con la cuenta MQL5 con la que adquirió el producto. La cuenta deberá aparecer en la sección "Servicio \ Ajustes \ Comunidad":



    Si no se especifica una cuenta o se indica una cuenta no válida, el producto no se iniciará y aparecerá un mensaje similar al siguiente en el registro de la plataforma:
    'ProductName' requires active MQL5 account in Tools->Options->Community
  4. Añadido el comando "Visión general" al menú contextual de la sección de la historia. Le permite abrir un informe comercial en la cuenta:



  5. Corregidos los errores de visualización de la ventana de diálogo de autenticación de dos factores. Si el terminal tenía varias cuentas con el mismo número para diferentes brókeres, era posible que el campo para ingresar la contraseña de un solo uso no se mostrara en el formulario para conectarse.
  6. Acelerada la representación de indicadores con el estilo de visualización DRAW_COLOR_CANDLES.
  7. Corregidos errores en la creación del informe comercial. En algunos casos, los valores del beneficio y la equidad en los gráficos podían mostrarse incorrectamente.
  8. Añadida la visualización del indicador "Costes" en el informe comercial. Muestra la suma de los costes de la transacción en relación con el precio promedio actual del instrumento (mid-point spread cost). De hecho, esta es la cantidad que el tráder pierde en el spread al comerciar. La disponibilidad de este indicador dependerá del bróker.
  9. Actualizadas las traducciones de la interfaz de usuario.
  10. Mejorada la estabilidad al trabajar con Wine, especialmente en sistemas macOS. Le recomendamos eliminar por completo los terminales antiguos e instalarlos de nuevo:


  11. Acelerada la instalación y descarga de actualizaciones; también se ha mejorado el registro de disponibilidad de AVX en la computadora del usuario al elegir un kit de distribución.
  12. Habilitado el soporte para TLS 1.3 en protocolos web. TLS 1.0 está deshabilitado, ya que está obsoleto y resulta inseguro.
  13. Corregida la contabilización de la comisión de agente en los informes de la historia comercial. Las operaciones correspondientes no podían tenerse en cuenta al calcular el beneficio final.
  14. Corregido el error que impedía cambiar el servidor en la ventana de diálogo de conexión a la cuenta. El problema se producía cuando en el terminal había varias cuentas con el mismo número en distintos brókeres.
Los instaladores están siendo migrados para trabajar solo con versiones de 64 bits de la plataforma. Finaliza el soporte para las versiones de 32 bits. Las versiones de 32 bits de la plataforma previamente instaladas funcionarán hasta el 1 de enero de 2024.

MQL5

  1. Añadido el nuevo valor STAT_COMPLEX_CRITERION a la enumeración ENUM_STATISTICS. Esta permite obtener el valor del criterio complejocalculado como resultado de la optimización.
  2. Mejorado el método RegressionMetric, utilizado para calcular la métrica de regresión según la matriz o el vector transmitido. Añadidos los parámetros vector_true y matrix_true para transmitir los valores verdaderos que evalúan la calidad de los datos predichos.
    double vector::RegressionMetric(
       const vector& vector_true,            // valores verdaderos
       const ENUM_REGRESSION_METRIC  metric  // métrica
       );
     
    double matrix::RegressionMetric(
       const matrix& matrix_true,            // valores verdaderos
       const ENUM_REGRESSION_METRIC metric   // métrica
       );
     
    vector matrix::RegressionMetric(
       const matrix& matrix_true,            // valores verdaderos
       const ENUM_REGRESSION_METRIC metric,  // métrica
       const int                      axis   // eje
       );
  3. Añadido el método LinearRegression. Este retorna un vector/matriz con los valores de regresión lineal calculados para el vector/matriz transmitido.
    vector vector::LinearRegression();
     
    matrix matrix::LinearRegression(
       ENUM_MATRIX_AXIS axis=AXIS_NONE       // eje a lo largo del cual se calcula la regresión 
       );
    Ejemplo:
    vector vector_a;
    //--- rellenamos el vector con los precios
    vector_a.CopyRates(_Symbol,_Period,COPY_RATES_CLOSE,1,100);
    //--- obtenemos la regresión lineal
    vector vector_r=vector_a.LinearRegression();
    Visualización del resultado en forma de gráfico:




  4. Añadido el método HasNan que retorna el número de valores NaN en una matriz/vector.
    ulong vector::HasNan();
    ulong matrix::HasNan();
    Los métodos Compare y CompareByDigits, al comparar un par de elementos que tienen valores NaN, tratan estos elementos como iguales, mientras que con una comparación normal de números de coma flotante, NaN != NaN.

  5. Modificada la estructura OnnxTypeInfo, utilizada para trabajar con modelos ONNX:

    struct OnnxTypeInfo
      {
       ENUM_ONNX_TYPE       type;            // tipo de parámetro
       OnnxTensorTypeInfo   tensor;          // descripción del tensor
       OnnxMapTypeInfo      map;             // descripción del mapa
       OnnxSequenceTypeInfo sequence;        // descripción de la secuencia
      };

    Ahora el tipo de datos se especifica en ella usando nuevas subestructuras:

    • OnnxTensorTypeInfo - tensor
    • OnnxMapTypeInfo - mapa
    • OnnxSequenceTypeInfo - secuencia

    struct OnnxTensorTypeInfo
      {
       ENUM_ONNX_DATATYPE   data_type;       // tipo de datos en el tensor
       long                 dimensions[];    // número de elementos
      };
    
    struct OnnxMapTypeInfo
      {
       ENUM_ONNX_DATA_TYPE  key_type;        // tipo de clave
       OnnxTypeInfo         type_info;       // tipo de valor
      };
    
    struct OnnxSequenceTypeInfo
      {
       OnnxTypeInfo         type_info;       // tipo de datos en la secuencia
      };
    Dependiendo de OnnxTypeInfo::type (ONNX_TYPE_TENSOR, ONNX_TYPE_MAP o ONNX_TYPE_SEQUENCE) se rellenará la subestructura correspondiente.

  6. Mejorada la compatibilidad con los modelos ONNX (Open Neural Network Exchange).
  7. Añadidos los métodos CopyIndicatorBuffer, que permiten obtener los datos del búfer de indicador en un vector.
    bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,ulong start_pos,ulong count);
    bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,datetime start_time,ulong count);
    bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,datetime start_time,datetime stop_time);
  8. Corregido el trabajo con arrays con dos o más dimensiones en los métodos FrameAdd y FrameNext.
  9. Corregido el funcionamiento del método CRedBlackTree::Remove en la biblioteca estándar.
  10. Se han realizado correcciones en la biblioteca de lógica difusa Fuzzy.

MetaEditor

  1. Añadida la integración con Copilot, una herramienta avanzada para completar código automáticamente. Su funcionamiento se basa en modelos OpenAI. Usted puede introducir un comentario o parte de una función, enviar una solicitud (prompt), la red neuronal la analiza y le ofrece opciones de código para implementar su idea.




    Dependiendo del tipo de archivo en el que esté trabajando, la cadena "MQL5 language", "Python language" o "C++ language". Entonces la red neuronal le ofrecerá el resultado en el lenguaje deseado.

    Actualmente, Copilot es gratuito y no es necesario activarlo por separado. Existen varias opciones disponibles en Herramientas \ Ajustes \ Copilot:




    Ajustes de pago:

    • Use una cuenta MQL5: este modo es actualmente gratuito. Podrá pagar la suscripción más tarde directamente desde el balance de su cuenta MQL5.
    • Use una clave OpenAI: si ya ha pagado una suscripción y tiene una clave, podrá usarla.

    Configuración de solicitudes:

    • Modelo — red neuronal que procesará sus solicitudes. Actualmente están disponibles text-davinci-003 y gpt-3.5-turbo. El soporte para gpt-4 se añadirá más adelante.
    • Máximo de tokens — número de unidades de texto que el modelo puede devolver en respuesta a un prompt.
    • Variabilidad — influye en lo estrictamente que la red neuronal se ceñirá al prompt. Cuanto mayor sea el valor, más aleatorio puede ser el resultado. En los modelos OpenAI, se corresponde con el parámetro temperature.

  2. Añadida la capacidad de ver las propiedades de los modelos ONNX.

    Ahora, podrá ver directamente en el editor el contenido de un archivo *.onnx de forma cómoda. Para ver qué aspecto tiene, busque el proyecto ONNX.Price.Prediction en "Herramientas \ Proyectos públicos" y luego clique en "Unirse" en el menú contextual. El proyecto se descargará en su computadora y aparecerá en el Navegador:



  3. Añadida la capacidad de visualizar modelos de aprendizaje automático y redes neuronales a través de Netron. Este visor es compatible con muchos modelos populares: ONNX, TensorFlow Lite, Caffe, Keras, ncnn y otros.

    Para ver un modelo, seleccione su archivo en el Navegador y clique en "Abrir en Netron". Si esta utilidad aún no ha sido instalada, se abrirá su página en GitHub, desde donde podrá descargar el archivo de instalación para su sistema operativo. Por ejemplo, Netron-Setup-XXXexe es para Windows. Después de instalar el programa, el modelo se abrirá directamente para verlo desde el Navegador.


    Formatos compatibles:

    • armnn, caffemodel, circle, ckpt, cmf, dlc, dnn, h5, har, hd5, hdf5, hn, keras, kmodel,
    • lite, mar, meta, mge, mlmodel, mlnet, mlpackage, mnn, model, nb, ngf, nn, nnp,
    • om, onnx, ort, paddle, param, pb, pbtxt, pdiparams, pdmodel, pdopt, pdparams, prototxt, pt, pth, ptl,
    • rknn, t7, tfl, tflite, tmfile, tm, tnnproto, torchscript, uff, xmodel

  4. Actualizadas las traducciones de la interfaz de usuario.

Simulador

  1. Corregido el cálculo del indicador "Transacción perdedora media" en el informe sobre la simulación. Antes, las transacciones de entrada podían tenerse en cuenta erróneamente en el cálculo si se cobraba una comisión por ellas.
  2. Mejorada la configuración de comisiones personalizadas en el simulador de estrategias. Para establecer un símbolo, ahora bastará con especificar solo su nombre, y no la ruta completa.
  3. Actualizados los iconos en el simulador de estrategias. Las nuevas metáforas y el aspecto moderno le facilitarán la percepción de la información.

Correcciones de crash logs.

Web Terminal

  1. Mejorada la sección de la historia comercial:

    • Añadida la visualización de operaciones de balance en la historia comercial: depósitos y retiradas, comisiones, correcciones, etc.
    • Añadida la visualización de los indicadores totales en la historia comercial: balance, beneficio, comisión, depósitos, retiradas, número de órdenes, etc.
    • Añadida la capacidad de clasificar operaciones y filtrar la historia según la profundidad en la versión móvil




  2. Complementada la especificación del contrato de los instrumentos. Ahora también muestra el límite del volumen, el tamaño y el coste del tick, el margen inicial y el cubierto.
  3. Esquemas de color mejorados:

    • En el gráfico, las órdenes pendientes ahora se muestran en gris, mientras que las posiciones están coloreadas según la dirección: rojo para la venta, azul para la compra. Si hay una gran cantidad de operaciones, el gráfico no se verá sobrecargado.
    • Al ver/editar una posición, solo se resaltarán esta y sus niveles: todas las demás posiciones y órdenes se volverán grises, y sus niveles se ocultarán de la escala de precios. El trabajo con las operaciones en el gráfico ahora será más cómodo.
    • Los Stop Loss ahora se muestran en color naranja en lugar de rojo, para que no se confundan con las posiciones de venta.
    • Se han mejorado los iconos que muestran los momentos de cierre de posición en el gráfico. Si la posición se cierra por un Take Profit, el ícono será verde, si se cierra por un Stop Loss, será rojo.

  4. Añadida la traducción de la interfaz al árabe, búlgaro, vietnamita, griego, indonesio, malayo, holandés, persa, polaco, tailandés, ucraniano e hindi. Ahora el terminal web ya está disponible en 24 idiomas.
  5. Corregida la traducción al turco.
  6. Corregida la modificación y la eliminación de órdenes pendientes en la versión móvil del terminal web.
  7. Corregida la pista sobre el cierre de mercado mostrada en el gráfico.
  8. Corregida la visualización del beneficio en el botón de cierre de posición en la ventana de diálogo comercial. El error ocurría durante el cierre parcial.
  9. Corregida la visualización de notificaciones comerciales en el gráfico.
  10. Corregido el cambio de volumen usando las flechas en la profundidad de mercado.
  11. Corregido el error que en algunos casos provocaba que la configuración de los indicadores en el gráfico se restableciera.
  12. Corregida la comprobación del nombre de usuario al abrir nuevas cuentas. Antes, la presencia de un apóstrofo en el nombre se consideraba un error.
  13. Corregido el procesamiento de recotizaciones. En algunos casos, era posible que no se mostrara la ventana de diálogo con la oferta de nuevos precios.
  14. Corregida la representación del indicador Ichimoku Kinko Hyo. Las líneas Chikou-span, Up kumo y Down kumo ahora se muestran con el desplazamiento correcto.
  15. Corregida la comprobación del margen inicial al abrir una nueva orden. El error se producía al utilizar el sistema de cobertura de registro de posiciones.
  16. Corregido el desplazamiento en la ventana de especificaciones del contrato.

MQL5.community

  1. El sitio web de MQL5 Cloud Network — https://cloud.mql5.com se ha actualizado por completo.

    Sepa cómo usar la potencia de miles de computadoras en todo el mundo para optimizar sus estrategias comerciales. Gracias a MQL5 Cloud Network, incluso los cálculos más voluminosos y complejos se pueden completar en cuestión de minutos. Aquí también aprenderá cómo convertirse en miembro de la red y ganar dinero ofreciendo sus recursos informáticos.




  2. Mejorada la sección de capturas de pantalla para productos en el Mercado. Los autores ahora pueden cargar ilustraciones con un tamaño de hasta 1920*1800 píxeles, lo cual mostrará mejor cómo funcionan las aplicaciones. Además, se ha actualizado la galería de capturas de pantalla. Las miniaturas de las imágenes se muestran en un cómodo carrusel y, al clicar en ellas, podrá abrir las imágenes a tamaño completo.



  3. Se ha mejorado la sección Freelance. Los usuarios ahora recibirán más avisos al realizar sus primeros pedidos:

    • Ejemplos de la tarea técnica y un recordatorio sobre la necesidad de adjuntarla
    • Instrucciones para completar las etapas
    • Consejos sobre el uso de plantillas

    Todo esto le ayudará a no confundirse en el proceso y obtener el resultado deseado.






24 marzo 2023
MetaTrader 5 build 3660: Mejoras y correcciones

Terminal

  1. Corregidos los errores que, en algunos casos, provocaban la formación incorrecta del diario de registro de la plataforma.
  2. Actualizadas las traducciones de la interfaz de usuario.

MQL5

  • Corregida la comprobación de variables globales. Al declarar variables idénticas en diferentes espacios de nombres, el compilador generaba una advertencia errónea de que la variable ya estaba declarada.

Web Terminal

  1. Añadida la traducción de la interfaz de usuario al portugués. El terminal web está ahora disponible en 12 idiomas.
  2. Corregida la ventana de diálogo para añadir el indicador de desviación estándar.
  3. Correcciones menores y mejoras.
17 marzo 2023
MetaTrader 5 build 3640: terminal web en 11 idiomas

Web Terminal

  1. Añadidas las traducciones de la interfaz en 10 idiomas ampliamente utilizados: ruso, francés, alemán, italiano, japonés, coreano, español, turco, chino simplificado y chino tradicional. Esta lista se ampliará en las próximas versiones. Para cambiar la interfaz a su propio idioma, utilice el menú:


    La interfaz del terminal web ahora está disponible en 11 idiomas


  2. Optimizado el mecanismo de conexión con el servidor comercial.

MQL5

  1. MQL5: Añadidas las banderas COPY_TICKS_VERTICAL y COPY_RATES_VERTICAL para los métodos CopyTicks, CopyTicksRange y CopyRates, respectivamente.

    Por defecto, el copiado de ticks y series en la matriz se realiza a lo largo del eje horizontal, es decir, los datos se añadirán a la izquierda al final de la fila. En las tareas de inicio de un modelo ONNX entrenado, dicha matriz deberá transponerse para suministrar los datos de entrada:

    const long                             ExtOutputShape[] = {1,1};    // model output shape
    const long                             ExtInputShape [] = {1,10,4}; // model input form
    #resource "Python/model.onnx" as uchar ExtModel[]                   // model as resource
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    int OnStart(void)
      {
       matrix rates;
    //--- get 10 bars
       if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC,2,10))
          return(-1);
    //--- input a set of OHLC vectors
       matrix x_norm=rates.Transpose();
       vector m=x_norm.Mean(0);               
       vector s=x_norm.Std(0);
       matrix mm(10,4);
       matrix ms(10,4);

    Ahora, bastará con indicar la bandera adicional COPY_RATES_VERTICAL (COPY_TICKS_VERTICAL para los ticks) al llamar al método para evitar operaciones innecesarias de transformación de datos:

    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    int OnStart(void)
      {
       matrix rates;
    //--- get 10 bars
       if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC|COPY_RATES_VERTICAL,2,10))
          return(-1);
    //--- input a set of OHLC vectors
  2. Añadido el valor CHART_SHOW_TRADE_HISTORY a la enumeración ENUM_CHART_PROPERTY_INTEGER. Esta propiedad controla la representación de las transacciones en la historia comercial en el gráfico. Para recuperar y establecer la propiedad, utilice las funciones ChartGetInteger y ChartSetInteger. Podrá leer más información sobre la representación de transacciones en el gráfico en la documentación de la plataforma.

MetaEditor

  • Corregido el bloqueo de la interfaz en raras ocasiones al compilar archivos.

Terminal

  • Correcciones de crash logs.
10 marzo 2023
MetaTrader 5 build 3620: mejoras en el terminal web, soporte de ONNX y multiplicación acelerada de matrices en MQL5

Terminal

  1. Corregido el error en el cálculo del beneficio final en el informe comercial.
  2. Actualizados los datos fundamentales de los instrumentos comerciales disponibles a través de la Observación de Mercado.
  3. Corregida la ejecución de la plataforma comercial en Wine 7.0.1 al ejecutarse en los sistemas Linux.
  4. Corregida la adición de símbolos a la Observación de Mercado a través de la barra de búsqueda. Antes no se podía añadir a la lista un símbolo encontrado según la descripción clicando en su línea.

MQL5

  1.  Añadido el soporte para trabajar con modelos ONNX (Open Neural Network Exchange).

    ONNX es una biblioteca abierta para construir redes neuronales de aprendizaje profundo. Este formato es compatible con muchas plataformas, como Chainer, Caffee2 y PyTorch. Al crear un modelo ONNX usando herramientas especializadas, podemos integrarlo en nuestro programa MQL5 y utilizarlo para tomar decisiones comerciales.

    La documentación incluye una descripción de todas las funciones compatibles. Encontrará un ejemplo de trabajo con un modelo de prueba en los proyectos públicos en el MetaEditor. Busque el proyecto ONNX.Price.Prediction en el apartado "Herramientas \ Proyectos Públicos", y pulse después "Unirse" en el menú contextual. El proyecto se descargará en su ordenador y aparecerá en el Navegador:


    Ejemplo de trabajo con un modelo ONNX en un proyecto público


    Compile el proyecto y ejecútelo en EURUSD H1 para ver el resultado.

    Además del modelo ya preparado y del código MQL5 para ejecutarlo, en el proyecto también estará disponible el script Python PricePredictionTraining.py. Este muestra cómo crear un modelo ONNX por uno mismo. Para ejecutar el script, instale Python en su ordenador, además de los módulos necesarios desde la línea de comandos:

    python.exe -m pip install --upgrade pip
    python -m pip install --upgrade tensorflow
    python -m pip install --upgrade pandas
    python -m pip install --upgrade scikit-learn
    python -m pip install --upgrade matplotlib
    python -m pip install --upgrade tqdm
    python -m pip install --upgrade metatrader5
    python -m pip install --upgrade onnx==1.12
    python -m pip install --upgrade tf2onnx
    En la documentación encontrará instrucciones detalladas sobre cómo utilizar ONNX.

  2. Añadido el soporte para el nuevo algoritmo de multiplicación de matrices General Matrix Multiplication (GeMM). Dicho algoritmo acelera sustancialmente los cálculos en la mayoría de los procesadores al paralelizar las tareas y ayuda a aprovechar mejor las cachés L1/L2/L3. La velocidad de cálculo es comparable a la de paquetes tan conocidos como Math Kernel Library (MKL) y OpenBLAS. En breve publicaremos pruebas comparativas detalladas.

    Actualmente, el nuevo algoritmo es compatible con el método matrix::GeMM. Si su procesador admite las instrucciones AVX y FMA (como la mayoría de los procesadores lanzados después de 2013), el algoritmo se activará automáticamente.

  3. Añadido el soporte de transferencia de matrices y vectores a DLL. Ahora podrá importar funciones que usen este tipo de datos desde bibliotecas externas.

    Las matrices y los vectores se transmiten a DLL como un puntero al búfer. Por ejemplo, para transmitir una matriz de tipo float, el parámetro correspondiente de la función exportada desde la DLL deberá tomar un puntero a un búfer de tipo float. Ejemplo:

    MQL5
    #import "mmlib.dll"
    bool sgemm(uint flags,matrix<float> &C,const matrix<float> &A,const matrix<float> &B,ulong M,ulong N,ulong K,float alpha,float beta);
    #import
    C++
    extern "C" __declspec(dllexport) bool sgemm(UINT flags,float *C,const float *A,const float *B,UINT64 M,UINT64 N,UINT64 K,float alpha,float beta)
    Para procesar correctamente las matrices y vectores, además de sus búferes, deberemos transmitir sus dimensiones.

  4. Añadida la nueva función CopySeries para copiar series temporales sincronizadas desde MqlRates a arrays aparte.

    La función CopySeries permite obtener de una sola vez solo las series temporales deseadas en los distintos arrays especificados, además, todas ellas estarán sincronizadas entre sí. Esto significa que todos los valores de los arrays resultantes para un determinado índice N pertenecerán a la misma barra en el par Símbolo/Marco temporal indicado. En este caso, no será necesario preocuparse de que todas las series temporales obtenidas estén sincronizadas con la hora de apertura de la barra.

    A diferencia de CopyRates, que retorna un conjunto completo de series temporales como un array MQLRates, la función CopySeries permite al programador obtener solo las series temporales deseadas usando como base una combinación de banderas que indican el tipo de serie temporal solicitada. El orden de los arrays transmitidos a la función deberá coincidir con el orden de los campos de la estructura MqlRates:

    struct MqlRates
      {
       datetime time;         // hora de inicio del periodo
       double   open;         // precio de apertura
       double   high;         // precio máximo en el periodo
       double   low;          // precio mínimo en el periodo
       double   close;        // precio de cierre
       long     tick_volume;  // volumen de ticks
       int      spread;       // spread
       long     real_volume;  // volumen bursátil
      }

    Así, si desea obtener los valores de las series temporales time, close y real_volume de las últimas 100 barras del símbolo/marco temporal actual, la llamada debería ser la siguiente:

    datetime  time[];
    double    close[];
    long      volume[];
    CopySeries(NULL,0,0,100,COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_VOLUME_REAL,time,close,volume);
    

    El orden de los arrays "time, close, volume" es importante: deberá coincidir con el orden de los campos de la estructura MqlRates. En cambio, el orden de los valores en la máscara rates_mask no importará, la máscara podría ser así:

    COPY_RATES_VOLUME_REAL|COPY_RATES_TIME|COPY_RATES_CLOSE

    Ejemplo

    //--- input parameters
    input datetime InpDateFrom=D'2022.01.01 00:00:00';
    input datetime InpDateTo  =D'2023.01.01 00:00:00';
    input uint     InpCount   =20;
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart(void)
      {
    //--- matrices para obtener las series temporales de la estructura de precio Rates
       double   open[];
       double   close[];
       float    closef[];
       datetime time1[], time2[];
    //---solicitamos los precios de cierre a un array del tipo double
       ResetLastError();
       int res1=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount,
                           COPY_RATES_TIME|COPY_RATES_CLOSE, time1, close);
       PrintFormat("1. CopySeries  returns %d values. Error code=%d", res1, GetLastError());
       ArrayPrint(close);
       
    
    //--- ahora solicitaremos más precios apertura, mientras que los precios de cierre los solicitaremos a un array de tipo float
       ResetLastError();
       int res2=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount,
                           COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_OPEN, time2, open, closef);
       PrintFormat("2. CopySeries  returns %d values. Error code=%d", res2, GetLastError());
       ArrayPrint(closef);
    //--- comparamos los datos obtenidos
       if((res1==res2) && (time1[0]==time2[0]))
         {
          Print("  | Time             |    Open      | Close double | Close float |");
          for(int i=0; i<10; i++)
            {
             PrintFormat("%d | %s |   %.5f    |   %.5f    |   %.5f   |",
                         i, TimeToString(time1[i]), open[i], close[i], closef[i]);
            }
         }
    /*  Resultado
            1. CopySeries  returns 0 values. Error code=0
            [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604
            [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247
            2. CopySeries  returns 0 values. Error code=0
            [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604
            [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247
              | Time             |    Open      | Close double | Close float |
            0 | 2023.03.01 17:00 |   1.06660    |   1.06722    |   1.06722   |
            1 | 2023.03.01 18:00 |   1.06722    |   1.06733    |   1.06733   |
            2 | 2023.03.01 19:00 |   1.06734    |   1.06653    |   1.06653   |
            3 | 2023.03.01 20:00 |   1.06654    |   1.06520    |   1.06520   |
            4 | 2023.03.01 21:00 |   1.06520    |   1.06573    |   1.06573   |
            5 | 2023.03.01 22:00 |   1.06572    |   1.06649    |   1.06649   |
            6 | 2023.03.01 23:00 |   1.06649    |   1.06694    |   1.06694   |
            7 | 2023.03.02 00:00 |   1.06683    |   1.06675    |   1.06675   |
            8 | 2023.03.02 01:00 |   1.06675    |   1.06684    |   1.06684   |
            9 | 2023.03.02 02:00 |   1.06687    |   1.06604    |   1.06604   |
    */
      }
  5. Corregido el error que, en raras ocasiones, provocaba que se obtuviera un ticket de orden incorrecto después de enviar una solicitud con la función OrderSend. El error podía producirse al comerciar en paralelo en la misma cuenta a través de diferentes plataformas.
  6. Corregido el error al importar bibliotecas EX5 que ocurría si el nombre de la biblioteca que se estaba importando era el mismo que el nombre del archivo en el que se estaba importando.

MetaEditor

  1. Añadidas notificaciones Push a los participantes de los proyectos grupales. Ahora, todos los participantes estarán siempre al tanto de cualquier cambio en los archivos o en la configuración del proyecto. Para recibir notificaciones, indique su MetaQuotes ID en la sección "Ajustes \ Seguridad" de su perfil en MQL5.community.


    Notificaciones push sobre cambios en el proyecto


  2. Actualizados los iconos de los archivos en el Navegador. Las nuevas metáforas, más sencillas, facilitarán la comprensión de la información.

Simulador

  1. Corregido el error que provocaba el recorte del parámetro string de entrada si contenía el carácter "|".

MetaTrader 5 Web Terminal build 3620

  1. Añadidos varios esquemas de color para la interfaz. Estos afectan a la visualización de las barras y líneas en el gráfico, a los precios en la Observación de Mercado y al rendimiento financiero de la cuenta. Nuestros diseñadores han elegido combinaciones de colores cómodas pensando en los tráders.


    Nuevos esquemas de color para el terminal web


  2. Rediseñada la ventana de especificación del instrumento comercial. Todos los datos se organizan ahora en bloques lógicos compactos para facilitar su visualización.


    Ventana de especificación de instrumentos comerciales actualizada


  3. Corregida la apertura de cuentas reales a través del terminal web. En algunos casos, el servidor podía retornar un error tras completar el formulario de registro.
  4. Corregido el error en la ventana de diálogo comercial. Si el usuario abría la ventana de diálogo de modificación de la posición y luego cerraba la posición con el botón "X" de la ventana de herramientas, no se restablecía el contenido de la ventana de diálogo. En este caso, la ventana de diálogo volverá automáticamente al modo de colocación de nuevas órdenes.
  5. Corregida la visualización del campo Server en la ventana de diálogo de gestión de cuentas.
  6. Corregida la visualización fija del marco temporal actual en la barra de herramientas.
  7. Corregida la visualización fija del volumen en número de unidades del activo básico en la ventana de diálogo comercial.
  8. Corregida la modificación de los niveles de Stop Loss y Take Profit. En algunos casos, la modificación de un valor podía provocar que otro se reseteara.
  9. Corregida la visualización del aviso de riesgo para el inversor.


6 marzo 2023
MetaTrader 5 para iPhone/iPad: mejora de las funciones comerciales y analíticas de los gráficos
  1. Añadida la posibilidad de colocar órdenes stop y stop limit desde el gráfico.

    Ahora ya no se verá restringido solo a las órdenes límite. Seleccione el tipo de orden pendiente que desee pulsando sucesivamente el botón que corresponda en el panel inferior del gráfico.


    Colocando órdenes stop y stop limit desde un gráfico


  2. Añadida la posibilidad de pasar al cierre de posiciones y la eliminación de órdenes pendientes del gráfico. Seleccione el icono de una posición o el nivel de una orden en el gráfico y aparecerá la orden correspondiente en el panel comercial inferior:


    Gestionar posiciones y órdenes desde el gráfico


  3. Mejorada la función de desplazamiento del borde derecho del gráfico de precios. Para cambiar el desplazamiento, bastará con desplazar el gráfico hacia el último precio hasta que aparezca el divisor vertical. A continuación, tire del triángulo situado en la escala inferior del gráfico:


    Cambiamos la separación del gráfico tirando del triángulo de la escala inferior


  4. Añadida la posibilidad de copiar objetos analíticos en el gráfico. Esto le ayudará a trazar las marcas con mayor rapidez. Abra el menú de objetos con una pulsación larga y elija "Copiar":

    Creando copias de objetos analíticos


  5. Añadida la posibilidad de controlar la visualización de los indicadores en diferentes marcos temporales. Si el indicador no resulta adecuado para determinados periodos del gráfico, podrá ocultarse para dejar espacio en la pantalla a otras herramientas analíticas.


    Gestionando cómo se muestran los indicadores en diferentes marcos temporales


  6. Añadida la visualización de las comisiones de los instrumentos en la ventana de especificaciones.


    Conozca el importe de la comisión en las especificaciones del instrumento


  7. Añadida la posibilidad de usar un enlace para restaurar la contraseña de la cuenta. El acceso solo podrá restablecerse a través del bróker con el que se ha abierto la cuenta. El enlace le mostrará los datos de contacto donde podrá obtener ayuda.


    Ayuda al restablecer la contraseña


  8. Añadida la posibilidad de compartir enlaces a un canal en la comunidad MQL5.community


    Comparta un enlace a su canal a través de la aplicación


  9. Mejorada la experiencia del usuario al conectarse a una cuenta comercial restringida.

    El comercio en la cuenta puede estar restringido por varias razones: la conexión a la cuenta en el modo inversor, un acuerdo no aceptado, la verificación no superada con el bróker, etc. Al usuario le resultaba difícil entender por qué no había funciones comerciales en la aplicación.

    En estos casos, aparecerá un botón gris para colocar una nueva orden en la sección «Trading». Al hacer clic en este, el usuario verá información relevante y recomendaciones.


    Ayuda al usuario en el comercio restringido


  10. Mejorada la gestión de los certificados SSL utilizados para la autenticación ampliada.

    Al conectarse a una cuenta con autenticación ampliada, ahora se mostrará al usuario una breve descripción de los pasos necesarios.


    Mejorado el trabajo con certificados SSL


    También será posible importar un certificado desde un archivo PFX. Para ello, bastará con guardarlo en la aplicación «Archivos» y, a continuación, utilizar la función de importación de la ventana de diálogo de inicio.

    Además, ahora es posible exportar certificados a archivos para usarlos en otros dispositivos. Para ello, vaya a "Ajustes \ Certificados" y pulse "Exportar" en el menú de certificados.

  11. Los gráficos de precio se han trasladado a Metal, la última generación de la API gráfica utilizada en los dispositivos Apple. Esto aumentará sustancialmente el rendimiento al mostrar gráficos, indicadores y objetos.
  12. Corregidos los niveles de Stop Loss y Take Profit en la Profundidad de Mercado. En el caso de las cuentas FIFO, los niveles de stop se fijarán ahora de forma automática según los niveles de stop de las posiciones ya abiertas para el mismo instrumento. Esto es necesario para cumplir con la regla FIFO.
  13. Corregida la recotización. Al recibir una recotización, el usuario dispondrá de un breve plazo para decidir si acepta o no los nuevos precios. Si no se adopta una decisión, la solicitud se rechazará automáticamente y se cerrará la ventana de recotización.
  14. Corregida la visualización de la hora en la sección "Gráfico" al utilizar la interfaz de tema oscuro.
16 diciembre 2022
MetaTrader 5 build 3550: mejoras y correcciones

Terminal

  1. Terminal: Actualizadas las traducciones de la interfaz de usuario.
  2. Correcciones de crash logs.

Web Terminal

9 diciembre 2022
MetaTrader 5 build 3540: Autenticación 2FA/TOTP y Observación de Mercado mejorada en el terminal web

WebTerminal

  1. Añadido soporte para la autenticación 2FA/TOTP usando Google Authenticator y aplicaciones similares.

    El uso de la autenticación de dos factores le permitirá proteger aún más su cuenta comercial contra el acceso no autorizado, incluso si su nombre de usuario y su contraseña permanente se filtran. Existen muchas aplicaciones móviles que permiten la autenticación en dos pasos utilizando el algoritmo Time-based One-time Password Algorithm (TOTP). Entre los más populares, están Google Authenticator, Microsoft Authenticator, LastPass Authenticator y Authy. En el terminal de cliente de MetaTrader 5, ahora es posible autenticarse usando contraseñas de un solo uso obtenidas de dichas aplicaciones Authenticator.

    Para habilitar la autenticación en dos pasos, primero deberá iniciar sesión en el terminal de cliente de MetaTrader 5 de la forma habitual. Luego clique en su cuenta en el menú y seleccione "Habilitar 2FA/TOTP" en la ventana de diálogo que se abrirá. Inicie el Authenticator en su teléfono móvil, pulse el botón "+" en él para añadir su cuenta comercial y escanee el código QR del terminal. Introduzca el código obtenido en el campo "One-time password" y clique en "Enable 2FA": el secreto de su cuenta se añadirá al servidor comercial del bróker.


    Añadido el soporte para la autenticación 2FA/TOTP usando Google Authenticator y aplicaciones similares


    El secreto guardado se usará ahora en la aplicación Authenticator para generar una contraseña OTP para cada conexión posterior. Cada contraseña será válida durante 30 segundos, luego se generará una nueva.


    Para conectarse a su cuenta comercial, ahora necesitará una contraseña OTP adicional de la aplicación Authenticator


    En la ventana de diálogo, junto con el código QR de vinculación al generador, también se mostrará un código de respaldo: guárdelo en un lugar seguro. Si pierde la posibilidad de acceder a su dispositivo vinculado, el código le permitirá añadir nuevamente su cuenta a la aplicación Authenticator.

    Si decide eliminar de la aplicación Authenticator el secreto almacenado, primero desactive el uso de la autenticación 2FA/TOTP utilizando el comando del menú contextual de la cuenta correspondiente. Si la autenticación 2FA/TOTP no está disponible en su cuenta, pida a su bróker que la active.

  2. Ampliada la cantidad de información mostrada en Market Watch. Ahora, además de los precios Bid/Ask actuales y el porcentaje de cambio del precio, podrá ver:

    • El precio Bid/Ask máximo y mínimo para la sesión comercial actual
    • Los precios de apertura de la sesión comercial actual y los precios de cierre de la sesión comercial anterior

    Para configurar la información mostrada, utilice el menú contextual:


    Información adicional en la Observación de Mercado


  3. Añadida la visualización de la notificación sobre riesgos cuando la configuración correspondiente está habilitada en el lado del bróker. Algunos reguladores requieren que el tráder lea y acepte el aviso antes de comenzar a comerciar.
  4. Corregida la visualización de la barra de herramientas superior en los modelos de iPhone con una muesca en la parte superior de la pantalla. En algunos casos, esta podía cubrir los botones del panel.
  5. Corregida la visualización de los indicadores financieros finales de la cuenta (beneficio, equidad, etc.) en el navegador Google Chrome. En algunos casos, los valores podían no actualizarse.

Terminal

  1. Optimizada y acelerada significativamente la apertura de la ventana de diálogo para crear cuentas demo.
  2. Actualizadas las traducciones de la interfaz de usuario.
  3. Correcciones de crash logs.

MQL5

  1. En la clase COpenCL de la Biblioteca Estándar se han añadido nuevos métodos:

    • BufferFromMatrix — rellenar el búfer del dispositivo con los datos de la matriz
    • BufferToMatrix — leer los datos del búfer del dispositivo en una matriz
    • ContextCreate — crear un contexto de dispositivo (primera parte del método Initialize)
    • ProgramCreate — crear un programa basado en el código fuente de OpenCL (segunda parte del método Initialize)
    • ContextClean — liberar todos los datos pertenecientes al contexto del dispositivo (similar al método Shutdown, pero sin eliminar el contexto)
    • GetDeviceInfoInteger — obtener una propiedad entera del dispositivo
    • GetKernelInfoInteger — obtener una propiedad entera del kernel
    • GetDeviceInfo — obtener cualquier propiedad entera única del dispositivo que no se encuentre en la enumeración ENUM_OPENCL_PROPERTY_INTEGER

    Ejemplo de uso de GetDeviceInfo:
    long preferred_workgroup_size_multiple=OpenCL.GetDeviceInfo(0x1067);
  2. Añadidos los valores TERMINAL_CPU_NAME y TERMINAL_OS_VERSION a la enumeración ENUM_TERMINAL_INFO_STRING. Estos valores permiten obtener el nombre del procesador y el sistema operativo del usuario.
    void OnStart()
      {
       string cpu,os;
    //---
       cpu=TerminalInfoString(TERMINAL_CPU_NAME);
       os=TerminalInfoString(TERMINAL_OS_VERSION);
       PrintFormat("CPU: %s, OS: %s",cpu,os);
      }
    
    Resultado:
    UPC: Intel Xeon  E5-2630 v4 @ 2.20GHz, OS: Windows 10 build 19045
  3. Corregido el parámetro "table_or_sql" en las funciones DatabasePrint y DatabaseExport. Ahora podrá transmitir el nombre del recuadro en él, no solo una solicitud SQL.
MetaEditor
  1. Corregida la verificación del número máximo de columnas a mostrar en la base de datos. Ahora se podrán mostrar hasta 64 columnas.
  2. Corregido el funcionamiento de los puntos de interrupción en las construcciones cortas del tipo IF[ if(cond) break; ].
25 noviembre 2022
MetaTrader 5 build 3520: añadida la autenticación 2FA/TOTP con Google Authenticator

Terminal

  1. Añadido soporte para la autenticación 2FA/TOTP usando Google Authenticator y aplicaciones similares.

    El uso de la autenticación de dos factores le permitirá proteger aún más su cuenta comercial contra el acceso no autorizado, incluso si su nombre de usuario y su contraseña permanente se filtran. Existen muchas aplicaciones móviles que permiten la autenticación en dos pasos utilizando el algoritmo Time-based One-time Password Algorithm (TOTP). Entre los más populares, están Google Authenticator, Microsoft Authenticator, LastPass Authenticator y Authy. En el terminal de cliente de MetaTrader 5, ahora es posible autenticarse usando contraseñas de un solo uso obtenidas de dichas aplicaciones Authenticator.

    Para activar la autenticación en dos pasos, primero deberá iniciar sesión en el terminal de cliente de MetaTrader 5 de la forma habitual. A continuación, clique con el botón derecho del ratón en la cuenta comercial para que aparezca el menú y seleccione "Permitir 2FA/TOTP". Inicie el Authenticator en su teléfono móvil, pulse el botón "+" en él para añadir su cuenta comercial y escanee el código QR del terminal. Introduzca el código obtenido en el campo "One-time password" y clique en "Enable 2FA": el secreto de su cuenta se añadirá al servidor comercial del bróker.


    Añadido el soporte para la autenticación 2FA/TOTP usando Google Authenticator y aplicaciones similares.

    El secreto guardado se usará ahora en la aplicación Authenticator para generar una contraseña OTP para cada conexión posterior. Cada contraseña será válida durante 30 segundos, luego se generará una nueva.



    Para conectarse a su cuenta comercial, ahora necesitará una contraseña OTP adicional de la aplicación Authenticator

    Si decide eliminar el secreto almacenado de la aplicación Authenticator, primero desactive el uso de la autenticación 2FA/TOTP usando el comando del menú contextual de la cuenta correspondiente. Si la autenticación 2FA/TOTP no está disponible en su cuenta, pida a su bróker que active dicha opción.

MQL5

  1. Corregida la función CopyTicks para los instrumentos comerciales de usuario. En algunos casos, al trabajar con símbolos personalizados, se retornaban los ticks iniciales de la sesión comercial anterior en lugar de los datos solicitados.

  2. Añadidos nuevos valores a la enumeración para obtener información sobre el último error de OpenCL, lo cual permite obtener el código de error y la descripción de texto.
    1. Añadida a la enumeración ENUM_OPENCL_PROPERTY_INTEGER el valor CL_LAST_ERROR (código 4094) 

      Para obtener el último error de OpenCL a través de CLGetInfoInteger, el parámetro handle será ignorado, es decir, no tendrá ningún significado. Descripción del error: https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS
      Al darse un código de error desconocido, se retornará la línea "unknown OpenCL error N", donde, en lugar de N, se dará el código de error.

      Ejemplo:
      //--- el primer parámetro handle se ignora al obtener el código del últimoo error
      int code = (int)CLGetInfoInteger(0,CL_LAST_ERROR);

    2. Añadida a la enumeración ENUM_OPENCL_PROPERTY_STRING el valor CL_ERROR_DESCRIPTION (4093).
      Podemos obtener una descripción de texto del error de OpenCL usando CLGetInfoString. Descripción del error: https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS

      Al usar CL_ERROR_DESCRIPTION como parámetro handle, el código de error deberá transmitirse a CLGetInfoString . Si transmitimos CL_LAST_ERROR en lugar del código de error, la función retornará una descripción del último error.

      Ejemplo:
      //--- obtener código del último error de OpenCL
      int    code = (int)CLGetInfoInteger(0,CL_LAST_ERROR);
      string desc; // para obtener la descripción de texto del error
      
      //--- utilizamos el código de error para obtener la descripción de texto del error
      if(!CLGetInfoString(code,CL_ERROR_DESCRIPTION,desc))
         desc = "cannot get OpenCL error description, " + (string)GetLastError();
      Print(desc);
      
      
      //--- para obtener la descripción del último error de OpenCL sin obtención previa del código, deberemos transmitir CL_LAST_ERROR  
      if(!CLGetInfoString(CL_LAST_ERROR,CL_ERROR_DESCRIPTION, desc))
         desc = "cannot get OpenCL error description, " + (string)GetLastError();
      Print(desc);
      Por ahora, como descripción del error, se ofrece el nombre de la enumeración interna cuyo desciframiento puede verse en la página https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS. Por ejemplo, si obtenemos CL_INVALID_KERNEL_ARGS, la descripción para ello será "Returned when enqueuing a kernel when some kernel arguments have not been set or are invalid".

  3. Corregido el método matrix::MatMul. Al trabajar con matrices grandes, el terminal se bloqueaba con algunos tamaños.

Correcciones de crash logs.
18 noviembre 2022
MetaTrader 5 build 3510: mejoras del terminal web

MetaTrader 5 WebTerminal

  1. En la versión móvil, hemos añadido a la sección de la historia de transacciones la clasificación de estas y el filtrado según la profundidad. Para configurar la visualización de la historia, utilice los comandos del panel superior:


    La versión móvil tiene ahora un ajuste de visualización para la historia de transacciones


    Las transacciones pueden clasificarse según parámetros básicos: fecha, ticket, símbolo, volumen, etc.

  2. Mejorado el acceso a la información de sus cuentas comerciales.

    • En la versión de escritorio, ahora podrá clicar en los datos de la cuenta actual en el menú hamburguesa. Al clicar en una cuenta, se accederá a la visualización de sus detalles.
    • En la versión móvil, se ha añadido la visualización de la cuenta corriente en «Settings». Al clicar en una cuenta, se accederá a la visualización de sus detalles.


    Mejorado el acceso a los datos de la cuenta comercial

  3. Corregida la visualización del tipo de cuenta en la ventana de gestión de cuentas.
  4. Corregida la visualización de la equidad y el margen libre después de actualizar la página del terminal web en los navegadores móviles.
  5. Corregida la visualización de la barra inferior en el navegador móvil Firefox.

Terminal

  1. Corregido un error en el cálculo de los gráficos de balance y equidad en el informe comercial.

MQL5

  1. El comportamiento de typename(expr) ha sido modificado. La función ahora proporciona el tipo completo con los modificadores y dimensiones (para arrays):
    class A
      {
      };
    
    void OnStart(void)
      {
       const A *const arr[][2][3]={};
       Print(typename(arr));
      }
    
    Resultado:
    "clase A const * const [][2][3]"

Correcciones de crash logs.
11 noviembre 2022
MetaTrader 5 build 3500: mejoras y correcciones

Terminal

  1. Añadido un comando para acceder al nuevo informe comercial en el menú contextual de las secciones "Trading" e "Historia":


    El informe comercial incluye:
    • Valores de crecimiento mensual en forma de gráfico y recuadro
    • Un gráfico del cambio de equidad
    • Un esquema de pétalos que le permitirá evaluar rápidamente el estado de la cuenta
    • Estadísticas de las transacciones por instrumentos
    • Multitud de indicadores adicionales para el análisis comercial

  2. Corregido el cálculo del depósito inicial en el informe comercial.
  3. Corregida la configuración de los niveles de "Stop Loss" y "Take Profit" al usar paneles de comercio rápido en el gráfico y en la "Observación de mercado". Los niveles podían heredarse erróneamente de posiciones abiertas con anterioridad, incluso si no fuera necesario (la funcionalidad está destinada a cuentas FIFO).
  4. Actualizadas las traducciones de la interfaz de usuario.

MQL5

  1. Solucionado un error del compilador que permitía acceder a un campo de estructura usando una cadena constante cuyo valor es el nombre del campo.
  2. Corregida la verificación del estado de la clave con la ayuda de TerminalInfoInteger(TERMINAL_KEYSTATE_*).

Correcciones de crash logs.

MetaTrader 5 WebTerminal build 3500

  1. Corregido el cierre de posiciones al recibir una recotización.
  2. Corregida la reconexión al servidor después de expandir una ventana del navegador que había estado inactiva durante mucho tiempo.
  3. Corregida la visualización de fondos de crédito en la cuenta.
  4. Multitud de mejoras y correcciones.
4 noviembre 2022
MetaTrader 5 build 3490: versión móvil del terminal web y nuevos métodos de matrices en MQL5

Versión móvil del terminal web

En la nueva versión del terminal web se ha añadido el soporte completo para dispositivos móviles. Ahora la interfaz se adapta automáticamente al tamaño de la pantalla, lo cual permite a los usuarios trabajar cómodamente en la plataforma tanto en teléfonos como tabletas con iOS y Android:


Además, hemos introducido en el terminal web numerosas correcciones y mejoras.

El nuevo terminal web MetaTrader 5 ofrece todas las funciones que necesita un tráder moderno. La aplicación le permitirá:

  • Trabajar con cuentas demo y reales
  • Recibir cotizaciones de cualquier instrumento financiero
  • Comerciar en cualquier mercado
  • Realizar el análisis técnico de las cotizaciones con más de 30 indicadores y 20 objetos gráficos
  • Analizar los datos del Calendario Económico

Terminal

  1. Ampliadas las funciones del gestor de tareas. Ahora permite monitorear de forma más precisa el consumo de recursos.

    • Añadida la visualización del tamaño de la pila para los hilos
    • Añadida la visualización del número de cambios de contexto
    • Añadido el reconocimiento de los hilos del sistema y los hilos de las DLL de terceros
    • Añadida la visualización del tiempo de ejecución en el modo kernel. Un aumento de este indicador comparado con el tiempo de ejecución en el modo usuario puede indicar problemas a nivel de sistema: problemas de drivers, errores de hardware, hardware lento. Encontrará más información en la documentación de Microsoft.
    • Añadida la visualización del tiempo de funcionamiento en el modo usuario.



  2. Añadida una pestaña OpenCL a la configuración del terminal para administrar los dispositivos disponibles. El nuevo administrador de OpenCL nos permitirá indicar explícitamente los dispositivos que se utilizarán para los cálculos.




  3. Agregada la adición de niveles de Stop Loss y Take Profit en la Profundidad de Mercado para las cuentas que operan en el modo FIFO (se puede activar en el lado del bróker).

    El modo FIFO implica que las posiciones de cada instrumento deberán cerrarse en el orden en que se han abierto. Para garantizar que el cierre de posiciones según los niveles stop siempre se corresponda con la regla FIFO, en el lado del terminal del cliente se implementa siguiente lógica :

    Si hay varias posiciones para el mismo instrumento, la colocación de niveles stop para cualquiera de ellas dará lugar a la colocación de niveles stop similares para todas las demás. En consecuencia, al activarse un nivel, todas las posiciones se cerrarán según el orden de la regla FIFO.

    Al abrir la Profundidad de Mercado para un instrumento del que ya existen posiciones, los campos Stop Loss y Take Profit se rellenarán ahora automáticamente con los niveles de las posiciones existentes (si han sido establecido).

  4. Corregida la eliminación de los niveles de Stop Loss y Take Profit con los botones "X" en el apartado «Herramientas/Trading». El error se producía cuando la función de comercio rápido estaba desactivada. Al pulsar el botón, se abrirá una ventana de diálogo comercial con un valor en blanco para el nivel correspondiente.

  5. Se han realizado cambios en el informe comercial, hemos corregido los rótulos fijos en los gráficos y el cálculo de la comisión final. Salvo en algunos casos, se mostraba un beneficio incorrecto en las estadísticas del informe, además de valores incorrectos en la información sobre las herramientas al pasar el cursor del ratón sobre los gráficos de equidad y balance.

MQL5

  1. Añadidos los métodos vectoriales y matriciales CopyTicks y CopyTicksRange. Estos permiten copiar fácilmente los arrays de datos de precio en vectores y matrices.
    bool matrix::CopyTicks(string symbol,uint flags,ulong from_msc,uint count);
    bool vector::CopyTicks(string symbol,uint flags,ulong from_msc,uint count);
    
    bool matrix::CopyTicksRange(string symbol,uint flags,ulong from_msc,ulong to_msc);
    bool matrix::CopyTicksRange(string symbol,uint flags,ulong from_msc,ulong to_msc);
    El tipo de datos a copiar se indica en el parámetro rates_mask con la ayuda de la enumeración ENUM_COPY_RATES. Están disponibles los valores siguientes:
    COPY_TICKS_INFO    = 1,       // ticks llamados por los cambios de Bid y/o Ask
    COPY_TICKS_TRADE   = 2,       // ticks llamados por los cambios de Last y Volume
    COPY_TICKS_ALL     = 3,       // todos los ticks en en los que hay cambios
    COPY_TICKS_TIME_MS = 1<<8,    // tiempo en milisegundos
    COPY_TICKS_BID     = 1<<9,    // precio Bid
    COPY_TICKS_ASK     = 1<<10,   // precio Ask
    COPY_TICKS_LAST    = 1<<11,   // precio Last
    COPY_TICKS_VOLUME  = 1<<12,   // volumen
    COPY_TICKS_FLAGS   = 1<<13,   // banderas de tick
    Al seleccionar varios tipos de datos (solo disponible para matrices), el orden de las filas de la matriz se corresponderá con el orden de los valores de la enumeración.

  2. Ampliados los métodos matrix::Assign y vector::Assign.

    Ahora se puede asignar a la matriz un array o vector unidimensional:
    bool matrix::Assign(const vector &vec);
    Obtendremos como resultado una matriz de una línea.

    Ahora también se puede asignar una matriz a un vector (se realizará el suavizado de la matriz):
    bool vector::Assign(const matrix &mat);
  3. Añadidos los métodos Swap para vectores y matrices.
    bool vector::Swap(vector &vec);
    bool vector::Swap(matrix &vec);
    bool vector::Swap(double &arr[]);
    bool matrix::Swap(vector &vec);
    bool matrix::Swap(matrix &vec);
    bool matrix::Swap(double &arr[]);
    Cada array, vector o matriz se refiere a un búfer de memoria que contiene elementos de ese objeto. El método Swap realmente intercambia los punteros a estos búferes sin escribir los elementos en la memoria. Así que una matriz sigue siendo una matriz, y un vector un vector. Al intercambiar una matriz y un vector se obtiene una matriz de una línea con elementos vectoriales y un vector con elementos matriciales en representación plana (puede consultar el método Flat).
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //---
      matrix a= {{1, 2, 3}, {4, 5, 6}};
      Print("a before Swap: \n", a);
      matrix b= {{5, 10, 15, 20}, {25, 30, 35, 40}, {45, 50, 55, 60}};
      Print("b before Swap: \n", b);  
    //--- intercambiamos de sitio los punteros por las matrices
      a.Swap(b);
      Print("a after Swap: \n", a);
      Print("b after Swap: \n", b);
      /*
      a before Swap:
      [[1,2,3]
      [4,5,6]]
      b before Swap:
      [[5,10,15,20]
      [25,30,35,40]
      [45,50,55,60]]
      
      a after Swap:
      [[5,10,15,20]
      [25,30,35,40]
      [45,50,55,60]]
      b after Swap:
      [[1,2,3]
      [4,5,6]]
      */
      vector v=vector::Full(10, 7);
      Print("v before Swap: \n", v);
      Print("b before Swap: \n", b);
      v.Swap(b);
      Print("v after Swap: \n", v);
      Print("b after Swap: \n", b);
      /*
      v before Swap:
      [7,7,7,7,7,7,7,7,7,7]
      b before Swap:
      [[1,2,3]
      [4,5,6]]
      
      v after Swap:
      [1,2,3,4,5,6]
      b after Swap:
      [[7,7,7,7,7,7,7,7,7,7]]
      */
     }
    El método Swap también permite trabajar con arrays dinámicos (no se puede transmitir un array de tamaño fijo como parámetro). En este caso, el array puede ser de cualquier dimensión, pero de un tamaño consistente. Esto significa que el tamaño total de la matriz o del vector deberá ser un múltiplo de la dimensionalidad cero de un array. La dimensionalidad cero de un array es el número de elementos que contiene el primer índice del array. Por ejemplo, para un array dinámico tridimensional double array[][2][3], la dimensionalidad cero será el producto de los tamaños de la segunda y tercera dimensión, es decir, 2x3=6. Por lo tanto, un array de este tipo solo podrá utilizarse en un método Swap con matrices y vectores cuyo tamaño total sea un múltiplo de 6: 6, 12, 18, 24, etc.

    Vamos a mostrar esto con un ejemplo:
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //--- rellenamos la matriz 1x10 con el valor 7.0
      matrix m= matrix::Full(1, 10, 7.0);
      Print("matrix before Swap:\n", m);
    //--- intentamos realizar el intercambio entre la matriz y el array
      double array_small[2][5]= {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}};
      Print("array_small before Swap:");
      ArrayPrint(array_small);
      if(m.Swap(array_small))
       {
        Print("array_small after Swap:");
        ArrayPrint(array_small);
        Print("matrix after Swap: \n", m);
       }
      else // el tamaño de la matriz no es múltiplo del tamaño de la primera dimensión del array
       {
        Print("m.Swap(array_small) failed. Error ", GetLastError());
       }
      /*
      matrix before Swap:
      [[7,7,7,7,7,7,7,7,7,7]]
      array_small before Swap:
               [,0]     [,1]     [,2]     [,3]     [,4]
      [0,]  1.00000  2.00000  3.00000  4.00000  5.00000
      [1,]  6.00000  7.00000  8.00000  9.00000 10.00000
      m.Swap(array_small) failed. Error 4006
      */
    //--- tomamos una matriz mayor e intentamos realizar el intercambio de nuevo
      double array_static[3][10]= {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
         {2, 4, 6, 8, 10, 12, 14, 16, 18, 20},
         {3, 6, 9, 12, 15, 18, 21, 24, 27, 30}
       };
      Print("array_static before Swap:");
      ArrayPrint(array_static);
      if(m.Swap(array_static))
       {
        Print("array_static after Swap:");
        ArrayPrint(array_static);
        Print("matrix after Swap: \n", m);
       }
      else // no se puede utilizar un array dinámico para el intercambio con una matriz
       {
        Print("m.Swap(array_static) failed. Error ", GetLastError());
       }
      /*
      array_static before Swap:
             [,0]     [,1]     [,2]     [,3]     [,4]     [,5]     [,6]     [,7]     [,8]     [,9]
      [0,]  1.00000  2.00000  3.00000  4.00000  5.00000  6.00000  7.00000  8.00000  9.00000 10.00000
      [1,]  2.00000  4.00000  6.00000  8.00000 10.00000 12.00000 14.00000 16.00000 18.00000 20.00000
      [2,]  3.00000  6.00000  9.00000 12.00000 15.00000 18.00000 21.00000 24.00000 27.00000 30.00000
      m.Swap(array_static) failed. Error 4006
      */
    //--- un nuevo intento de de intercambiar el array y la matriz
      double array_dynamic[][10];    // array dinámico
      ArrayResize(array_dynamic, 3); // indicamos el tamaño de la primera dimensión
      ArrayCopy(array_dynamic, array_static);
    //--- ahora utilizaremos un array dinámico para el intercambio
      if(m.Swap(array_dynamic))
       {
        Print("array_dynamic after Swap:");
        ArrayPrint(array_dynamic);
        Print("matrix after Swap: \n", m);
       }
      else //  no hay error
       {
        Print("m.Swap(array_dynamic) failed. Error ", GetLastError());
       }
      /*
      array_dynamic after Swap:
            [,0]    [,1]    [,2]    [,3]    [,4]    [,5]    [,6]    [,7]    [,8]    [,9]
      [0,] 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000
      matrix after Swap:
      [[1,2,3,4,5,6,7,8,9,10,2,4,6,8,10,12,14,16,18,20,3,6,9,12,15,18,21,24,27,30]]
      */
     }
  4. Añadidos los métodos LossGradient para vectores y matrices. Este método calcula un vector o matriz de derivadas parciales de la función de pérdida con respecto a los valores predichos. En álgebra lineal, dicho vector se denomina gradiente y se usa en el aprendizaje automático.
    vector vector::LossGradient(const vector &expected,ENUM_LOSS_FUNCTION loss) const;
    matrix matrix::LossGradient(const matrix &expected,ENUM_LOSS_FUNCTION loss) const;
  5. Habilitado el uso de FOREIGN KEYS en SQLite, lo cual nos permitirá crear relaciones entre tablas en solicitudes SQL.   Ejemplo:
    CREATE TABLE artist(
      artistid    INTEGER PRIMARY KEY, 
      artistname  TEXT
    );
    
    CREATE TABLE track(
      trackid     INTEGER, 
      trackname   TEXT, 
      trackartist INTEGER,
      FOREIGN KEY(trackartist) REFERENCES artist(artistid)
    );

  6. Corregida la selección del método de clase requerido dependiendo de la consistencia del método y el objeto.

MetaEditor

  1. Aumentada la longitud de comentario admitida para las confirmaciones en el repositorio MQL5 Storage.  Los comentarios detallados al enviar cambios al repositorio se consideran de buenos modales al trabajar en grandes proyectos, pero la longitud de tales mensajes antes estaba limitada a 128 caracteres. El límite ahora se ha establecido en 260 caracteres.

MetaTester

  1. Aumentada la sensibilidad en el interruptor de velocidad de simulación en el modo visual.
Correcciones de crash logs.


17 septiembre 2022
MetaTrader 5 build 3440: Nuevo informe sobre la cuenta comercial

Terminal

  1. Añadido un nuevo informe sobre el historial de operaciones de la cuenta. En cuanto a su conjunto de parámetros y presentación de la información, es semejante a los informes ya conocidos sobre las Señales. En la propia plataforma, ahora tendrá también a su disposición:
    • Los valores de crecimiento mensual en forma de gráfico y recuadro
    • Un gráfico del cambio de equidad
    • Un gráfico de radar que le permitirá evaluar rápidamente el estado de su cuenta
    • Estadísticas de las transacciones por instrumentos
    • Muchos indicadores adicionales para el análisis comercial

    Ahora, el informe podrá verse directamente en la plataforma, sin que haya que exportarlo primero a un archivo. Para abrirlo, clique en "Informes" en el menú "Ver".



  2. Corregido el rellenado del tablero de opciones cuando el número o el tipo de instrumento en los contratos Call y Put no coinciden.
  3. Corregida la selección incorrecta de la posición en la ventana de diálogo comercial al cerrar una posición con otra opuesta. El error se producía al clasificar las órdenes opuestas disponibles según cualquier columna que no fuera el ticket.
  4. Acelerada la muestra de entradas en el diario de registro de la plataforma.
  5. Corregida la representación de los comentarios en los gráficos de los símbolos de usuario.

MQL5

  1. Corregida la operación de la función CArrayList::LastIndexOf. Antes, siempre retornaba -1 en lugar del índice del último elemento encontrado.
  2. Añadido el método de vectores y matrices Assign. Este permite sustituir el contenido de una matriz/vector por los datos de la matriz/vector o array transmitidos.
    bool vector<TDst>::Assign(const vector<TSrc> &assign);
    bool matrix<TDst>::Assign(const matrix<TSrc> &assign);
    
    Ejemplo:
      //--- copying matrices
      matrix b={};
      matrix a=b;
      a.Assign(b);
      
      //--- copying an array to a matrix
      double arr[5][5]={{1,2},{3,4},{5,6}};
      Print("array arr");
      ArrayPrint(arr);
      b.Assign(arr);
      Print("matrix b \n",b);
    /*
    array arr
            [,0]    [,1]    [,2]    [,3]    [,4]
    [0,] 1.00000 2.00000 0.00000 0.00000 0.00000
    [1,] 3.00000 4.00000 0.00000 0.00000 0.00000
    [2,] 5.00000 6.00000 0.00000 0.00000 0.00000
    [3,] 0.00000 0.00000 0.00000 0.00000 0.00000
    [4,] 0.00000 0.00000 0.00000 0.00000 0.00000
    matrix b 
    [[1,2,0,0,0]
     [3,4,0,0,0]
     [5,6,0,0,0]
     [0,0,0,0,0]
     [0,0,0,0,0]]
    
    */

  3. Añadido el método de vectores y matrices CopyRates. Permite copiar fácilmente los arrays de datos de precios en vectores y matrices.
    bool matrix::CopyRates(string symbol,ENUM_TIMEFRAMES period,ulong rates_mask,ulong from,ulong count);
    bool vector::CopyRates(string symbol,ENUM_TIMEFRAMES period,ulong rates_mask,ulong from,ulong count);
    El tipo de datos a copiar se indica en el parámetro rates_mask usando la enumeración ENUM_COPY_RATES. Están disponibles los siguientes valores:
    COPY_RATES_OPEN
    COPY_RATES_HIGH
    COPY_RATES_LOW
    COPY_RATES_CLOSE
    COPY_RATES_TIME
    COPY_RATES_VOLUME_TICK
    COPY_RATES_VOLUME_REAL
    COPY_RATES_SPREAD
    COPY_RATES_OHLC
    COPY_RATES_OHLCT
    Los dos últimos valores sirven para seleccionar a la vez y de forma sencilla varios parámetros básicos de la barra: precios Open, High, Low, Close y la hora.

    Si se seleccionan varios tipos de datos (algo solo disponible para las matrices), el orden de las filas de la matriz se corresponderá con el orden de los valores en la enumeración.

  4. Corregida la representación de los objetos "Marca de texto". Al utilizar las propiedades OBJPROP_XOFFSET y OBJPROP_YOFFSET, podía mostrarse un fragmento de imagen incorrecto en el gráfico.

  5. Corregido el error de cambio de un parámetro constante transmitido a una función como referencia a un puntero de objeto.

    Recordemos que el especificador const declara una variable como constante y no permite cambiar el valor de esa variable en la ejecución del programa. Solo permite la inicialización única de la variable al realizarse su declaración. Ejemplo de constantes en la función OnCalculate:

    int OnCalculate (const int rates_total,      // price[] array size
                     const int prev_calculated,  // bars processed on previous call
                     const int begin,            // meaningful data starts at
                     const double& price[]       // array for calculation
       );
    

    Sin embargo, en el ejemplo siguiente, se encontró un error del compilador que permitía la conversión implícita de punteros para los parámetros de referencia:

    class A {};
    const A *a = new A;
    
    void foo( const A*& b )
      {
       b = a;
      }
    
    void OnStart()
      {
            A *b; 
            foo(b);  // no permitido
            Print( a,":",b );
      }
    Esta operación no válida será ahora detectada por el compilador y generará un error.

MetaEditor

  1. Corregida la representación de referencias a números complejos en el depurador.
  2. Mejorado el funcionamiento del MQL5 Cloud Protector. Antes, en raras ocasiones, la protección de archivos podía finalizar con un error.
  3. Correcciones de crash logs.


Nuevo terminal web de MetaTrader 5

Le presentamos el nuevo terminal web para MetaTrader 5. Lo hemos hecho más moderno y rápido, no solo actualizando su aspecto, sino también reescribiendo completamente el núcleo. En cuanto a su interfaz, el terminal web ahora se parece a la ya conocida versión de la plataforma para iPad:




En comparación con la versión anterior, tiene multitud de características nuevas:

  • Posibilidad de solicitar cuentas reales rellenando un formulario de registro detallado y proporcionando documentos de confirmación
  • Soporte de suscripción de datos de precios y posibilidad de recibir cotizaciones en diferido
  • Más objetos de análisis, con una gestión más cómoda
  • Visualización de las entradas y salidas del mercado en el gráfico
  • Representación en el gráfico de los eventos del calendario económico
  • Cómodo ajuste de instrumentos en la Observación de Mercado, visualización de los movimientos de precio diarios
  • La interfaz se ha simplificado considerablemente: hemos eliminado el menú contextual del gráfico y el menú superior; todos los comandos para la gestión del gráfico y la superposición de objetos e indicadores han sido colocados en los paneles izquierdo y superior; los comandos restantes se han colocado en un único menú-hamburguesa
  • Tema nocturno de la interfaz

Pruebe ahora el nuevo terminal web en www.mql5.com. Sus brókeres lo tendrán pronto a su disposición.

4 agosto 2022
MetaTrader 5 build 3390: Float en OpenCL y funciones matemáticas, métodos de activación y pérdida para el aprendizaje automático

Terminal

  1. Añadida la apertura automática del tutorial la primera vez que se conecte a su cuenta comercial. Esto permitirá a los principiantes aprender los fundamentos del comercio más rápidamente y familiarizarse con las características de la plataforma directamente en el terminal. El tutorial está dividido en varias secciones, cada una con una breve información. El progreso de la rúbrica se mostrará con una línea azul.

    Añadida la apertura automática del tutorial la primera vez que se conecte a su cuenta comercial.

  2. Corregido el error de las operaciones grupales "Cerrar posiciones con beneficios/pérdidas". Antes, la plataforma usaba las posiciones opuestas para cerrar las posiciones correspondientes, si las había. Por ejemplo, si teníamos dos posiciones de compra con pérdidas en EURUSD y una posición de venta con beneficios en EURUSD, al realizar el cierre masivo de las posiciones con pérdidas, las tres posiciones existentes se cerrarían. Las posiciones Buy y Sell se cerrarían con una operación Close by, mientras que la posición Buy restante se cerraría con una operación de cierre normal. Los comandos ahora funcionan según lo previsto, cerrando solo las posiciones seleccionadas, sean o no rentables.

  3. Corregida la visualización de la historia de precios para los precios negativos en los gráficos del periodo D1. Los gráficos de precios negativos se muestran ahora correctamente en todos los marcos temporales.
  4. Optimizado y significativamente reducido el consumo de recursos del sistema por parte del terminal.
  5. Actualizada la base de datos fundamentales de los instrumentos comerciales. El número de agregadores disponibles para ver un instrumento bursátil se ha ampliado a 15, lo cual le permitirá encontrar información sobre el mayor número posible de tickers en los agregadores económicos más populares.

    Actualizada la base de datos fundamentales de los instrumentos comerciales

    En todo el mundo cotizan al menos 7.000 acciones líquidas y más de 2.000 ETF. Además, hay muchos futuros y otros derivados. La plataforma MetaTrader 5 contiene una enorme base de datos de instrumentos bursátiles y le permite ir directamente desde la Observación de Mercado a la página web del agregador en un solo clic para obtener datos fundamentales. Para la comodidad de los inversores, ofrecemos una variedad de fuentes de información a elegir para cada valor.

  6. Corregido el ajuste de los niveles de Stop Loss y Take Profit en la nueva ventana de colocación de nuevas órdenes. En el caso de las cuentas FIFO, los niveles de stop se fijarán ahora de manera automática según los niveles de stop de las posiciones ya abiertas para el mismo instrumento. Esto será necesario para cumplir con la regla FIFO.

MQL5

  1. Las funciones matemáticas ahora pueden trabajar con matrices y vectores.

    Seguimos ampliando las capacidades de la plataforma MetaTrader 5 para el trading algorítmico y el aprendizaje automático. Antes, añadimos un nuevo tipo de datos, matrices y vectores, que nos permite eliminar el uso de arrays para el procesamiento de datos. Para manejarlos, hemos añadido al lenguaje MQL5 más de 70 métodos que nos permiten realizar cálculos de álgebra lineal y estadística como una sola operación. La multiplicación, la conversión y la resolución de un sistema de ecuaciones se realizan ahora de forma sencilla y sin programación innecesaria. La incorporación de nuevos tipos no ha dejado intactas las funciones matemáticas.

    Las funciones matemáticas se diseñaron originalmente para realizar operaciones matemáticas con cantidades escalares. Ahora la mayoría de estas funciones pueden utilizarse con los nuevos tipos de datos (matrices y vectores) MathAbs, MathArccos, MathArcsin, MathArctan, MathCeil, MathCos, MathExp, MathFloor, MathLog, MathLog10, MathMod, MathPow, MathRound, MathSin, MathSqrt, MathTan, MathExpm1, MathLog1p, MathArccosh, MathArcsinh, MathCosh, MathSinh, MathTanh. En este caso, la matriz o el vector se procesarán término a término. Ejemplo:
    //---
      matrix a= {{1, 4}, {9, 16}};
      Print("matrix a=\n",a);
    
      a=MathSqrt(a);
      Print("MatrSqrt(a)=\n",a);
      /*
       matrix a=
       [[1,4]
        [9,16]]
       MatrSqrt(a)=
       [[1,2]
        [3,4]]
      */
    En el caso de MathMod y MathPow, el segundo parámetro podrá ser un escalar, o una matriz o vector del tamaño correspondiente.

    Vamos a mostrar con un ejemplo cómo calcular la desviación estándar usando las funciones matemáticas sobre un vector.
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //--- используем инициализирующую функцию для заполнения вектора
      vector r(10, ArrayRandom); // массив случайных чисел от 0 до 1
    //--- вычислим среднее значение
      double avr=r.Mean();       // среднее значение массива
      vector d=r-avr;            // вычислим массив отклонений от среднего значения
      Print("avr(r)=", avr);
      Print("r=", r);
      Print("d=", d);
      vector s2=MathPow(d, 2);   // массив квадратов отклонений
      double sum=s2.Sum();       // сумма квадратов отклонений
    //--- вычислим стандартное отклонение 2-мя способами
      double std=MathSqrt(sum/r.Size());
      Print(" std(r)=", std);
      Print("r.Std()=", r.Std());    
     }
    /*
      avr(r)=0.5300302133243813
      r=[0.8346201971495713,0.8031556138798182,0.6696676534318063,0.05386516922513505,0.5491195410016175,0.8224433118686484,...
      d=[0.30458998382519,0.2731254005554369,0.1396374401074251,-0.4761650440992462,0.01908932767723626,0.2924130985442671, ...
       std(r)=0.2838269732183663
      r.Std()=0.2838269732183663
    */ 
    //+------------------------------------------------------------------+
    //| Заполняет вектор случайными значениями                           |
    //+------------------------------------------------------------------+
    void ArrayRandom(vector& v)
     {
      for(ulong i=0; i<v.Size(); i++)
        v[i]=double(MathRand())/32767.;
     }
    

  2. Las funciones de plantilla pueden ahora utilizar las entradas matrix<double>, matrix<float>, vector<double>, vector<float> en lugar de los tipos de matriz correspondientes, matrixf, vector, vectorf.
  3. Mejoradas las funciones matemáticas para trabajar con el tipo float. Debido a la nueva posibilidad de aplicar funciones matemáticas a matrices y vectores de tipo float, también se han mejorado las funciones correspondientes aplicadas a escalares del tipo float. Antes, los parámetros de estas funciones se convertían incondicionalmente al tipo double, se llamaba a la implementación correspondiente de la función matemática y luego el resultado se convertía en float. Ahora, en el caso del tipo float, los parámetros y los resultados no se convierten, ya que se llaman las implementaciones de las funciones matemáticas correspondientes al tipo float.

    Diferencia en los cálculos usando como ejemplo el seno matemático:

    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //---  массив случайных чисел от 0 до 1
      vector d(10, ArrayRandom);
      for(ulong i=0; i<d.Size(); i++)
       {
        double delta=MathSin(d[i])-MathSin((float)d[i]);
        Print(i,". delta=",delta);
       }
     }
    /*
       0. delta=5.198186103783087e-09
       1. delta=8.927621308885136e-09
       2. delta=2.131878673594656e-09
       3. delta=1.0228555918923021e-09
       4. delta=2.0585739779477308e-09
       5. delta=-4.199390279957527e-09
       6. delta=-1.3221741035351897e-08
       7. delta=-1.742922250969059e-09
       8. delta=-8.770715820283215e-10
       9. delta=-1.2543186267421902e-08
    */
    //+------------------------------------------------------------------+
    //| Заполняет вектор случайными значениями                           |
    //+------------------------------------------------------------------+
    void ArrayRandom(vector& v)
     {
      for(ulong i=0; i<v.Size(); i++)
        v[i]=double(MathRand())/32767.;
     }

  4. Añadidos los métodos de matrices y vectores Activation (función de activación) y Derivative (derivada de la función de activación) con los parámetros:
    AF_ELU               Exponential Linear Unit
    AF_EXP               Exponential
    AF_GELU              Gaussian Error Linear Unit
    AF_HARD_SIGMOID      Hard Sigmoid
    AF_LINEAR            Linear
    AF_LRELU             Leaky REctified Linear Unit
    AF_RELU              REctified Linear Unit
    AF_SELU              Scaled Exponential Linear Unit
    AF_SIGMOID           Sigmoid
    AF_SOFTMAX           Softmax
    AF_SOFTPLUS          Softplus
    AF_SOFTSIGN          Softsign
    AF_SWISH             Swish
    AF_TANH              Hyperbolic Tangent
    AF_TRELU             Thresholded REctified Linear Unit
    La función de activación en una red neuronal determina cómo la suma ponderada de la señal de entrada se transforma en la señal de salida de un nodo o varios nodos a nivel de red. La elección de la función de activación ejerce una gran influencia en las capacidades y el rendimiento de la red neuronal. Las diferentes partes del modelo pueden usar funciones de activación distintas. En MQL5 no solo se implementan todas las funciones de activación conocidas, sino también las derivadas de la función de activación. Las funciones derivadas son necesarias a la hora de calcular rápidamente una corrección basada en el error resultante durante el entrenamiento de una red neuronal.
  5. Añadido el método de matrices y vectores Loss (función de pérdida) con los siguientes parámetros:
    LOSS_MSE            Mean Squared Error
    LOSS_MAE            Mean Absolute Error
    LOSS_CCE            Categorical Crossentropy
    LOSS_BCE            Binary Crossentropy
    LOSS_MAPE           Absolute Percentage Error
    LOSS_MSLE           Mean Squared Logarithmic Error
    LOSS_KLD            Kullback-Leibler Divergence
    LOSS_COSINE         Cosine similarity/proximity
    LOSS_POISSON        Poisson
    LOSS_HINGE          Hinge
    LOSS_SQ_HINGE       Squared Hinge
    LOSS_CAT_HINGE      Categorical Hinge
    LOSS_LOG_COSH       Logarithm of the Hyperbolic Cosine
    LOSS_HUBER          Huber

    La función de pérdida se encarga de valorar lo bien que el modelo predice el valor real. La construcción del modelo se reduce a resolver el problema de la minimización del valor de esta función en cada etapa. Dependiendo del tipo de datos, se requerirán enfoques distintos, es decir, funciones diferentes. La función de pérdida también puede depender de las variables de los pesos y el desplazamiento. La función de pérdida es unidimensional y no supone un vector, ya que evalúa el rendimiento global de la red neuronal.

  6. Añadidos los métodos de matrices y vectores matrix::CompareByDigits y vector::CompareByDigits. Estos comparan los elementos de dos matrices/vectores para que coincidan los dígitos significativos.

  7. Añadido el soporte para las funciones MathMin y MathMax para líneas. En este caso, las funciones utilizarán la comparación lexicográfica: las letras se compararán según el alfabeto y distinguiendo entre mayúsculas y minúsculas.

  8. Aumentado el número máximo de objetos OpenCL de 256 a 65536. Los manejadores de los objetos OpenCL en el programa MQL5 se crean mediante las funciones CLContextCreate, CLBufferCreate y CLProgramCreate. La anterior limitación de 256 manejadores no permitía usar métodos eficaces de aprendizaje automático.

  9. Permitido el uso de OpenCL en tarjetas sin soporte de double. Antes, los programas MQL5 ciertamente solo usaban GPUs con soporte de double, aunque muchas tareas permiten y están diseñadas para los cálculos con uso de float. El tipo float se considera originalmente nativo de la computación paralela porque ocupa menos espacio. Este requisito ha sido eliminado.

    Si el problema requiere usar solo GPUs que soporten double, esto podrá indicarse explícitamente al llamar a CLContextCreate utilizando el nuevo valor CL_USE_GPU_DOUBLE_ONLY (solo se permiten dispositivos con soporte de cálculos de tipo double).
       int cl_ctx;
    //--- инициализация OpenCL контекста
       if((cl_ctx=CLContextCreate(CL_USE_GPU_DOUBLE_ONLY))==INVALID_HANDLE)
         {
          Print("OpenCL not found");
          return;
         }

  10. Corregida la función CustomBookAdd. Antes, si se indicaba un valor nulo en el campo MqlBookInfo::volume_real, no se creaba una instantánea de la profundidad de mercado. La comprobación ahora se realiza de la siguiente forma:
    Se comprueba que los datos transmitidos sean correctos: para cada elemento hay que especificar el tipo, el precio y el volumen. MqlBookInfo.volume y MqlBookInfo.volume_real no deben ser cero o negativos: si ambos volúmenes son negativos, se considerará un error. Se puede especificar uno o ambos volúmenes; se tomará el indicado o el que sea positivo:

       volume=-1 && volume_real=2 — se utilizará volume_real=2,

       volume=3 && volume_real=0 — se utilizará volume=3.

    El volumen con la precisión MqlBookInfo.volume_real tiene mayor prioridad en comparación con MqlBookInfo.volume normal. Si se especifican ambos valores para un elemento de la profundidad de mercado, se usará volume_real.

    Si al menos un elemento de la profundidad de mercado se describe de forma incorrecta, el sistema descartará por completo el estado transmitido.

  11. Corregida la función CalendarValueLast. En algunos casos, se daba un error consistente en que las llamadas sucesivas a la función después de los cambios en el calendario económico (el parámetro de cambio recibía un nuevo valor después de la llamada) podían pasar por alto los eventos al usar el filtro según la divisa.
    CalendarValueLast(change, result, "", "EUR")
  12. Corregido el comportamiento de la función ArrayBSearch: si hay varios elementos idénticos, se retornará el enlace al primero por orden, en lugar de uno aleatorio, como antes.
  13. Corregida la visibilidad de la función de plantilla en la clase. El error consistía en que las funciones de plantilla de las clases declaradas como privadas/protegidas estaban en realidad disponibles públicamente (public).

MetaEditor

  1. Corregidos los errores y el comportamiento ambiguo de MetaAssist.
  2. Añadido el soporte para la macro %terminal%, que indica la ruta al directorio de datos de la plataforma donde se encuentra instalado este terminal. Por ejemplo, %terminal%\MQL5\Experts. 


    Añadido el soporte para la macro %terminal%, que indica la ruta al directorio de datos de la plataforma donde se encuentra instalado este terminal.

  3. Mejorada la visualización de arrays en el depurador.
  4. Aumentado el búfer para copiar valores del depurador.
  5. Mejoradas las indicaciones de error.
  6. Las rutas relativas se escriben ahora en el archivo *.mproj del proyecto. Antes, las rutas eran absolutas, lo cual provocaba errores de compilación al mover el proyecto.
  7. Añadida la incorporación automática de recursos BMP como matrices de mapas de bits de 32 bits disponibles globalmente cuando se incluyen en los proyectos. Esto elimina la necesidad de llamar a ResourceReadImage en el código para leer el recurso gráfico.
    'levels.bmp' as 'uint levels[18990]'
    
  8. Mejorada la lectura de los formatos extendidos de los archivos BMP.
  9. Actualizadas las traducciones de la interfaz de usuario.
  10. Correcciones de crash logs.


27 mayo 2022
MetaTrader 5 build 3320: Mejoras y correcciones

Terminal

  1. Ampliadas las pistas sobre los objetos comerciales mostrados en los gráficos.
    • Para las transacciones de salida del mercado se ha añadido la muestra del beneficio.
    • Para las transacciones realizadas como resultado de la activación de un Take Profit o un Stop Loss, se ha añadido la indicación correspondiente: TP/SL.

    Asimismo, se han añadido pistas similares a las líneas que conectan las transacciones de entrada y salida.

    Información extendida sobre herramientas para los objetos comerciales


  2. Acelerado el funcionamiento del sistema gráfico.
  3. Añadido el registro de operaciones grupales en las órdenes y posiciones abiertas. Al ejecutarse un comando de este tipo, se registrará un mensaje del tipo "bulk closing of XXX positions started".
  4. Corregido el cierre grupal de las posiciones opuestas.
  5. Corregida la actualización de los objetos que muestran la historia de transacciones en el gráfico. El error se producía al cambiar el instrumento comercial en el gráfico.

MQL5

  1. Continúa el trabajo relacionado con las funciones para las matrices y vectores: se ha añadido el soporte para float y complex.
  2. El operador "!" (LNOT) para un puntero comprueba ahora su validez usando una llamada implícita a la función CheckPointer Para comprobar rápidamente la existencia de NULL, use el operador "==". Por ejemplo: ptr==NULL o ptr!=NULL.

MetaTester

  1. Corregida la representación de objetos comerciales en el gráfico de prueba.
  2. Acelerado el funcionamiento del sistema gráfico.

MetaEditor

  • Actualizadas las traducciones de la interfaz.

Correcciones de crash logs.

20 mayo 2022
MetaTrader 5 build 3300: Compilación rápida y mejor navegación por el código de MetaEditor

Terminal

  1. Se agregó la capacidad de cambiar el tamaño del objeto gráfico "Rectángulo" arrastrando cualquiera de las cuatro esquinas.


  2. Se aceleró la representación generada por GUI.
  3. Se mejoró la compatibilidad con direcciones IPv6.
  4. Se corrigió el cálculo de la altura del campo de fecha y el ancho del campo de precio, durante la primera inicialización de la plataforma.

MQL5

  1. Se agregó la función para manejar matrices y vectores — RegressionMetric. Especifica el cálculo para evaluar la regresión.
     double vector.RegressionError(const enum lr_error);
     double matrix.RegressionError(const enum lr_error);
     vector matrix.RegressionError(const enum lr_error,const int axis);
    Los cálculos que se pueden utilizar son:
    enum REGRESSION_ERROR
      {
       REGRESSION_MAE,     // Error medio absoluto
       REGRESSION_MSE,     // Error medio cuadrático
       REGRESSION_RMSE,    // Raíz del error medio cuadrático
       REGRESSION_R2,      // R al cuadrado
       REGRESSION_MAPE,    // Error medio absoluto en porcentaje
       REGRESSION_MSPE,    // Error medio cuadrático en porcentaje
       REGRESSION_RMSLE    // Error medio logarítmico cuadrático
      };
  2. Se agregó la función para escribir matrices con un tamaño de datos superior a INT_MAX (matrices de estructuras).

MetaEditor

  1. Se ha rediseñado el panel de pestañas:
    • El panel no está oculto incluso si solo hay una ventana abierta. Por lo tanto, los comandos del menú contextual de la pestaña siempre están disponibles.
    • Se ha agregado un botón "X" a cada pestaña, este sirve para cerrar la misma. Además, las pestañas se pueden cerrar con el botón central del mouse o mediante el menú contextual.


  2. Se ha agregado el comando para la compilación rápida de programas. No se realiza optimización de código en este modo, lo que reduce significativamente el tiempo necesario para crear un archivo EX5 ejecutable. Utilice este modo cuando se encuentre en una etapa activa de desarrollo y necesite verificar rápidamente el código escrito. Al compilar el programa, cambie al modo de máxima optimización para obtener el mejor rendimiento.


    El parámetro "Máxima optimización" en la configuración del proyecto realiza la misma función.
    Todas las operaciones relacionadas con la compilación se han colocado en el menú "Compilación".

  3. Se ha mejorado la gestión de código:
    • Se separaron los comandos para acceder a la declaración y la implementación. Anteriormente, se usaba un comando que mostraba un menú de selección. Ahora se puede saltar inmediatamente a la parte necesaria del código.
    • Se agregó el reemplazo de la palabra clave asignada presionando "Tab" además de "Enter".




  4. Se ha agregado visualización automática de variables locales en la lista de observación del depurador. Para ello, active la opción "Locales" en el menú contextual. Durante la depuración, mientras navega por el código, las variables del ámbito actual aparecerán automáticamente en la lista.


  5. Se ha mejorado el funcionamiento de la lista de observación para vectores y matriz en el depurador.
  6. Se han corregido las rutas a archivos de proyecto. El error podía provocar la desaparición de archivos.

Tester

  1. Se ha mejorado la desconexión de los agentes de prueba al apagar la plataforma.
  2. Se agregó un quinto nodo a la MQL5 Cloud Network. Este se encuentra en Hong Kong. Esto acelerará la optimización de los robots que utilizan la red en las regiones más cercanas.

Correcciones de crash-logs.


29 abril 2022
MetaTrader 5 build 3280: Mejoras y correcciones según los comentarios de los tráders

Terminal

  1. Corregido el rellenado de los niveles estándar de Trailing Stop en el menú contextual de órdenes y posiciones abiertas.



  2. Actualizadas las traducciones de la interfaz de usuario.

Correcciones de crash logs.
21 abril 2022
MetaTrader 5 build 3270: Mejoras y correcciones

Terminal

  1. Mejorado el chat incorporado:
    • Diseño actualizado: ahora los mensajes se muestran sin burbujas circundantes, despejando las ventanas de diálogo de detalles innecesarios. Añadidos avatares y separadores de fechas.
    • Asimismo, hemos añadido al menú de mensajes los comandos de copiado y borrado.
    • Corrección de errores y mejora de la estabilidad.



  2. Corregido el funcionamiento del comando para el cierre masivo de posiciones. Un error surgía en las cuentas con sistema de cobertura de registro de posiciones.
  3. Corregido el registro de algunos tipos de transacciones al formarse la historia de posiciones.

Correcciones de crash logs.
previa123456789101112131415