---
title: "MetaTrader 5 build 3620: mejoras en el terminal web, soporte de ONNX y multiplicación acelerada de matrices en MQL5 - Últimas actualizaciones"
description: "Añadido el soporte para trabajar con modelos ONNX (Open Neural Network Exchange). ONNX es una biblioteca abierta para construir redes... - Últimas actualizaciones"
image: "https://www.metatrader5.com/c/17/1/public-project.png"
---

# MetaTrader 5 build 3620: mejoras en el terminal web, soporte de ONNX y multiplicación acelerada de matrices en MQL5

## 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

10 marzo 2023

### Terminal

1. Corregido el error en el cálculo del beneficio final en el [informe comercial](https://www.metatrader5.com/es/releasenotes/terminal/2251).
2. Actualizados los [datos fundamentales](https://www.metatrader5.com/es/terminal/help/trading/market_watch#fundamental) 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](https://www.metatrader5.com/es/terminal/help/start_advanced/install_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](https://es.wikipedia.org/wiki/Intercambio_de_redes_neuronales_abiertas) (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](https://www.mql5.com/go?link=https://chainer.org/), [Caffee2](https://www.mql5.com/go?link=https://caffe2.ai/) y [PyTorch](https://www.mql5.com/go?link=https://pytorch.org/). Al crear un modelo ONNX usando herramientas especializadas, podemos integrarlo en nuestro programa MQL5 y utilizarlo para tomar decisiones comerciales. La [documentación](https://www.mql5.com/es/docs/onnx) incluye una descripción de todas las funciones compatibles. Encontrará un ejemplo de trabajo con un modelo de prueba en los [proyectos públicos](https://www.metatrader5.com/es/metaeditor/help/mql5storage/projects#public) 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](https://www.metatrader5.com/c/17/1/public-project.png)

   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](https://www.mql5.com/es/docs/onnx) 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](https://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms#Level_3) (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](https://en.wikipedia.org/wiki/Math_Kernel_Library) (MKL) y [OpenBLAS](https://en.wikipedia.org/wiki/OpenBLAS). En breve publicaremos pruebas comparativas detalladas. Actualmente, el nuevo algoritmo es compatible con el método [matrix::GeMM](https://www.mql5.com/es/docs/matrix/matrix_products/matrix_gemm). Si su procesador admite las instrucciones [AVX](https://es.wikipedia.org/wiki/AVX) y [FMA](https://en.wikipedia.org/wiki/FMA_instruction_set) (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](https://www.mql5.com/es/docs/basis/preprosessor/import) 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](https://www.mql5.com/es/docs/series/copyseries) para copiar series temporales sincronizadas desde [MqlRates](https://www.mql5.com/es/docs/constants/structures/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](https://www.mql5.com/es/docs/constants/structures/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](https://www.mql5.com/es/docs/constants/structures/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](https://www.mql5.com/es/docs/trading/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](https://www.metatrader5.com/es/metaeditor/help/mql5storage/projects#shared). 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](https://www.mql5.com/es/articles/476) en la sección "Ajustes \ Seguridad" de su perfil en [MQL5.community](https://www.mql5.com/).

   ![Notificaciones push sobre cambios en el proyecto](https://www.metatrader5.com/c/17/1/notification__iphone.jpg)
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](https://www.metatrader5.com/c/17/1/web-color-scheme.jpg)
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](https://www.metatrader5.com/c/17/1/web-specification.jpg)
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.

**Lea las noticias anteriores:**

- [MetaTrader 5 para iPhone/iPad: mejora de las funciones comerciales y analíticas de los gráficos](https://www.metatrader5.com/es/releasenotes/terminal/2277)
- [MetaTrader 5 build 3550: mejoras y correcciones](https://www.metatrader5.com/es/releasenotes/terminal/2265)
- [MetaTrader 5 build 3540: Autenticación 2FA/TOTP y Observación de Mercado mejorada en el terminal web](https://www.metatrader5.com/es/releasenotes/terminal/2264)
- [MetaTrader 5 build 3520: añadida la autenticación 2FA/TOTP con Google Authenticator](https://www.metatrader5.com/es/releasenotes/terminal/2262)
- [MetaTrader 5 build 3510: mejoras del terminal web](https://www.metatrader5.com/es/releasenotes/terminal/2261)
