¿Qué novedades tiene MetaTrader 5?

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

26 febrero 2021
MetaTrader 5 build 2815: Acceso a la profundidad de mercado desde Python, mejoras en el depurador y el perfilador

Terminal

  1. Añadida la posibilidad de obtener los datos de la profundidad de mercado a través de Python API.
    Las tres nuevas funciones permiten obtener de forma fácil y rápida los datos para los cálculos estadísticos y el aprendizaje automático utilizando una gran cantidad de bibliotecas Python listas para usar.
    • market_book_add — realiza la suscripción del terminal MetaTrader 5 para recibir eventos sobre los cambios en la profundidad de mercado del símbolo indicado.
    • market_book_get — retorna desde BookInfo la tupla que contiene las entradas de la profundidad de mercado del símbolo indicado.
    • market_book_release — cancela la suscripción del terminal MetaTrader 5 para recibir eventos sobre los cambios en la profundidad de mercado del símbolo indicado.

  2. La longitud máxima de los mensajes Push ha aumentado de 256 a 1024 caracteres. Ahora, usted podrá enviar mucha más información a los dispositivos móviles desde sus programas MQL5.
  3. Añadida la versión preliminar del "Administrador de tareas" llamada con la tecla F2.
    El administrador de tareas es un sistema que monitorea los recursos utilizados por la plataforma. En él podrá ver cuánta memoria consumen los gráficos, cuántos recursos del procesador usan los asesores, etcétera. Si algo está ralentizando la velocidad de su plataforma, podrá detectar y solucionar fácilmente el problema.



  4. Mejorado el servicio "Suscripciones". Se ha añadido una indicación especial para los instrumentos comerciales cuyos datos se transmiten con retraso:
    • Los símbolos en la "Observación de mercado" están marcados con un icono en forma de reloj; el valor de retraso se muestra con una pista emergente
    • En los gráficos se muestra una notificación sobre el retraso de los datos



  5. Corregida la representación de la lista de suscripciones cuando no existe conexión a la cuenta comercial.
  6. Corregido el funcionamiento de los enlaces en los emails y noticias. Ahora se abren en el navegador por defecto. Antes se utilizaba para ello Internet Explorer.
  7. Corregidas las conexiones desde WebRequest a los hosts con direcciones IPv6 y protección de Cloudflare.
  8. Mejorada la funcionalidad y la respuesta del servicio VPS.
  9. Mejorado el funcionamiento de la plataforma con Wine y MacOS/Crossover, incluida la versión de macOS Big Sur con procesador M1.

MQL5

  1. Corregido el error de la función ArrayPrint. Antes, en algunos casos, la función podía no mostrar la matriz.
  2. Optimizadas las operaciones de archivo ejecutadas con la ayuda de las funciones File*. Ahora, la lectura y el guardado de archivos se realiza sustancialmente más rápido.
  3. Eliminada la restricción que requería especificar el tamaño de las dimensiones segunda, tercera y cuarta de una matriz dinámica al utilizar esta como parámetro de función. Esto aumentará las posibilidades de reutilización y la flexibilidad de su código.
    void func(int &arr[ ][ ][ ][ ])
      {
      }
  4.  Corregido el error de funcionamiento en la función ArrayBsearch. Al realizar la búsqueda binaria de un valor en una matriz clasificada, la función podía retornar incorrectamente el índice del elemento encontrado.

MetaEditor

  1. Continúan los trabajos de actualización global del depurador.

    • Al mostrar las matrices en la ventana de observación, se tiene en cuenta la clasificación especificada por la función ArraySetAsSeries.
    • Añadido el soporte de variables estáticas locales.
    • Corregida la representación del valor del elemento de matriz especificado.
    • Corregido el procesamiento de los campos static de las clases.
    • Multitud de correcciones para una depuración más precisa y fiable.

  2. Añadida la opción "Activar optimización al realizar perfilado"
    Para aumentar el volumen de detalle del informe de perfilado, podrá desactivar el modo de optimización de código. Sin optimización, la velocidad del código puede disminuir varias veces, pero a cambio podrá ver una cobertura de código más amplia. Tenga en cuenta que al usar el código, los cuellos de botella resultarán imprecisos.
    Para utilizar un modo de perfilado más suave, desactive la opción "Usar inlining al realizar el perfilado".



    Asimismo, existe la posibilidad de gestionar la optimiazación del código los ajustes de los proyectos.
    • Si la optimización está desactivada en el proyecto, la nueva opción se ignorará; la optimización siempre está desactivada para el perfilado (incluido el inlining).
    • Si la optimización está activada en el proyecto, la nueva opción se considerará al compilar para el perfilado.

  3. Añadido el registro al realizar la depuración y el perfilado. Durante inicio, en el registro se muestra la configuración del entorno, mientras que al interrumpirse el proceso, se muestran estadísticas sobre los datos recopilados.
    MQL5 profiler    starting 'ExpertMACD.ex5' on history with parameters:
    MQL5 profiler       symbol: 'EURUSD'
    MQL5 profiler       period: 'H1'
    MQL5 profiler       date from: '2021.01.01'
    MQL5 profiler       date to: '2021.02.22'
    MQL5 profiler       ticks mode: 'every tick'
    MQL5 profiler       execution delay: 0 ms
    MQL5 profiler       deposit: 10000
    MQL5 profiler       currency: 'USD'
    MQL5 profiler       leverage: 1:100
    MQL5 profiler       profit in pips: NO
    MQL5 profiler    profile data received (4640 bytes)
    MQL5 profiler    758 total measurements, 0/0 errors, 470 kb of stack memory analyzed
    MQL5 profiler    7782 total function frames found (1929 mql5 code, 342 built-in, 1403 other, 4108 system)

Tester

  1. Corregida la especificación de las horas no comerciales en los ajustes de simulación ampliados.

Documentación actualizada.
15 enero 2021
MetaTrader 5 build 2755: Mejoras en la ventana de cotizaciones y el depurador

Terminal

  1. Rediseñada la ventana de cotizaciones; ahora, podrá ver los precios de los instrumentos en pantallas de cualquier tamaño.

    Ahora, la información en ella se puede mostrar en varias columnas, lo cual permite optimizar el espacio en la pantalla. Para alternar el modo de muestra, use el cuadro de diálogo de propiedades de la ventana.


    Aparte de ello, se han introducido varias mejoras:

    • Añadido menú de selección de columnas. Ahora, podrá encontrar en este las mismas propiedades del instrumento que en la ventana de "Observación de Mercado".
    • Optimizado el trabajo con un gran número de instrumentos. Ahora, la ventana funciona igual de bien tanto si se muestran 10 instrumentos, como si se muestran 1000.
    • Añadida la representanción de información breve sobre el instrumento en las pistas emergentes.
    • Corregida la aplicación de los ajustes de color para representar los precios ascendentes y descendentes.

  2. Añadida la muestra de transacciones en el gráfico de ticks de la profundidad de mercado sintética.

    La profundidad de mercado sintética se usa para los símbolos de los que no se retransmiten los precios Level 2. Los niveles se construyen automáticamente, a partir de los mejores precios Bid y Ask, y a distancias iguales a un salto de cambio de precio. Ahora, si se transmiten los datos de un símbolo sobre el precio y el volumen de la última transacción, usted podrá verlos con claridad en el gráfico de ticks. La información se representa en forma de círculos:
    • Los círculos rojos muestran las transacciones de venta.
    • Los círculos azules muestran las transacciones de compra.
    • Los círculos verdes se muestran cuando la dirección de las transacciones no está definida.

    Cuanto mayor sea el tamaño del círculo, mayor será el volumen de la transacción realizada.



  3. Corregido el cálculo de las "griegas" en el panel de opciones. El error aparecía cuando el activo básico de la opción tenía un precio cero en la última transacción.
  4. Continúan los trabajos sobre el nuevo servicio de "Suscripciones", permitiendo adquirir servicios adicionales para el trading. En concreto, se ha corregido la muestra de suscripciones que dependen de otras suscripciones. Estas suscripciones se usan para servicios agrupados.
  5. Mejorado el funcionamiento de la plataforma con Wine.

MQL5

  1. Añadida la generación de eventos del gráfico ChartEvent al soltar los botones derecho y medio del ratón. Esto se puede utilizar, por ejemplo, al crear paneles gráficos. Para trabajar con los eventos, será necesario desactivar el menú contextual del gráfico, utilizando para ello la propiedad CHART_CONTEXT_MENU.
  2. Corregido el fallo que provocaba un error significativo en el tiempo de espera en la función Sleep.

MetaEditor

  1. Iniciados los trabajos de actualización global del depurador. En concreto, se ha mejorado notablemente la ventana de expresiones observadas. En esta, se ha añadido la posibilidad de ver el contenido de las matrices y objetos en forma de listas desplegables, así como los valores de los punteros.



    Para visualizar una matriz u objeto, clique dos veces sobre estos en la ventana de observación.

  2. Corregido el bloqueo al abrir ciertos proyectos.
Documentación actualizada.

26 noviembre 2020
MetaTrader 5 build 2715: Mejoras generales

Terminal

  1. Corregido el fallo de la plataforma al utilizar el cuadro de opciones. Podía suceder si el tick tenía un tamaño cero en los ajustes del instrumento comercial.
  2. Corregidos los errores de representación de la interfaz en los monitores HiDPI.

MQL5

  1. Corregida la conversión de líneas a fecha/hora con la ayuda de la función StringToTime. El error surgía al indicar la fecha/hora en el formato "yyyymmdd [hhmiss]".
  2. Corregido el error en el operador de copiado implícito para los objetos que contienen matrices dinámicas. Ahora, al realizar el copiado, el tamaño del objeto de destino se reduce hasta el tamaño del objeto copiado.
    struct MyStruct
    {
      string Array[];
    };
    
    void OnStart()
    {
      MyStruct a1,a2;
      ArrayResize(a1.Array,3);
      ArrayResize(a2.Array,1);
      a1=a2;
    }
    Antes, como resultado de la llamada de esta función, la matriz "а1" tenía un tamaño 3. Ahora, tendrá un tamaño 1.

MetaTester

  1. Actualizado el algoritmo para calcular la clasificación de los agentes de simulación en la red de cálculos en la nube MQL5 Cloud Network. La clasificación se determinará de forma más precisa y cambiará con menor frecuencia.

Documentación actualizada.
12 noviembre 2020
MetaTrader 5 build 2560: Mejoras en el MetaEditor

Terminal

  1. Corregida la muestra de la profundidad de mercado sintética. Antes, podía no estar disponible para algunos instrumentos.

    La profundidad de mercado sintética se usa para los símbolos de los que no se retransmiten los precios Level 2. Los niveles se construyen automáticamente, a partir de los mejores precios Bid y Ask, y a distancias iguales a un salto de cambio de precio. Se trata de una herramienta adecuada para colocar, modificar y eliminar órdenes de forma rápida y con la máxima claridad.



MQL5

  1. Optimizado y significativamente acelerado el acceso a los últimos precios de los programas MQL5 con la ayuda de la función SymbolInfoTick.
  2. Corregido el reseteo de los parámetros del indicador "Ichimoku Kinko Hyo" a través de la ventana de diálogo.



  3. Corregido el bloqueo de las funciones Copy* cuando no hay historia disponible del instrumento comercial.
  4. Continuamos trabajando en la actualización completa del perfilador de código. Como adición a las novedades de la versión 2650, hemos introducido una serie de mejoras a su funcionamiento:
    • Mejorada la representación de los precios
    • Abreviado el nombre de las columnas en el informe
    • Añadida la posibilidad de guardar el informe de perfilado en un archivo
    • Añadida la muestra del número de línea en una pista emergente para las funciones en el informe



MetaEditor

  1. Añadida la posibilidad de desactivar el seguimiento del portapapeles y limpiar su historia.

    La función de seguimiento del portapapeles permite hacer más cómodo el trabajo con el código fuente gracias al acceso rápido a los últimos datos usados. Presione Alt + V en cualquier posición del código fuente, elija en el menú cualquiera de las líneas copiadas anteriormente, y dicha la línea se insertará en la posición seleccionada.
    Para activar/desactivar el seguimiento, utilice el comando correspondiente en el panel de herramientas o use la configuración del editor.



  2. Corregido el error de cálculo de algunas expresiones observadas al depurar los programas.

MetaTester

  1. Prohibido el comercio para los asesores iniciados en el simulador de estrategias en el modo de recepción de frames.
  2. MetaTester: Corregido el error que surgía al importar los resultados de la optimización en el simulador de estrategias. Debido a ello, los valores de los marcos temporales podían importarse de forma incorrecta.

Documentación actualizada.
9 octubre 2020
MetaTrader 5 build 2650: carga de gráficos en segundo plano y mejoras en el perfilador de código MQL

Terminal

  1. Añadido el ajuste "Cargar previamente los datos de los gráficos de las posiciones y órdenes abiertas".

    Para ahorrar tráfico, la plataforma comercial descarga la historia de precios de los instrumentos solo en el momento de su solicitud real, por ejemplo, al abrir un gráfico o iniciar la simulación. No obstante, para los instrumentos utilizados más activamente, esto puede no resultar siempre cómodo. Si activa esta nueva opción, los gráficos de los instrumentos de los que usted tiene posiciones abiertas u órdenes pendientes se actualizarán en segundo plano cada vez que inicie la plataforma. Así, al abrir los gráficos, usted no tendrá que esperar a que se carguen los datos, estos siempre estarán disponibles para el análisis.




  2. Corregida la formación de las barras de día despues de los festivos.
  3. Corregida la actualización de los gráficos. En algunos casos, después de descargar adicionalmente los datos de precio actualizados, los gráficos podían no actualizarse.
  4. Optimizada la actualización de la caché de la historia comercial de la cuenta. Esto permitía reducir los retrasos a la hora de obtener los datos con la ayuda de las funciones History*.
  5. Corregida la representación de la columna de comentarios al visualizar la historia comercial en forma de posiciones.
  6. Corregida la representación del botón de prolongación de la suscripción en las "Señales".

MQL5

  1. Continuamos trabajando en la actualización completa del perfilador de código. Como adición a las novedades de la versión 2615:

    Añdidos nuevos parámetros
    Como ya anunciamos en la anterior actualización, para realizar el perfilado, ahora se usa el método "Sampling". El perfilador pausa el funcionamiento de un programa MQL (~1000 veces por segundo) y recopila estadísticas sobre cuántas veces se ha hecho la pausa en ciertos sectores del código. Asimismo, se analizan las pilas de llamadas, para determinar el "aporte" de cada función al tiempo total de funcionamiento del código. Al final del perfilado, usted obtendrá estadísticas sobre el número de veces que se ha ejecutado la pausa y cuántas veces ha resultado cada una de las funciones en la pila de llamadas:

    • Actividad general de la CPU [unidad de medición, %] — número total de "apariciones" de la función en la pila de llamadas.
    • Actividad propia de la CPU [unidad de medición, %] — número de "pausas" ocurridas propiamente dentro de la función indicada. Este contador es el más importante para determinar los cuellos de botella, ya que, según las estadísticas, la pausa sucede con mayor frecuencia en los segmentos del programa que requieren mayor tiempo de funcionamiento por parte del procesador.


    Añadida la posibilidad de desactivación del inlining de funciones al realizar el perfilado
    Al compilar programas MQL, se realiza el inlining (incorporación), a saber, el código de las funciones se ubica directamente en lugar de su llamada, lo que permite conseguir una aceleración sustancial durante el funcionamiento. Sin embargo, esto dificulta el perfilado de funciones. Para obtener un informe de funciones "puras", usted podrá desactivar el inlining al realizar el perfilado en los ajustes MetaEditor:




    Actualizado el diseño del informe
    Hemos rediseñado el informe de perfilado, así como la representación de la información sobre el perfilado en la ventana del código fuente. El diseño es ahora más actual y familiar para los usuarios de Visual Studio.




  2. Corregido el funcionamiento de la función CopyTicksRange. Debido a él, la función no retornaba todos los datos en algunas situaciones.
  3. Añadido el nuevo código de error TRADE_RETCODE_HEDGE_PROHIBITED: la apertura de posiciones o la colocación de órdenes no resulta posible, debido a que no se permite la cobertura de posiciones. El error se retorna como respuesta al intento de realizar una transacción comercial si la cobertura está prohibida para la cuenta y hay en ella una posición u orden en la dirección opuesta del mismo símbolo.
  4. Eliminada la posibilidad de llamar a la función MessageBox al depurar los indicadores. MessageBox no se llama desde los indicadores, dado que interrumpe el funcionamiento del flujo de ejecución durante todo el tiempo de espera de la respuesta del usuario.
  5. Optimizada y significativamente acelerada la adición de instrumentos comerciales a la "Observación de mercado" con la ayuda de la función SymbolSelect.
  6. Corregido el comportamiento de la función ArrayInsert para las matrices de tamaño fijo. Ahora, existe en la documentación: al insertar elementos, el tamaño de la matriz receptora no cambia; en este caso, además, comenzando desde la posición de inserción, los elementos de la matriz receptora se desplazan a la derecha (los últimos elementos count son "descartados"), mientras que en el espacio liberado se realiza el copiado de elementos desde la matriz fuente.

Tester

  1. Corregido el trabajo con los ajustes de usuario de las condiciones comerciales al realizar la simulación. Asimismo, se ha rediseñado la ventana de diálogo de ajustes.

    • Corregido el cobro de comisiones de usuario. Ahora, para activar las comisiones, basta con indicar el nombre del símbolo, y no la ruta completa al mismo.
    • Modificada la ubicación de las pestañas, para un trabajo más cómodo.
    • Renombrada la ventana de diálogo y la opción que incluye los ajustes de usuario, para facilitar su comprensión.
    • Optimizada la anchura de las columnas en los recuadros de ajustes.
    • Al activar la opción "Utilizar ajustes de usuario", los demás ajustes en la ventana de diálogo son ahora desactivados. Antes, los ajustes permanecían disponibles para la edición, y los usuarios podían considerar erróneamente que estos se aplicaban al realizar la simulación.




  2. Corregido el error que surgía en algunos casos al obtener órdenes de la historia comercial según el ticket.

MetaEditor

  1. Añadidos esquemas de color predeterminados para la ventana de edición del código: claro (por defecto), oscuro y azul. Ahora, para trabajar de noche con mayor comodidad, usted no se verá obligado a ajustar manualmente el aspecto externo del editor.

    Aparte de ello, se ha añadido la posibilidad de configurar el color del marco para la ventana de pistas según las funciones.



     
  2. Actualizados por completo los iconos en los paneles de instrumentos para el soporte de monitores HiDPI.

Documentación actualizada.

17 septiembre 2020
MetaTrader 5 build 2615: Análisis fundamental y criterios complejos en el simulador de estrategias

Terminal

  1. Posibilidades ampliadas para el análisis fundamental de instrumentos.
    Añadidas nuevas propiedades para los instrumentos comerciales, que permiten categorizar estos de forma aún más precisa:
    • Sector — sector económico al que pertenece el instrumento. Por ejemplo: energía, finanzas, sanidad, etcétera.
    • Industria — rama de la industria a la que pertenece el instrumento. Por ejemplo: ropa y accesorios deportivos, fabricación de automóviles, restauración, etcétera.
    • País — país de la compañía cuyas acciones se comercian en la bolsa.

    Estas propiedades han permitido implementar en la Observación de mercado un sistema aparte para trabajar cómodamente con los instrumentos por sectores. Seleccione la categoría necesaria en el menú, y todos los instrumentos disponibles de esta se añadirán a una lista para el análisis complejo:



    Asimismo, las nuevas propiedades estarán ahora disponibles en las especificaciones del contrato:



    Aparte de lo mencionado, ahora podrá abrir fácilmente los datos fundamentales por instrumentos. En el menú contextual de la Observación de Mercado se han añadido para cada símbolo enlaces a los mayores agregadores:



    La disponibilidad de los nuevos datos depende de los brókeres, ya que precisamente ellos controlan los ajustes. No obstante, hemos intentado que la información esté disponible por defecto para el máximo número posible de instrumentos. En cuanto los brókeres actualizan a una versión nueva, los datos por países, sectores e industrias aparecen en las plataformas del usuario.
  2. Mejorado el escaparate de las Señales y el Mercado. Concretamente, se han añadido a la parte izquierda de la ventana los botones para formalizar la suscripción y para todas las opciones de alquiler:



    Aparte de ello, se han introducido varias mejoras para trabajar de forma más cómoda: nuevos colores más vistosos para los botones, botones más llamativos para entrar en la cuenta MQL5, y otras.

  3. Corregido el cálculo de beneficio/pérdidas potenciales para los niveles Stop Loss y Take Profit en los gráficos.



  4. Corregidos los errores en el cálculo de los instrumentos sintéticos. En algunos casos, los errores podía provocar que la plataforma se bloqueara al iniciarse.
  5. Corregida la representación de los valores del indicador incorporado Fractals en la Ventana de Datos.
  6. Actualizados por completo los iconos en los paneles de instrumentos para el soporte de monitores HiDPI.
  7. Corregido el error de corrección del volumen de una posición al copiar las señales comerciales. En algunos casos, la corrección podía no realizarse debido a la aplicación incorrecta de los niveles stop, lo que provocaba el error "invalid stops".
  8. Optimizada la reconstrucción de la historia de precios cuando esta cambia en el servidor.
  9. Corregida la muestra de pistas para los niveles comerciales en los gráficos. En algunos casos, podían mostrarse incluso con la muestra de pistas desactivada.
  10. Corregido el funcionamiento de la opción "Mostrar en los gráficos \ Actualización automática" en el menú contextual de órdenes y posiciones en el apartado "Herramientas \ Comercio". Ahora, al desactivar esta opción, la muestra de la historia comercial se desactiva para todos los gráficos abiertos.

MQL5

  1. Añadida la función MathClassify. Esta determina el tipo de un número real y retorna el resultado en forma de valor de la enumeración ENUM_FP_CLASS
    ENUM_FP_CLASS  MathClassify(
       double  value      // número real
       );
    La enumeración contiene los siguientes valores:
    • Número subnormal que se encuentra más próximo a cero que el número normalizado DBL_MIN menor representable 2.2250738585072014e-308
    • FP_NORMAL — número normalizado que se encuentra en el intervalo de 2.2250738585072014e-308 a 1.7976931348623158e+308.
    • FP_ZERO — cero positivo o negativo.
    • FP_INFINITE — número que no puede representarse con el tipo correspondiente, infinito positivo o negativo.
    • FP_NAN — no es un número.

    Para comprobar la validez de un número real, podemos utilizar el código siguiente:
    if(MathClassify(value)>FP_ZERO)
      {
       Print("value is not a valid number");
      }
  2. Añadidas nuevas propiedades de los símbolos, que podemos obtener con las funciones SymbolInfoString:
    • SYMBOL_COUNTRY — país de la compañía cuyas acciones se comercian en la bolsa.
    • SYMBOL_SECTOR_NAME — sector económico al que pertenece el instrumento. Por ejemplo: energía, finanzas, sanidad, etcétera.
    • SYMBOL_INDUSTRY_NAME — industria a la que pertenece el instrumento. Por ejemplo: ropa y accesorios deportivos, fabricación de automóviles, restauración, etcétera.
    Las propiedades se devuelven en forma de línea.

    El sector de la industria al que pertenece un instrumento también se puede obtener como valor de una enumeración. Para ello, solicite las siguientes propiedades con la ayuda de la función SymbolInfoInteger:
    • SYMBOL_SECTOR
    • SYMBOL_INDUSTRY

    Para trabajar con estas propiedades, se han añadido las enumeraciones ENUM_SYMBOL_SECTOR y ENUM_SYMBOL_INDUSTRY.

  3. Implementado un nuevo mecanismo de gestión de memoria en los programas MQL5. Este asigna la memoria hasta 3 veces más rápido. Asimismo, permite evitar una serie de errores potenciales de acceso a la memoria.
  4. Optimizado y significativamente acelerado el trabajo con la historia comercial con la ayuda de las funciones History*.
  5. Corregida la llamada de WebRequest desde el punto de entrada OnDeinit. Antes, al detener un experto, esta función no se llamaba.
  6. Corregida la llamada de WebRequest desde los servicios. Antes, la función podía no llamarse después de reiniciar un servicio.
  7. Añadida la comprobación del soporte por parte de un dispositivo del tipo double al usar OpenCL. En los cálculos financieros, el tipo float no es adecuado, debido al redondeo excesivo. Debido a ello, al realizar los cálculos, la plataforma exige explícitamente el soporte de double. Ahora, de no darse este, en el diario de la plataforma se mostrarán mensajes del tipo device '<name>' does not support type 'double'. Antes, en su lugar se mostraba un mensaje general de error.
  8. Acelerada significativamente la ejecución de la función AccountInfoDouble con los parámetros ACCOUNT_EQUITY y ACCOUNT_BALANCE.
  9. Corregido el error que surgía al aplicar una plantilla al gráfico con la ayuda de la función ChartApplyTemplate.
  10. Corregido el error de llamada de la función ChartSetInteger con el parámetro CHART_BRING_TO_TOP.
  11. Añadido un nuevo método Conjugate a la biblioteca Alglib incorporada. Este método permite el cálculo de números conjugados para números complejos. La biblioteca se encuentra en el directorio MQL5\Include\Math\Alglib.
  12. Perfilador de código completamente actualizado. El nuevo perfilador es mucho más rápido y preciso que el anterior.
    • Para realizar el análisis en el nuevo perfilador, se usa un código optimizado exactamente igual que el utilizado al compilar la versión de lanzamiento de un programa. Esto permite determinar con mayor precisión la velocidad de trabajo de un código, ya que precisamente este código se usará en el funcionamiento real de un programa.
    • El nuevo perfilador usa el método de perfilado "Sampling". Se trata de unn método ligero y preciso que reúne datos estadísticos sobre el funcionamiento de la aplicación: transcurridos ciertos intervalos temporales, se toman los datos sobre la pila de llamadas y, usándolos como base, se calcula el rendimiento.
    • A diferencia de la versión anterior, el nuevo perfilador no introduce ningún cambio en el código analizado. El método "Instrumentation" utilizado anteriormente, añadía al código determinadas construcciones que se usaban para medir la velocidad de funcionamiento de la función. Esto podía influir en la velocidad de trabajo del código final.
    Los trabajos de mejora del perfilador siguen su curso. Ls mejoras posteriores se publicarán en las próximas versiones de la plataforma.

Tester

  1. Optimizado el trabajo con la red de cálculos en la nube MQL5 Cloud Network. Corregidos los errores de carga de los expertos por parte de los agentes.
  2. Añadido el nuevo criterio de optimización "Complex Criterion max". Se trata de un indicador compuesto sobre la calidad de las pasadas de optimización. Este tiene en cuenta varios parámetros al mismo tiempo:
    • Número de transacciones
    • Reducción
    • Factor de recuperación
    • Máx. esperanza matemática
    • Ratio de Sharpe

    El nuevo criterio permite entender que el valor máximo de un parámetro (por ejemplo, el beneficio) no siempre representa la mejor opción desde el punto de vista del análisis complejo. El criterio permite seleccionar paulatinamente las mejores pasadas: primero según el número de transacciones, después según la esperanza matemática de esta muestra, y luego según el factor de recuperación, etcétera. De esta forma, como resultado de la optimización, usted obtendrá las mejores pasadas según todos los parámetros, pudiendo seleccionar después alguna pasada concreta, por ejemplo, la que tenga mayor beneficio.

    Elija el nuevo criterio en los ajustes del simulador de estrategias e inicie la optimización.



    Como resultado de la optimización, el valor "Complex Criterion max" se mostrará en la columna aparte "Result". Podrá clasificar las pasadas en función del mismo. El nuevo criterio también da soporte al resaltado a color, permitiendo determinar visualmente las mejores pasadas. Los valores por debajo de 20 se iluminarán en rojo, mientras que los valores por encima de 80, lo harán en verde oscuro.



  3. Corregido el cálculo de las comisiones de usuario en el simulador de estrategias.

MetaEditor

  1. Iniciada la revisión global de las funciones de gestión intelectual del código (IntelliSense).
    • Ahora, en las pistas se indica la signatura completa de la función, y no solo su nombre.
    • La fuente con la que se muestran las pistas ahora se toma de los ajustes del MetaEditor.
    Ls mejoras posteriores se publicarán en las próximas versiones de la plataforma.

Documentación actualizada.

24 julio 2020
MetaTrader 5 build 2560: Mejoras en el sistema de aprendizaje incorporado

Terminal

  1. En la anterior actualización de la plataforma, rediseñamos por completo el sistema de aprendizaje incorporado. Ahora, hemos introducido los detalles finales:
    • Hemos creado un botón de progreso más llamativo
    • Hemos mejorado varios consejos, para que ningún usuario se confunda
    • Hemos corregido varios errores relacionados con el cálculo del progreso

    Supere todas las lecciones para utilizar las capacidades de la plataforma al 100%.



  2. Optimizado y significativamente acelerado el procesamiento de grandes flujos de ticks (decenas de miles por minuto o más).
  3. Corregidos los errores en el cálculo del cambio de precio respecto al precio de la sesión anterior. Para ver este indicador, active la columna "Cambio diario" en el menú contextual de la "Observación de Mercado".

MQL5

  1. Optimizado y significativamente acelerado el acceso a las propiedades numéricas del gráfico con la ayuda de la función ChartGetInteger.
  2. Corregidos los errores en la búsqueda de los indicadores de usuario solicitados desde los programas MQL5 a través de la función iCustom.

MetaEditor

  1. Añadida la compilación de programas C/C++ en los proyectos.

Tester

  1. Optimizado sustancialmente el funcionamiento de la red de cálculos en la nube MQL5 Cloud Network. Ahora, la red encuentra mejor los agentes adecuados; asimismo, distribuye las tareas y retorna los resultados a mayor velocidad.
Documentación actualizada.
10 julio 2020
MetaTrader 5 build 2530: clasificación en la Observación de mercado y trabajo cómodo con los resultados de optimización

Terminal

  1. Añadida a la Observación de mercado la posibilidad de clasificar los datos:
    • Pulse bajo el nombre de cualquier columna para clasificar la lista según sus datos. Por ejemplo, según el nombre del símbolo, el precio de cierre, el cambio diario, etcétera.
    • Utilice el nuevo menú con las opciones de clasificación más demandadas. La clasificación según los líderes de crecimiento y caída, calculada en función del cambio diario en el precio del instrumento, le resultará cómoda al comerciar en los mercados de valores.




  2. Sustancialmente rediseñado y mejorado el sistema de aprendizaje incorporado.
    Ahora, todos los consejos interactivos se dividen por temas, para que a usted le resulte más simple orientarse durante el aprendizaje. Para cada categoría, se muestra el número de consejos tanto mostrados como restantes.



    Aparte de ello, se ha añadido a cada consejo una lista de verificación que indica la acción clave que debemos ejecutar para finalizar al aprendizaje.

    Asimismo, se ha actualizado por completo el diseño del sistema de aprendizaje, y también se han eliminado los errores al calcular el progreso total del aprendizaje.

  3. Añadido el cálculo automático del precio de cierre de la anterior sesión comercial y de apertura de la sesión actual de un instrumento. Si su bróker no le ofrece estos datos directamente, el terminal los calculará de acuerdo con la última y la primera cotización de la sesión, respectivamente. Usted podrá ver estos datos en la Observación de mercado. Para ello, active las columnas correspondientes en el apartado "Símbolos" o entre en el apartado "Detalles".



  4. Optimizada y significativamente acelerada la aplicación de los precios para la apertura de posiciones. Al llegar nuevos ticks al terminal, los precios, el beneficio y los requisitos de margen de las posiciones ahora se actualizan más rápido.
  5. Corregido el cálculo del indicador incorporado Stochastic Oscillator. Este daba error cuando se limitaba el número de barras representadas en los gráficos.

MQL5

  1. Optimizado y significativamente acelerado el funcionamiento de la función de acceso a las propiedades de la cuenta comercial AccountInfo*.
  2. Optimizado y significativamente acelerado el acceso a las propiedades numéricas del gráfico con la ayuda de la función ChartGetInteger.

MetaEditor

  1. Para trabajar más cómodamente con el repositorio de versiones de archivos MQL5 Storage, se han añadido tres comandos al menú contextual de las pestañas de edición de código:

    • Comparar la copia de trabajo de un archivo con la revisión actual
    • Revertir los cambios actuales
    • Visualizar la historia de los cambios del archivo en el repositorio


  2. Modificado el resaltado de paréntesis dobles. Ahora, se destacan con precisión los propios paréntesis, y no el fondo tras ellos. Por defecto, el resaltado de paréntesis dobles está desactivado. Es posible activarlo en los ajustes del editor.


  3. Mejorado el funcionamiento de la función de búsqueda y sustitución:
    • Si destacamos un texto en el archivo y llamamos la ventana de búsqueda, el texto será automáticamente sustituido en el campo "Buscar". Si el texto en el archivo no ha sido destacado, en el campo "Buscar" se pegará el texto del portapapeles. Si el portapapeles estaba vacío, el foco en la ventana de búsqueda simplemente se situará en el campo "Buscar".
    • Un comportamiento similar se ha implementado al llamar la ventana de sustitución: solo tras pegar el texto destacado en el campo de búsqueda, el cursor se desplazará al campo "Sustituir por", para que usted pueda introducir directamente el texto de la sustitución.
    • Los resultados de la búsqueda y la sustitución ahora se muestran en el diario, y no en una ventana de diálogo aparte. Si la ventana "Herramientas" está activada en ese momento, la pestaña del diario se seleccionará en ella automáticamente. De esta forma, usted no tendrá que perder el tiempo cerrando las ventanas sobrantes.

  4. Corregida la búsqueda en la ventana de comparación de archivos al trabajar con el repositorio de versiones MQL5 Storage.
  5. Añadida la posibilidad de buscar y sustituir en los archivos incluidos en al archivo actual a través de la directiva #include.
    Esto le permitirá trabajar más rápido con los proyectos que consten de multitud de archivos. Por ejemplo, para sustituir un texto en todos los archivos del programa, no necesitará indicar sus directorios manualmente, el editor los encontrará de forma automática según las directivas #include.


Tester

  1. Modificados los criterios de optimización en los que se consideraban dos índices: el balance y un cierto segundo factor. Ahora, en ellos se considera solo el segundo factor, sin balance. Estos criterios son los más sencillos y comprensibles para el análisis.

    • Balance + máxima rentabilidad -> Máxima rentabilidad
    • Balance + máximo beneficio esperado -> Máximo beneficio esperado
    • Balance + reducción mínima -> Reducción mínima
    • Balance + máximo factor de recuperación -> Máximo factor de recuperación
    • Balance + máximo ratio de Sharpe -> Máximo ratio de Sharpe


  2. Añadidos al submenú "Parámetros de optimización" los comandos de activación y desactivación rápida de la representación de todas las columnas de los parámetros de entrada en el recuadro de resultados de la optimización:



  3. Añadido el coloreado del recuadro y el gráfico con los resultados de optimización, para realizar cómodamente el análisis visual de las pasadas.

    El gráfico se colorea en gradualmente del verde al rojo, dependiendo del valor del criterio de optimización. Para el recuadro, se usan los siguientes colores:

    • Balance: se colorean en azul los valores superiores al depósito inicial, y en rojo, los inferiores.
    • Beneficio: se colorean en azul los valores superiores a cero, y en rojo, los inferiores.
    • Beneficio esperado: se colorean en azul los valores superiores a cero, y en rojo, los inferiores.
    • Reducción: del verde (0-5%) al rojo (superior al 30%).
    • Ratio de Sharpe: del verde (superior a 2) al rojo (inferior a 0).
    • Factor de recuperación: del verde (superior a 2) al rojo (inferior a 1).



  4. Añadidos varios filtros en el recuadro de resultados de la optimización. Ahora, usted podrá ocultar rápidamente de la lista las pasadas desafortunadas:
    • Donde no ha habido ni una transacción
    • Donde el robot ha tenido pérdidas
    • Donde la reducción ha sido superior al 50%
    • Donde el factor de recuperación ha sido inferior a 1
    • Donde el ratio de Sharpe ha sido inferior a 0.5


  5. Optimizado sustancialmente el funcionamiento de la red de cálculos en la nube MQL5 Cloud Network. Por ejemplo, ahora, al iniciar nuevamente la optimización del mismo asesor, la red intentará usar los mismos agentes de simulación que se utilizaron antes. Dado que, con bastante probabilidad, todos los entornos comerciales, incluyendo los datos, ya estarán preparados en ellos, los cálculos se podrán iniciar de inmediato.

Documentación actualizada.
5 junio 2020
MetaTrader 5 build 2485: Mejoras en iCustom y optimización general en MQL5

Terminal

  1. Optimizada y sustancialmente acelerada la edición de la historia de barras en los instrumentos financieros de usuario. La mejora también afecta a la función CustomRatesUpdate.
  2. Corregido el error que surgía al exportar los ajustes de los instrumentos de usuario a un archivo JSON.
  3. Correcciones de crash logs

MQL5

  1. Modificado el algoritmo de carga de los indicadores de usuario con la ayuda de iCustom.

    Nombre del indicador personalizado. Si antes del nombre indicamos la barra oblicua inversa '\', el archivo EX5 del indicador se buscará con respecto a la carpeta raíz MQL5. De esta forma, al llamar iCustom(Symbol(), Period(), "\FirstIndicator"...) el indicador se cargará como MQL5\FirstIndicator.ex5. Si el archivo no se encuentra según esta ruta, aparecerá el error 4802 (ERR_INDICATOR_CANNOT_CREATE).

    Si la ruta no comienza con '\', la búsqueda y la carga del indicador se realizarán en la siguiente secuencia:

    • En primer lugar, el archivo EX5 del indicador se buscará en la misma carpeta donde se encuentra el archivo EX5 del programa que realiza la llamada. Por ejemplo, el asesor CrossMA.EX5 se encuentra en la carpeta MQL5\Experts\MyExperts y contiene la llamada iCustom(Symbol(), Period(), "SecondIndicator"...), entonces, la búsqueda del indicador se realizará en la ruta MQL5\Experts\MyExperts\SecondIndicator.ex5.
    • Si el indicador no ha sido localizado en el mismo directorio, la búsqueda se realizará con respecto al directorio raíz de indicadores MQL5\Indicators. Es decir, se buscará el archivo MQL5\Indicators\SecondIndicator.ex5. Si el indicador no ha sido localizado en ninguna de las rutas, la función retornará INVALID_HANDLE y se mostrará el error 4802 (ERR_INDICATOR_CANNOT_CREATE).

    Si la ruta al indicador se ha establecido en un subdirectorio, por ejemplo, como MyIndicators\ThirdIndicator, la búsqueda primero se efectuará en la carpeta del programa que ha realizado la llamada (el asesor se encuentra en la carpeta MQL5\Experts\MyExperts), en la ruta MQL5\Experts\MyExperts\MyIndicators\ThirdIndicator.ex5, y después, si no ha habido éxito, se buscará el archivo MQL5\Indicators\MyIndicators\ThirdIndicator.ex5. En este caso, además, deberemos indicar como separador en la ruta la barra oblicua inversa doble '\\', por ejemplo, iCustom(Symbol(), Period(), "MyIndicators\\ThirdIndicator"...).

    Asimismo, al detectarse en el código del programa la llamada de un indicador de usuario a través de iCustom, el compilador añadirá de forma implícita la directiva "#property tester_indicator XXX", si está no existe.

  2. Optimizado y significativamente acelerado el funcionamiento de la función HistorySelect, que permite solicitar la historia de transacciones y órdenes.
  3. Corregido el error que surgía al solicitar los ticks a través de la función CopyTicksRange. Debido a este error, como inicio del intervalo se aplicaba el comienzo del día establecido sin considerar la hora indicada.
  4. Optimizada y significativamente acelerada la representación de las alertas con la ayuda de la función Alert.
  5. Añadida la nueva propiedad SYMBOL_TIME_MSC: la hora del último tick del símbolo en milisegundos. Para obtener la propiedad, se usa la función SymbolInfoInteger.


29 mayo 2020
MetaTrader 5 Platform build 2470

Terminal

  • Corregido el error que provocaba que en la "Observación de mercado" no fuese posible añadir instrumentos financieros cuyos nombre incluyesen los símbolos '-', '=', '_' y '+'.

MQL5

MetaEditor

  • Corregida la búsqueda ampliada según los símbolos '\n' y '\r' del final de línea.

Documentación actualizada.
22 mayo 2020
MetaTrader 5 build 2450: servicio "Suscripciones", mejoras en la interfaz y funciones cómodas en el MetaEditor

Terminal

  1. Le presentamos nuestro nuevo servicio, "Suscripciones". Con su ayuda, podrá obtener servicios adicionales que le ayudarán a la hora de comerciar. Por ejemplo, comprar una suscripción a datos de mercado de calidad suministrados por proveedores conocidos, para luego analizar dicha información y utilizarla en sus estrategias. O encargar los servicios de un manager personal que le ayudará a comprender los principios básicos del trading y conocer todos los detalles de la plataforma MetaTrader 5.

    En estos momentos, el servicio se desarrolla activamente, por lo que estará disponible para los usuarios en las próximas versiones de la plataforma.

    Cómo funciona
    En el "Navegador" de la plataforma ha aparecido un nuevo apartado, las "Suscripciones". En este, se muestran los servicios disponibles. Su lista depende del servidor al que usted se encuentra conectado: todos los servicios se configuran en el lado del bróker. Para mayor comodidad, las suscripciones se dividen en categorías.




    Elija un servicio para acceder a su descripción detallada. A continuación, pulse "Suscribirse". Para comodidad del ususario, todas sus suscripciones activas se mostrarán en una subsección aparte.



    Tras suscribirse a los datos de mercado, podrá seleccionar los instrumentos comerciales correspondientes en la ventana de "Observación del mercado". Podrá trabajar con ellos de la misma forma que con los instrumentos habituales ofrecidos por su bróker: ver las cotizaciones en la "Observación del mercado", abrir gráficos y analizarlos con la ayuda de objetos e indicadores, usar los datos para poner a prueba expertos en el simulador de estrategias, etcétera. La única limitación es que no podrá realizar operaciones comerciales con dichos símbolos.

    Pago de suscripciones
    Para pagar por los servicios, usted podrá utilizar los fondos en su cuenta comercial. No tendrá que pasar a otros sitios web: todo se realizará de forma automática directamente en la plataforma.

    Muy pronto, será posible comprar una suscripción a los datos de mercado con solo conectarse a MetaQuotes-Demo
    Estamos planeando configurar en nuestro servidor demo suscripciones a los datos de mercado con multitud de plataformas comerciales de todo el mundo. En solo unos clics, podrá recibir cotizaciones en tiempo real de Nasdaq, CME, NYSE, BOVESPA y otras muchas bolsas, para consultar los gráficos de las mismas, analizar la dinámica de los precios con la ayuda de los objetos e indicadores incorporados y desarrollar sus propias estrategias. Podrá pagar por las suscripciones a través de su cuenta en MQL5.community, de la misma forma que sucede en el Mercado, las Señales y el hosting.

  2. Añadida a los ajustes de los gráficos la opción "Mostrar ticker". Esta permite mostrar/ocultar la línea con el nombre del instrumento comercial, el marco temporal y el comentario de usuario.



  3. Añadida a los ajustes del terminal y a los ajustes del gráfico la opción "Mostrar historia comercial". Esta función para representar sus entradas y salidas del mercado en los gráficos también estaba disponible antes, sin embargo, para gestionar la misma, se utilizaba el apartado "Herramientas / Historia". Ahora, la muestra de la historia de transacciones se puede ajustar de forma más cómoda y flexible. Usted podrá determinar un ajuste directamente para todos los gráficos o establecerlo para cada uno por separado.



    Aparte de ello, ahora usted podrá activar rápidamente la muestra de la historia comercial y los niveles comerciales a través del menú contextual del gráfico:




  4. Añadido a los ajustes del gráfico el nuevo esquema de colores "Color sobre blanco".



  5. Añadidos al menú contextual de posiciones y órdenes los comandos para la apertura rápida de la profundidad de mercado y el gráfico del instrumento correspondiente:



  6. Añadido el resaltado del marco de los gráficos. Al trabajar con multitud de gráficos abiertos, esto le ayudará a encontrar rápidamente el necesario. Destaque un símbolo en la Observación del mercado, una línea de una orden o posición en el apartado de comercio o la historia, o una alerta, y el marco del gráfico del símbolo correspondiente parpadeará tres veces.



  7. Mejorada la representación de los niveles comerciales en el gráfico.
    • En las posiciones, órdenes y niveles ya no se muestran los tickets, para no sobrecargar el gráfico
    • Los rótulos se representan en mayúsculas, para que sean más legibles
    • Los volúmenes no muestran la parte fraccionaria, si esta es cero
    • Si la altura de un gráfico es inferior a 80 píxeles, los niveles permanecen ocultos



  8. Ahora, en la esquina superior izquierda del gráfico, aparte del nombre, se indica el nombre del símbolo, si está disponible.




  9. En la lista de órdenes y posiciones abiertas, se han añadido nuevas columnas:
    • Cambio — rentabilidad de una operación como porcentaje
    • Coste — coste de mercado de una posición
    • Identificador del experto — valor indicado por el experto al abrirse las órdenes y posiciones (número mágico)

    Para activar/desactivar las nuevas columnas, use el menú contextual del apartado.



    Las columnas del coste de las posiciones y de los identificadores de los expertos también han sido añadidas en el apartado de historia comercial.

    Aparte de esto, en el apartado de posiciones abiertas y de historia, el campo de beneficio ahora se destaca dependiendo del resultado de la operación.

  10. Añadido el soporte de precios negativos. Ahora, si se dan situaciones como la reciente caída del precio del petróleo por debajo de cero, la plataforma funcionará correctamente:Al mostrar las cotizaciones en la Observación del mercado
    • Al mostrar los gráficos y la profundidad de mercado
    • Al ejecutar operaciones comerciales
    • Al calcular el beneficio y el abastecimiento, etcétera.

  11. El número máximo de instrumentos que se pueden activar simultáneamente en la Observación del mercado se ha aumentado hasta 5000.
  12. Corregida la clasificación de la lista de chats de acuerdo con la fecha de la última actualización.
  13. Optimizado y significativamente acelerado el trabajo con grandes cantidades de instrumentos comerciales (50 000 y más).
  14. Corregido el error que no permitía cerrar una posición cuyo volumen actual no se correspondiera con el salto de cambio del volumen según el símbolo.

MQL5

  1. Optimizado y significativamente acelerado el trabajo con la historia de ticks.
  2. Añadidas funciones para trabajar con bases de datos:
    • DatabaseReset — resetea la solicitud a su estado inicial, igual que tras la llamada de DatabasePrepare. La función ha sido pensada para ejecutar varias veces una solicitud con diferentes valores en los parámetros. Por ejemplo, al añadir datos a un recuadro de forma masiva con ayuda del comando INSERT, para cada entrada se deberá formar el conjunto propio correspondiente de valores de cada campo.
    • DatabaseBind — establece el valor de un parámetro en la solicitud. La función se debe usar solo cuando una solicitud SQL contiene los valores parametrizables "?" o "?N", donde N indica el número del parámetro (comenzando por la unidad).
    • DatabaseBindArray — establece una matriz como valor del parámetro.

  3. Añadida la bandera FSD_FILE_MUST_EXIST para la función FileSelectDialog. Indica que los archivos seleccionados deben existir.
  4. Añadidos a la enumeración ENUM_SYMBOL_INFO_DOUBLE los valores para describir las opciones:
    • SYMBOL_PRICE_CHANGE — cambio del precio actual con respecto al final del anterior día comercial, medido en tanto por ciento.
    • SYMBOL_PRICE_VOLATILITY — volatilidad del precio en tanto por ciento.
    • SYMBOL_PRICE_THEORETICAL — precio teórico de la opción.
    • SYMBOL_PRICE_DELTA — delta de la opción/garantía. Muestra cuántas unidades cambiará el precio de una opción al cambiar el precio del activo básico en 1 unidad.
    • SYMBOL_PRICE_THETA — teta de la opción/garantía. Número de puntos que perderá diariamente el precio de una opción debido al deterioro temporal, es decir, conforme se acerque la fecha de expiración.
    • SYMBOL_PRICE_GAMMA — gamma de la opción/garantía. Muestra la velocidad de cambio de delta, es decir, con qué rapidez o lentitud cambia el premio de la opción.
    • SYMBOL_PRICE_VEGA — vega de la opción/garantía. Muestra el número de puntos que cambiará el precio de una opción al cambiar la volatilidad un 1%.
    • SYMBOL_PRICE_RHO — ro de la opción/garantía. Muestra la sensibilidad del precio teórico de una opción ante un cambio de interés de un 1%.
    • SYMBOL_PRICE_OMEGA — omega de la opción/garantía. Elasticidad de una opción: cambio porcentual relativo del precio de una opción ante el cambio porcentual del precio del activo base.
    • SYMBOL_PRICE_SENSITIVITY — sensibilidad de la opción/garantía.  Muestra cuántos puntos deberá cambiar el precio del activo base de una opción para que el precio de la opción cambie un punto.

  5. Añadida en la función DatabaseExport la exportación de campos BLOB en el formato HEX.
  6. Añadida a la enumeración ENUM_CHART_PROPERTY_INTEGER la propiedad CHART_SHOW_TICKER, que representa el ticker de un símbolo en la esquina superior izquierda. Si establecemos CHART_SHOW_TICKER en el valor false, CHART_SHOW_OHLC también se establecerá temporalmente en el valor false, además de desactivarse la muestra de OHLC.   
  7. Mejorada la calidad del código generado por el compilador. Esto ha mejorado su velocidad de ejecución.
  8. Corregida una serie de errores al compilar y ejecutar las funciones y clases de plantilla. Concretamente:
    • Error de incompatibilidad de prioridad para las llamadas de las funciones de plantilla sobrecargadas
    • Error al generar un método/clase de plantilla
    • Error al intentar acceder a internal class para el parámetro de plantilla de la función de plantilla
    • Error al generar el código de la clase de plantilla al usar internal class
    • Error al usar el objeto de plantilla B<int> antes de B<void*>
    • Error al crear objetos complejos con el tipo interno "С" y envueltos varias veces
    • Error al transmitir el argumento de puntero a una función como const ref template
    • Error al transmitir internal struct a la función de plantilla
    • Error de incompatibilidad de prioridad de ejecución de las funciones de plantilla
    • Cálculo incorrecto de paréntesis en los ciclos for y do-while
    • Cálculo incorrecto de corchetes en la descripción de la estructura de la clase
    • Trabajo lento al añadir un elemento cada vez a la matriz con la ayuda de ArrayResize
    • Error al seleccionar la función de sobrecarga adecuada

  9. Corregido el error que surgía en algunos casos en la función CustomTicksReplace.
  10. Corregida la selección del periodo para representar la historia de órdenes comerciales. Ahora, al establecer el intervalo, se usa la fecha de ejecución de las órdenes, y no la fecha de creación, como se hacía antes.

Python

  1. Añadido al método initialize el parámetro path — la ruta al archivo metatrader.exe o metatrader64.exe. Si no ha sido indicado, el módulo intentará encontrar el archivo ejecutable por sí mismo.
  2. Nuevos métodos añadidos:
    • symbols_get — obtiene todos los instrumentos financieros del terminal MetaTrader 5.
    • symbols_total — obtiene el número total de instrumentos financieros en el terminal MetaTrader 5.

  3. Añadida la posibilidad de filtrado según un grupo de símbolos para las funciones orders_get, positions_get, history_orders_get y history_deals_get. Utilice las formas de llamada con el parámetro "group".
  4. En el valor retornado order_send y order_check ahora se transmite la descripción completa de la solicitud inicial, en el campo "request". Por ejemplo:
    ...
    comment=Request executed
    request_id=55
    retcode_external=0
    request=TradeRequest(action=1, magic=234000, order=0, symbol='USDJPY', volume=0.1, price=108.018, stoplimit=0.0, ...
        traderequest: action=1
        traderequest: magic=234000
        traderequest: order=0
        traderequest: symbol=USDJPY
        traderequest: volume=0.1
        traderequest: price=108.018
        traderequest: stoplimit=0.0
    ...
  5. Al iniciarse en el gráfico, ahora los scripts de Python obtienen como argumentos el nombre del símbolo y el periodo de este gráfico en minutos.
    import sys
    
    chart_symbol='unknown'
    chart_tf=1
    
    if len(sys.argv) == 3:
        chart_symbol, chart_tf = sys.argv[1:3];
    
    print("Hello world from", chart_symbol, chart_tf)
    
    >> Hello world from T.NYSE 15

MetaEditor

  1. Añadido el comando "Añadir carpeta existente". Este permite añadir de forma masiva al proyecto todos los archivos soportados desde el directorio seleccionado.



  2. Ampliadas las posibilidades de búsqueda y sustitución.

    Añadida la posibilidad de búsqueda ampliada con soporte parcial de expresiones regulares. Utilice \r, \n, \t para indicar en las solicitudes de búsqueda símbolos, salto de línea y tabulaciones. Las ventanas de diálogo de búsqueda y sustitución están ahora combinadas en una sola, con varias pestañas.



    Añadida una carpeta aparte para buscar por comunidades de programadores. Entre ellas, ahora se encuentran no solo MQL5.community, sino también GitHub, MSDN y Stack Overflow.


    Los resultados de la búsqueda por los recursos externos también se muestran cómodamente en la ventana de herramientas del MetaEditor:



    Para GitHub, se pueden bajar directamente los archivos fuente. La descarga se realiza en un subdirectorio aparte de la carpeta "Projects", nombrado de acuerdo con el nombre del proyecto en GitHub.

    Aparte de lo mencionado, en la ventana de resultados de la búsqueda se ha añadido la posibilidad de clasificar estos por fecha.

  3. Añadida la posibilidad de cambiar rápidamente el tamaño de la fuente en la ventana de edición de código. Para ello, pulse "Ctrl" y gire la ruleta del ratón.
  4. Añadida la posibilidad de importar recuadros desde archivos CSV a los recuadros de la base de datos. Al realizar la importación, podemos establecer los parámetros:
    • Nombre del recuadro en la base de datos
    • Detección automática o manual de la codificación del archivo
    • Tipo de separador de datos
    • Omisión de un cierto número de líneas al inicio
    • Prefijo de los comentarios
    • Presencia del nombre de las columnas en el archivo
    • Cómo se determinarán los saltos de línea
    • Añadir datos a un nuevo recuadro o a uno ya existente
    • Qué comillas usar para las líneas


  5. Añadidos los comandos para la inserción rápida de la hora y el color en el código fuente de los programas. Ahora, basta con seleccionarlos en el calendario interactivo y en la paleta, respectivamente, y el editor los insertará en el código en el formato necesario.


  6. Desactivado el soporte de MQL4, dado que ahora solo se genera código en 64 bits.
  7. Corregido el funcionamiento del snippet "Class".
  8. Corregido el soporte de rutas absolutas en los proyectos.
Documentación actualizada.

6 marzo 2020
MetaTrader 5 build 2360: Ampliación de la integración con SQLite
  1. MQL5: Los errores de operación con las bases de datos SQLite ahora se pueden analizar con los recursos estándar de MQL5. Para ello, se han añadido al lenguaje los siguientes códigos de error:

    • ERR_DATABASE_ERROR — error genérico.
    • ERR_DATABASE_INTERNAL — error de lógica interna de SQLite.
    • ERR_DATABASE_PERM — acceso denegado.
    • ERR_DATABASE_BUSY — archivo de la base de datos bloqueado.
    • ERR_DATABASE_LOCKED — recuadro de la base de datos bloqueado.
    • ERR_DATABASE_NOMEM — memoria insuficiente para completar la operación.
    • ERR_DATABASE_READONLY — intento de escribir en una base de datos disponible solo para la lectura.
    • ERR_DATABASE_IOERR — error I/O del disco.
    • ERR_DATABASE_CORRUPT — la imagen del disco de la base de datos está dañada.
    • ERR_DATABASE_FULL — error de inserción, la base de datos está llena.
    • ERR_DATABASE_CANTOPEN — no es posible abrir el archivo de la base de datos.
    • ERR_DATABASE_PROTOCOL — error de protocolo de bloqueo de la base de datos.
    • ERR_DATABASE_SCHEMA — esquema de la base de datos modificado.
    • ERR_DATABASE_TOOBIG — la línea o BLOB supera el límite de tamaño.
    • ERR_DATABASE_CONSTRAINT — interrumpido por violación de la restricción.
    • ERR_DATABASE_MISMATCH — incompatibilidad de los tipos de datos.
    • ERR_DATABASE_MISUSE — error de uso incorrecto de la biblioteca.
    • ERR_DATABASE_AUTH — autorización denegada.
    • ERR_DATABASE_RANGE — error de aplicación del parámetro, índice incorrecto.
    • ERR_DATABASE_NOTADB — el archivo abierto no es el archivo de la base de datos.

  2. MQL5: Corregida la operación de la función DatabaseImport, que permite importar información desde un archivo a un recuadro de la base de datos.
  3. MetaEditor: Corregida la muestra de líneas con una longitud superior a 32KB en el diario.
  4. MetaEditor: Corregido el error ocasional de codificación incorrecta al mostrar los mensajes de la consola Python (stdout, stderr) en el apartado "Errores" del editor.
  5. Documentación actualizada.
21 febrero 2020
MetaTrader 5 build 2340: Gestión de los ajustes de la cuenta en el simulador y ampliación de la integración con Python

MetaEditor

  1. Añadida la posibilidad de trabajar cómodamente con bases de datos SQLite.

    En la anterior actualización de la plataforma, añadimos el soporte del trabajo con bases de datos SQLite directamente desde MQL5. Ahora, las funciones principales están también disponibles a través de la interfaz de usuario del MetaEditor:

    • Creación de bases de datos y conexión a las mismas
    • Visualización de recuadros y solicitud rápida de datos
    • Creación y ejecución de solicitudes SQL, cancelación de cambios

    Cómo funciona
    Para crear bases de datos rápidamente, utilice el "Wizard MQL5". Aquí podrá crear directamente su primer recuadro y definir la lista con sus campos.



    Una vez haya creado la base de datos, entre en el nuevo apartado "Navegador". Desde dicho apartado tendrá lugar todo el trabajo con los datos.

    En la parte izquierda se representan los recuadros de la base de datos. Para solicitar rápidamente las primeras 1 000 mil entradas, clique dos veces sobre el nombre del recuadro. Aquí podrá crear y abrir otras bases de datos, y también trabajar con los recuadros.

    En la parte principal del editor tiene lugar el trabajo con la base de datos: rellene el recuadro con datos, realice búsquedas y selecciones, introduzca solicitudes SQL, etcétera.


    Para más información sobre las bases de datos en MetaTrader 5, lea el artículo "SQLite: trabajo nativo con bases de datos en SQL en MQL5".

  2. Continúa el trabajo sobre la adición del soporte de proyectos multilingües. En esta versión, hemos ampliado las funciones para trabajar con scripts en Python:

    • Ahora es posible crearlos cómodamente a través del "Wizard MQL5", incluyendo de inmediato las dependencias de las bibliotecas necesarias.
    • En el navegador se han añadido para ellos iconos especiales, mientras que en el editor se ha agregado el resaltado de sintaxis.
    • Al iniciar un script a través del MetaEditor, los mensajes de la consola de Python (stdout, stderr) se mostrarán en el apartado "Errores".


    Para iniciar un script en el editor, pulse "Compilar":


    Para trabajar con Python, no olvide indicar la ruta al mismo en el apartado "Ajustes \ Compiladores" en MetaEditor. Para trabajar con la biblioteca MetaTrader 5, instálela con el comando:
    pip install MetaTrader5
    Lea más información sobre la integración con Python en la documentación.
  3. Añadida la muestra de archivos de las bases de datos SQLite (*.db;*.sdb;*.sqlite;*.db3;*.s3db;*.sqlite3) en el "Navegador".
  4. Corregidos los errores surgidos al guardar las propiedades del proyecto.

MQL5

  1. Completamente rediseñada la integración con Python. Se han añadido multitud de nuevas funciones y se han modificado los nombres de los comandos.

    Nuevo nombre de los comandos
    Los comandos existentes han sido renombrados:
    MT5Initialize       -> initialize
    MT5Shutdown         -> shutdown
    MT5TerminalInfo     -> terminal_info
    MT5Version          -> version
    MT5CopyRatesFrom    -> copy_rates_from
    MT5CopyRatesFromPos -> copy_rates_from_pos
    MT5CopyRatesRange   -> copy_rates_range
    MT5CopyTicksFrom    -> copy_ticks_from
    MT5CopyTicksRange   -> copy_tick_range

    Nuevos comandos
    La lista de comandos soportados ha sido notablemente ampliada. Se han añadido funciones de comercio y trabajo con la historia comercial, y también para la obtención de información sobre los instrumentos financieros y la cuenta actual.

    • account_info() — obtiene información sobre la cuenta actual. Análogo de AccountInfoInteger, AcountIndoDouble y AccountInfoString.
    • positions_total() — obtiene el número de posiciones abiertas. Análogo de PositionsTotal.
    • positions_get(symbol, ticket) — obtiene las posiciones abiertas de un símbolo o ticket.
    • orders_total() — obtiene el número de órdenes. Análogo de OrdersTotal.
    • orders_get(symbol, ticket) — obtiene las órdenes abiertas de un símbolo o ticket.
    • history_orders_total(from, to) — obtiene el número de órdenes en la historia en el intervalo temporal establecido.
    • history_orders_get(from, to, position, ticket) — obtiene las órdenes de la historia en el intervalo temporal establecido, ya sea de un ticket, o con filtrado por posición.
    • history_deals_total() — obtiene el número de transacciones en la historia. Análogo de HistoryDealsTotal.
    • history_deals_get(from, to, position, ticket) — obtiene las transacciones de la historia en el intervalo temporal establecido, ya sea de un ticket, o con filtrado por posición.
    • symbol_info(symbol) — obtiene información sobre un instrumento financiero. Análogo de SymbolInfoInteger, SymbolInfoDouble, SymbolInfoString.
    • symbol_info_tick(symbol) — obtiene el último tick de un símbolo. Análogo de SymbolInfoTick.
    • symbol_select(symbol, enable) — activa/desactiva un símbolo en la "Observación de mercado". Análogo de SymbolSelect.
    • order_check(request) — comprueba el margen para una orden. Análogo de OrderCheck.
    • order_send(request) — envía una orden al servidor. Análogo de OrderSend.
    • order_calc_margin(action, symbol, volume, price) — calcula el margen para una orden. Análogo de OrderCalcMargin.
    • order_calc_profit(action, symbol, volume, price_open, price_close) — calcula el beneficio. Análogo de OrderCalcProfit.

    Inicio de scripts de Python en los gráficos
    Ahora, los scripts en Python se pueden iniciar directamente en los gráficos en la plataforma, de forma análoga a los programas MQL5 habituales. En el "Navegador", estos se mostrarán con iconos especiales.



    Los mensajes del script se mostrarán en el apartado "Herramientas \ Expertos". Si en el script se usa la biblioteca MetaTrader 5, podrá obtener información sobre el instrumento y la cuenta, y también comerciar.

    Los scripts de Python se pueden iniciar en el mismo gráfico de forma paralela con otros scripts y asesores de MQL5. Para detener un script (si su ejecución ha entrado en un bucle), solo tendrá que eliminarlo.

    Protección adicional
    Para proteger adicionalmente sus cuentas al utilizar bibliotecas Python de terceros, se ha añadido a los ajustes del terminal la opción "Desativar el comercio automático a través de una API Python externa".


    A los scripts de Python se les permitirán las operaciones comerciales al desactivar explícitamente esta opción.

  2. Sustancialmente acelerada la reinicialización de programas MQL5 y la creación repetida de indicadores de usuario desde programas MQL5. En algunos casos, la velocidad ha aumentado centenares de veces.
  3. Añadidas funciones para trabajar con bases de datos:

    DatabaseImport
    Importa a un recuadro los datos de un archivo.
    long  DatabaseImport(
       int           database,          // manejador de la base de datos obtenido en DatabaseOpen
       const string  table,             // nombre del recuadro para insertar los datos
       const string  filename,          // nombre del archivo para importar los datos
       uint          flags,             // combinación de banderas
       const string  separator,         // separador de datos 
       ulong         skip_rows,         // cuántas primeras líneas se omitirán 
       const string  skip_comments      // línea de símbolos que definen los comentarios
       );

    DatabaseExport
    Exporta un recuadro o el resultado de la ejecución de una solicitud SQL a un archivo CSV. El archivo se crea en la codificación UTF-8.
    long  DatabaseExport( 
       int           database,           // manejador de la base de datos obtenido en DatabaseOpen 
       const string  table_or_sql,       // nombre del recuadro o solicitud SQL 
       const string  filename,           // nombre del archivo CSV para exportar datos 
       uint          flags,              // combinación de banderas 
       const string  separator           // separador de datos en el archivo CSV 
       );

    DatabasePrint
    Imprime el recuadro o resultado de la ejecución de una solicitud SQL en el diario de expertos.
    long  DatabasePrint(
       int           database,          // manejador de la base de datos obtenido en DatabaseOpen
       const string  table_or_sql,      // recuadro o solicitud SQL
       uint          flags              // combinación de banderas
       );

  4. Añadida la función FileSelectDialog, que llama a una ventana de diálogo de sistema para crear/abrir un archivo o carpeta.
    int  FileSelectDialog(
       string   caption,              // encabezado de la ventana
       string   initial_dir,          // carpeta inicial
       string   filter,               // filtro de extensiones
       uint     flags,                // combinación de banderas
       string&  filenames[],          // matriz con los nombres de los archivos
       string   default_filename      // nombre del archivo por defecto
       );
    La nueva función permite implementar una cómoda interacción entre el usuario y un programa MQL5.

  5. Añadido a la enumeración ENUM_DEAL_PROPERTY_DOUBLE el valor DEAL_FEE, el pago por la realización de una transacción. De hecho, se trata de un tipo aparte de comisión que puede ser cobrada por el bróker.

Tester

  1. Añadida la posibilidad de establecer ajustes propios para la cuenta comercial al simular una estrategia, por ejemplo, limitaciones comerciales, ajustes de margen y comisiones. De estas forma, usted tendrá aún más posibilidades a la hora de simular diferentes condiciones comerciales con los brókeres.



    Ajustes generales
    En este apartado, usted podrá establecer el número máximo de órdenes y posiciones abiertas que se podrán tener simultáneamente en la cuenta. Asimismo, podrá configurar las sesiones en que el programa simulado no podrá comerciar.

    Margen
    Aquí podrá controlar por completo cómo se reservará el margen y qué sistema de registro de posiciones se utilizará durante la simulación:

    • Gestión de riesgos — modelo de gestión de riesgos: extrabursátil o bursátil, con compensación y cobertura. Podrá encontrar información detallada sobre ellos en la guía de ayuda.
    • Nivel de "Margin call" — al alcanzarse este nivel de fondos, la cuenta cambia al estado Margin call.
    • Nivel de "Stop out" — al alcanzarse este nivel de fondos, en la cuenta se cancelan forzosamente las órdenes, y también se cierran las posiciones comerciales. Ambos niveles se pueden indicar en porcentaje y en dinero. En el primer caso, los niveles se definen como el valor del indicador "Fondos" en la cuenta. Al seleccionar la opción "En porcentaje", los niveles se definen como el valor del indicador "Nivel de margen" en la cuenta (Fondos/Margen*100).
    • No realizado — en este campo se indica de qué forma se registrará el beneficio/pérdidas flotantes en el margen libre:
      • No usar el beneficio/pérdidas flotantes — no tener en cuenta en el cálculo las posiciones abiertas.
      • Usar beneficio/pérdidas flotantes — utilizar en el cálculo las pérdidas y el beneficio de las posiciones abiertas
      • Usar beneficio flotante — usar solo el beneficio.
      • Usar pérdidas flotantes — usar solo las pérdidas.
    • Fijado diario — en este campo se indica de qué forma se tendrá en cuenta el beneficio/pérdidas fijados por el tráder durante el día comercial, en el margen libre:
      • Usar beneficio/pérdidas fijados diarios — tener en cuenta el beneficio y las pérdidas registrados durante el día comercial, en el margen libre.
      • Usar pérdidas fijadas diarias — tener en cuenta solo las pérdidas registradas durante el día comercial, en el margen libre. Durante el día, el benenficio diario se fija en un campo aparte de la cuenta ("Bloqueado"). Al finalizar el día comercial, el beneficio acumulado se libera (se pone a cero) y se representa en el balance de la cuenta (se tiene en cuenta en el margen libre).
    • Liberar el beneficio acumulado al final del día — esta opción solo está disponible activando la opción "Usar pérdidas fijadas diarias". Si está activada, al final del día comercial, el beneficio acumulado durante el día se liberará y se registrará en el balance (y, por consiguiente, se tendrá en cuenta en el margen libre). De lo contrario, el beneficio permanecerá bloqueado.

    Comisión
    En este apartado, usted controlará por completo cómo se cobra la comisión de todas las operaciones comerciales.

    • Las comisiones pueden ser de un solo nivel o de varios, es decir, se pueden cobrar por la misma cuantía, independientemente del volumen de la transacción/circulación, o diferenciarse en función de su magnitud. En las especificaciones se muestra la información correspondiente.
    • Las comisiones pueden cobrarse al realizarse una transacción o al final del día/mes comercial.
    • Las comisiones se cobrarán dependiendo de la dirección de la transacción: por la entrada, por la salida, o por ambos tipos de operación.
    • Las comisiones pueden cobrarse por cada lote o por cada transacción.
    • Las comisiones pueden cobrarse en diferentes magnitudes: en dinero, en tanto por ciento o en puntos.


  2. Optimizado y acelerado significativamente el trabajo en el modo "Escaneo del mercado", cuando se realizan varias pasadas de prueba de todos los símbolos de la "Observación de mercado".
  3. Al calcular el beneficio en pips, ahora se tiene en cuenta el tamaño de la transacción o posición. Antes, el cálculo se realizaba sin tener en cuenta el volumen, como si fuera para un solo lote.
  4. Mejorado el control del gráfico de resultados de la optimización. Al aumentar el zoom sobre un gráfico de optimización normal, ahora es posible girarlo. Clique dos veces en un punto del gráfico para destacar el resultado correspondiente en el recuadro de pasadas.
Documentación actualizada.
13 diciembre 2019
MetaTrader 5 Platform Build 2280

Terminal

  1. Corregido el error que impedía eliminar un experto de un gráfico para el que no hay datos.
  2. Corregida la representación de los encabezados de los gráficos al trabajar con Wine.

MQL5

  1. Acelerada la carga y compilación de programas MQL5.
  2. Ahora, al clicar dos veces sobre un gráfico, al programa MQL5 se le transmite un evento de clic único. Anteriormente, estos eventos no eran procesados.
  3. Corregido el funcionamiento de la función StringTrimRight.
  4. Añadida la documentación sobre las funciones DirectX para la visualización 3D.

Tester

  1. Corregido el error que provocaba que el símbolo para la simulación en los ajustes pudiera resultar vacío. Esto podía suceder al alternar entre cuentas comerciales con diferentes conjuntos de instrumentos comerciales. Cómo tiene lugar ahora: si el símbolo anteriormente elegido en los ajustes no se encuentra entre los disponibles en la cuenta comercial, en su lugar se selecciona automáticamente el primer símbolo disponible de la Observación de mercado.

MetaEditor

  1. Corregida la carga del icono de la aplicación al abrir de nuevo las propiedades del proyecto.

Actualizadas las traducciones de la interfaz de usuario.
Correcciones de crash logs.
6 diciembre 2019
MetaTrader 5 build 2265: Funciones DirectX para visualización 3D en MQL5 y ajuste de instrumentos en el simulador de estrategias

Terminal

  1. Lista ampliada de columnas disponibles en la Observación de mercado. Ahora, en el apartado principal, usted podrá activar hasta 40 parámetros adicionales de instrumentos que antes estaban disponibles solo en la pestaña "Detalles".




  2. Añadido el resaltado de la cuenta actualmente conectada y el servidor actual en el Navegador. La función le resultará útil si usted utiliza muchas cuentas con brókeres diferentes.




  3. Actualizado el diseño de los marcos de los gráficos. Ahora son más compactos, liberando más espacio para la información útil.




  4. Modificado el algoritmo de cálculo del total de trading al representar la historia comercial en forma de posiciones. Ahora, estos se calculan según los registros reales.

    Para presentar la historia en forma de posiciones, el terminal usa la información sobre las transacciones realizadas en el periodo del que se ha solicitado la historia. En este caso, se muestran solo las posiciones que han sido cerradas en este periodo. Si una posición aún no ha sido cerrada, o su hora de cierre no entra en el intervalo seleccionado, no se representará. En relación con esto, los indicadores finales (beneficio, comisión) al mirar las posiciones y al mirar las órdenes/transacciones pueden diferenciarse.

    Por ejemplo, usted está mirando la historia de la última semana. En dicho periodo se han realizado 100 transacciones, 98 de las cuales han abierto y cerrado 20 posiciones. Las dos últimas transacciones han abierto nuevas posiciones que no se han cerrado aún. En este caso, al mirar la historia en forma de transacciones, usted verá 100 entradas, así como los indicadores totales calculados sobre su base. Al mirar la historia en forma de posiciones, usted verá 20 entradas recopiladas sobre la base de 98 transacciones. Y precisamente estos datos se tendrán en cuenta al calcular los indicadores finales. Si el bróker cobra una comisión de las transacciones de entrada, la suma final de la comisión al mirar la historia de transacciones y de posiciones será distinta, ya que, en el último caso, las dos últimas transacciones no serán tenidas en cuenta.

  5. Acelerado el inicio de los programas MQL5.
  6. Añadida la clave /beta para el archivo de instalación del terminal. Esta permite cargar la versión beta del programa en lugar de la versión de lanzamiento. En el modo habitual, para obtener la versión beta primero es necesario instalar la versión de lanzamiento, y ya después actualizarla. Ahora podemos omitir este paso, ahorrando tiempo y tráfico. Ejemplo de inicio de la instalación:
    C:\mt5setup.exe /beta
  7. Corregido el error en la representación de los requerimientos de margen para las acciones bursátiles (instrumentos con el tipo "Exchange Stocks").
  8. Acelerado el funcionamiento de los componentes de la plataforma gracias al uso del compilador Clang/LLVM. En algunos casos, el aumento de velocidad alcanza el 20%.

MQL5

  1. Añadidas nuevas funciones y sombreadores DirectX 11 para la visualización 3D. Ahora, usted podrá crear un potente gráfico en tres dimensiones directamente en MQL5.

    La nueva clase CCanvas3D es una expansión de la clase de gráfico de usuario CCanvas. Está disponible en el directorio \MQL5\Include\Canvas\. En él si implementan las funciones para renderizar objetos en tres dimensiones a través de DirectX API.

    • Create — crear una escena.
    • Attach — vincular una escena al gráfico.
    • Destroy — eliminar una escena.
    • ObjectAdd — añadir un objeto heredero de la clase básica CDXObject a una escena.
    • Render — ciclo completo de renderización con limpiado de búferes y renderización de todos los CDXObject añadidos con la ayuda del método ObjectAdd.
    • RenderBegin — comienza la renderización de la escena, rellena el búfer de representación con el color indicado (si usamos la bandera DX_CLEAR_COLOR) y los búferes de profundidad (si usamos DX_CLEAR_DEPTH), asimismo, establece el búfer de escena DXInputScene para los sombreadores por defecto.
    • RenderEnd — finaliza la renderización de la escena y obtiene el resultado en el búfer interno. Con redraw==true, muestra la imagen en el gráfico al que está fijado.
    • ViewMatrixGet — obtener la matriz de visualización.
    • ViewMatrixSet — establecer la matriz de visualización. La matriz no es compatible con los métodos ViewPositionSet, ViewRotationSet, ViewTargetSet, ViewUpDirectionsSet.
    • ViewPositionSet — establecer la posición de la cámara.
    • ViewRotationSet — establecer la matriz de rotación de la cámara.
    • ViewTargetSet — establecer el punto al que la cámara se encuentra apuntada. Junto con ViewUpDirectionsSet, es una alternativa a ViewRotationSet.
    • ViewUpDirectionsSet — establecer la posición vertical de la cámara. Junto con ViewTargetSet, es una alternativa a ViewRotationSet.
    • ProjectionMatrixGet — obtener la matriz de proyección.
    • ProjectionMatrixSet — establecer la matriz de proyección.

    En breve estará disponible la documentación completa sobre la nueva biblioteca.




  2. Añadido el soporte de operaciones con las bases de datos SQLite directamente desde MQL5. Ahora, usted podrá ejecutar fácilmente solicitudes SQL sin crear envoltorios complejos. La nueva expansión de la biblioteca estándar asume todo el trabajo interno.

    Están disponibles las siguientes funciones:

    • DatabaseOpen — abre o crea una base de datos en el archivo indicado
    • DatabaseClose — cierra una base de datos
    • DatabaseTableExists — comprueba la presencia de un recuadro en la base de datos
    • DatabaseExecute — ejecuta una solicitud a la base de datos indicada
    • DatabasePrepare — crea el manejador de una solicitud, que después puede ser ejecutada con la ayuda de DatabaseRead()
    • DatabaseRead — ejecuta el paso a la siguiente entrada en el resultado de la solicitud
    • DatabaseFinalize — elimina la solicitud creada en DatabasePrepare()
    • DatabaseTransactionBegin — comienza la ejecución de una transacción
    • DatabaseTransactionCommit — finaliza la ejecución de una transacción
    • DatabaseTransactionRollback — ejecuta el retroceso de una transacción
    • DatabaseColumnsCount — obtiene el número de campos en una solicitud
    • DatabaseColumnName — obtiene el nombre de un campo según el número
    • DatabaseColumnType — obtiene el tipo de un campo según el número
    • DatabaseColumnSize — obtiene el tamaño del campo en bytes
    • DatabaseColumnText — obtiene de la entrada actual el valor del campo en forma de línea
    • DatabaseColumnInteger — obtiene de la entrada actual un valor del tipo int
    • DatabaseColumnLong — obtiene de la entrada actual un valor del tipo long
    • DatabaseColumnDouble — obtiene de la entrada actual un valor del tipo double
    • DatabaseColumnBlob — obtiene de la entrada actual el valor del campo en forma de matriz

    Para trabajar con las funciones se han añadido los siguientes códigos de errores:

    • ERR_MQL_DATABASE_INTERNAL (5120) — error interno en la base de datos
    • ERR_MQL_DATABASE_INVALID_HANDLE (5121) — manejador no válido de la base de datos
    • ERR_MQL_DATABASE_TOO_MANY_OBJECTS (5122) se ha superado el número máximo permitido de objetos Database
    • ERR_MQL_DATABASE_CONNECT (5123)error al conectarse a la base de datos
    • ERR_MQL_DATABASE_EXECUTE (5124) error de ejecución de la solicitud
    • ERR_MQL_DATABASE_PREPARE (5125) error al crear la solicitud
    • ERR_MQL_DATABASE_NO_MORE_DATA (5126) — ya no hay más datos para la lectura
    • ERR_MQL_DATABASE_STEP (5127) error al pasar a la siguiente entrada de la solicitud
    • ERR_MQL_DATABASE_NOT_READY (5128) los datos para leer los resultados de la solicitud aún no están preparados
    • ERR_MQL_DATABASE_BIND_PARAMETERS (5129) error al realizar la autosustitución de los parámetros en la solicitud SQL

  3. Añadida una nueva propiedad de los programas MQL5 para seleccionar el método de visualización por defecto.
    #property optimization_chart_mode "3d,InpX,InpY"
    Al usarla, usted podrá establecer el tipo de gráfico abierto al finalizar la optimización, así como los parámetros del programa para su eje X e Y.

    La propiedad establece solo el aspecto del gráfico por defecto. El usuario puede cambiarlo manualmente en cualquier momento a través del menú contextual.

  4. Añadida la función MathArctan2. Esta retorna en radianes el valor del ángulo cuya tangente es igual a la razón de las dos cifras indicadas.
    double  MathArctan2(
       double  y      // coordenada y del punto
       double  x      // coordenada x del punto
       );
  5. Realizada la optimización general de los programas para mejorar el rendimiento y reducir el gasto de recursos.
  6. Añadidos varios ejemplos de cálculos matemáticos que se pueden ejecutar en el simulador de estrategias. Podrá encontrarlos en el directorio \MQL5\Experts\Examples\Math 3D\.
  7. Implementado un control más estricto del ámbito de espacio de nombres (namespaces).
  8. Añadida la carga de bibliotecas conectadas al usar las bibliotecas .NET en los programas MQL5. Si la biblioteca .NET utilizada necesita otras bibliotecas para su funcionamiento, el compilador intentará cargarlas automáticamente desde el directorio actual o desde el directorio \MQL5\Libraries.
  9. Corregidas las operaciones con la hora en el módulo MetaTrader para la integración con Python. Ahora, en todos los datos de salida se usa la hora del servidor comercial al que está conectado el terminal.

Tester

  1. Multitud de nuevas funciones y mejoras en el simulador de estrategias:


    Ajustes personalizados para los instrumentos financieros
    Ahora, usted podrá cambiar los ajustes del instrumento comercial principal en el que se realiza la simulación/optimización. Tendrá a su alcance prácticamente todos los parámetros de especificación: volumen, modo comercial, requerimientos de margen, modo de ejecución y mucho más. De esta manera, a la hora de poner a prueba un asesor en otras condiciones comerciales, no será necesario crear un símbolo personalizado y cargar toda la historia en él. Solo tendrá que cambiar los ajustes del instrumento estándar.



    Al cambiar las especificaciones del símbolo, el icono de ajustes, así como el icono del propio símbolo, se destacarán con un asterisco. De esta forma, usted siempre sabrá que la simulación se está realizando con los ajustes personalizados.




    Últimos ajustes/expertos/gráficos
    Para configurar rápidamente la simulación o la optimización, use los nuevos comandos del menú contextual. Elija los últimos ajustes, gráficos o programas utilizados para el simulador:




MetaEditor

  1. Añadida la posibilidad de trabajar con proyectos С/С++ y Python directamente desde MetaEditor. Ahora, al usar el editor incorporado, usted podrá gestionar proyectos multilingües.

    Si en su computadora ya han sido instalados los compiladores correspondientes, MetaEditor los detectará y los añadirá a los ajustes. Además, usted podrá indicar por sí mismo las rutas a los componentes necesarios, entrando en la pestaña "Compiladores". Si los componentes aún no han sido instalados, podrá descargarlos pulsando "Instalar" junto al campo adecuado.




    Después de ello, podrá trabajar con proyectos en С/С++ y Python, de la misma forma que se hace con los programas MQL5.

  2. Ahora, dentro del directorio Shared Projects destinado al trabajo con proyectos grupales a través de MQL5 Storage, es posible crear sub-proyectos. Antes, solo se permitía la creación de proyectos individuales en el nivel superior.
  3. Actualizado el depurador incorporado.
  4. Corregida la adición del encabezado de las funciones al usar el estilizador de código.
  5. Los comandos de paso a la posición anterior y posterior del cursor ahora están disponibles no solo en el menú "Ver", sino también el panel de instrumentos.
  6. Ahora, en los nombres de los proyectos está permitido usar el espacio.

Android

  1. Añadida la posibilidad de paso rápido al ingreso/retirada de fondos de la cuenta comercial en el sitio web del bróker.

    Ahora, no deberá buscar las funciones correspondientes en el perfil personal en el sitio web del bróker. Los comandos de paso rápido a las páginas de ingreso de fondos y retirada de fondos ahora están disponibles directamente en el terminal, en el menú de cuentas y comercio:



    • Los comandos de ingreso/retirada estarán disponibles en el caso de que las funciones correspondientes se encuentren activadas para la cuenta comercial en el lado del bróker.
    • El terminal comercial no realiza ninguna operación de ingreso/retirada de fondos desde la cuenta. Las funciones incorporadas solo redireccionan al usuario hacia las páginas web correspondientes de la compañía de corretaje.

  2. Ahora, las posiciones en la historia se clasifican según la fecha de cierre.
  3. Las posiciones cerradas por Stop Loss y Take Profit ahora se destacan con líneas verticales rojas y verdes en el apartado de la historia.
  4. Añadidos nuevos campos a las especificaciones del instrumento comercial:

    • Categoría: la propiedad se usa para marcar adicionalmente los instrumentos financieros. Por ejemplo, en él se pueden indicar los sectores del mercado a los que pertenece un símbolo: Agriculture, Oil & Gas, etcétera. Se mostrará solo si el bróker ofrece la información correspondiente.
    • Bolsa: aquí se indica el nombre de la bolsa o plataforma en la que se comercia con el símbolo. Se mostrará solo si el bróker ofrece la información correspondiente.

  5. Añadida la indicación del estado "Margin call" en el apartado de comercio. Si se da este estado, los parámetros "Margen", "Margen libre" y "Nivel de margen" se pondrán en rojo.
  6. Corregida la representación del botón de paso al apartado de contraseñas de un solo uso en las tabletas.
  7. Multitud de mejoras y correcciones.

iPhone/iPad

  1. Añadida la posibilidad de paso rápido al ingreso/retirada de fondos de la cuenta comercial en el sitio web del bróker. Los detalles del funcionamiento se muestran más arriba, en la descripción de los cambios del terminal para Android.



  2. Añadido el soporte del modo oscuro para iOS/iPadOS.
  3. El apartado de trabajo con contraseñas OTP ahora está disponible también en la versión para iPad.
  4. Las posiciones cerradas por Stop Loss y Take Profit ahora se destacan con líneas verticales rojas y verdes en el apartado de la historia.
  5. Ahora, las posiciones en la historia se clasifican según la fecha de cierre. Si una posición aún no ha sido cerrada, para la clasificación se usará su fecha de apertura.
  6. Multitud de mejoras y correcciones.



18 octubre 2019
MetaTrader 5 build 2190

Terminal

  1. Corregida la clasificación de los programas MQL5 en el navegador.

MQL5

  1. Corregido el error de compilación que surgía al usar las variables estáticas locales, si se declaraba input group en el programa.

VPS

  1. Corregidos los errores surgidos al solicitar el diario del hosting.

Tester

  1. Mejorada la representación de los gráficos de optimización en tres dimensiones.
  2. Corregida la recepción de frames en la optimización en tiempo real. Ahora, todos los frames de la optimización principal y en tiempo real están disponibles en la función OnTesterDeinit.
  3. Corregida la construcción del árbol de símbolos en los ajustes del simulador.

Añadida la traducción de la interfaz de usuario al panyabí (India).

Documentación actualizada.

Correcciones de crash logs.

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

5 octubre 2019
MetaTrader 5 build 2170: Ámbitos en MQL5, y actualización global del simulador de estrategias y el hosting incorporado

Terminal

  1. Rediseñada por completo la gestión del servicio de hosting virtual. Toda la información sobre el terminal alquilado, así como las funciones de migración del entorno, pausa e inicio están ahora disponibles en la pestaña "Instrumentos". 

    Antes, para trabajar con el hosting virtual se usaba el menú contextual de la cuenta en el Navegador. Ahora, usted siempre tendrá a la vista toda la información y los comandos de control necesarios en la pestaña "VPS":




    En la parte inquierda está disponible la información necesaria sobre la suscripción:

    • Los datos sobre la conexión: comparación de los retrasos de red entre su terminal en el servidor del hosting y el terminal en la computadora local.
    • La cuenta comercial para la que se ha alquilado el hosting, así como su tarifa de pago.
    • El identificador único de la suscripción. Pulsándolo, usted entrará en el apartado "Hosting" en su perfil de MQL5.community, donde podrá gestionar la suscripción.
    • La fecha de contratación y el estado actual. Si su hosting ha sido interrumpido, usted podrá saberlo al instante.

    Con el botón Start/Stop, usted podrá pausar y reiniciar rápidamente el terminal virtual.

    En la parte derecha se muestra la información sobre el equipamiento en el servidor de hosting, así como los gráficos de consumo de recursos por parte de us terminal. Si su experto o indicador usa demasiada memoria o tiempo del procesador, podrá detectarlo en el acto, reaccionando a tiempo ante semejante eventualidad.

    Aquí también dispondrá de información sobre la última migración del entorno comercial, además de comandos para realizarla de nuevo. Ahora, usted no olvidará trasladar el entorno después de comprar un hosting.

    El alquiler del hosting virtual ahora también puede formalizarse a través de la pestaña "VPS". En este caso, además, el propio proceso no ha cambiado: se realiza de forma sencilla y en solo un par de pasos. Solo tiene que seleccionar su tarifa y un sistema de pago adecuado. El mejor servidor para la conexión con su bróker se seleccionará de forma automática.




  2. Añadida la posibilidad de paso rápido al ingreso/retirada de fondos de la cuenta comercial en el sitio web del bróker.

    Ahora, no deberá buscar las funciones correspondientes en el perfil personal en el sitio web del bróker. Los comandos de paso rápido a las páginas de ingreso de fondos y retirada de fondos ahora están disponibles directamente en el terminal, en el menú de cuentas en el Navegador y en la pestaña de comercio en los Instrumentos:



    • Los comandos de ingreso/retirada estarán disponibles en el caso de que las funciones correspondientes se encuentren activadas para la cuenta comercial en el lado del bróker.
    • El terminal comercial no realiza ninguna operación de ingreso/retirada de fondos desde la cuenta. Las funciones incorporadas solo redireccionan al usuario hacia las páginas web correspondientes de la compañía de corretaje.
  3. Añadidos nuevos campos a las especificaciones del instrumento comercial:

    Categoría
    La propiedad se usa para marcar adicionalmente los instrumentos financieros. Por ejemplo, en él se pueden indicar los sectores del mercado a los que pertenece un símbolo: Agriculture, Oil & Gas, etcétera. Se mostrará solo si el bróker ofrece la información correspondiente.

    Bolsa
    Aquí se indica el nombre de la bolsa o plataforma en la que se comercia con el símbolo. Se mostrará solo si el bróker ofrece la información correspondiente.

    Comisión
    Aquí se representa la información sobre las comisiones cobradas por el bróker al realizar transacciones de un instrumento. Se muestran todos los detalles del cálculo:

    • Las comisiones pueden ser de un solo nivel o de varios, es decir, se pueden cobrar por la misma cuantía, independientemente del volumen de la transacción/circulación, o diferenciarse en función de su magnitud. En las especificaciones se muestra la información correspondiente.
    • Las comisiones pueden cobrarse al realizarse una transacción o al final del día/mes comercial.
    • Las comisiones se cobrarán dependiendo de la dirección de la transacción: por la entrada, por la salida, o por ambos tipos de operación.
    • Las comisiones pueden cobrarse por cada lote o por cada transacción.
    • Las comisiones pueden cobrarse en diferentes magnitudes: en dinero, en tanto por ciento o en puntos.

    Por ejemplo, la siguiente entrada significa que la comisión se carga de inmediato al realizar las transacciones de entrada y salida. Con un volumen de transacción de 0 a 10 lotes, la comisión cobrada será de 1.2 USD por operación. Con un volumen de transacción de 11 a 20 lotes, la comisión cobrada será de 1.1 USD por cada lote de la transacción.
    Comisión | Instantánea por volumen, transacción de entrada/salida
    0  - 10  | 1.2 USD por transacción
    11 - 20  | 1.1 USD por lote



  4. En las especificaciones de los instrumentos se han añadido campos adicionales para las opciones:

    • Tipo de opción: call o put
    • Base: instrumento básico de la opción
    • Precio strike: precio de ejecución de la opción

  5. Añadido el soporte del envío de letras griegas para las opciones: delta, gamma, vega, theta, ro. Ahora, los brókeres podrán transmitir para estos instrumentos información adicional en el apartado de estadísticas en la observación de mercado, lo que aumentará las posibilidades de análisis para los tráders:




  6. Ahora, el instrumento "Cursor en cruz" muestra la distancia entre los niveles de precio no solo en pips, sino también en tanto por ciento:




  7. Ahora, al realizar operaciones en los modos de ejecución "Según el mercado" y "Bursátil" en las ventanas de diálogo de trading se muestra el precio total de la transacción, si se conoce en el momento que se recibe la respuesta del bróker:




  8. Corregido el error que provocaba que el comando "Mostrar todos" en la Observación de mercado no mostrase en ciertos casos la lista completa de todos los instrumentos comerciales disponibles.

MQL5

  1. Modificado el funcionamiento del ámbito, lo cual hace MQL5 aún más próximo a C++. Los programadores de MQL5 tendrán mucha más libertad para usar bibliotecas de terceros. Ya no será necesario modificarlas y convertir todos los identificadores en un tipo único.

    Ejemplo: en el código se han añadido dos estructuras con nombre idéntico, pero en clases diferentes. Antes, esta declaración generaba el error de compilación "identifier already used". Ahora, este código se compilará y ejecutará con éxito. Además, para recurrir correctamente a la variable/estructura/función necesaria desde fuera de su ámbito, deberemos indicar la clase, en este caso, CBar::Item.
    class CFoo
      {
    public:
       struct Item { int x; };
      };
    //+------------------------------------------------------------------+
    class CBar
      {
    public:
       struct Item { int x; };
      };
      
    CBar::Item item;  // declaración correcta de la estructura Item de la clase Bar
    Item       item;  // declaración incorrecta
    Asimismo, se ha añadido el soporte del espacio de nombres (namespace), lo que da una mayor libertad al utilizar códigos/bibliotecas de terceros en programas propios.

    #define PrintFunctionName() Print(__FUNCTION__)
    
    namespace NS
    {
    void func()
      {
       PrintFunctionName();
      }
    
    struct C
      {
       int               x;
                         C() { PrintFunctionName(); };
      };
    }
    
    struct C
      {
       int               x;
                         C() { PrintFunctionName(); };
      };
    
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void func()
      {
       PrintFunctionName();
      }
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       func();
       NS::func();
    
       C c;
       NS::C ac;
      }
    Como resultado de la ejecución, el programa mostrará las siguientes líneas:
    2019.09.18 13:39:35.947    TestScript (AUDCAD,H1)    func
    2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    NS::func
    2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    C::C
    2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    NS::C::C

  2. Aumentada la velocidad de acceso a los datos de las series temporales con la ayuda de las funciones iTime, iOpen, iHigh, iLow, iClose, iVolume, iTickVolume, iSpread.

  3. Añadido el soporte del atributo "=delete". Permite prohibir el uso de métodos de clase concretos.
    class A
      {
       void              operator=(const A &)=delete;    // prohibimos el operador de copiado de un objeto
      };
    
    class B : public A
      {
      };
    
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       A a1,a2;
       B b1,b2; 
      
       a1=a2;
       b1=b2;
      }
    En este ejemplo, para las líneas "a1=a2" y "b1=b2", el compilador dará el error:
    attempting to reference deleted function 'void A::operator=(const A&)'
       function 'void A::operator=(const A&)' was explicitly deleted here

    attempting to reference deleted function 'void B::operator=(const B&)'
       function 'void B::operator=(const B&)' was implicitly deleted because it invokes deleted function 'void A::operator=(const A&)'

  4. Añadidos a la enumeración ENUM_SYMBOL_INFO_STRING los siguientes valores:

    • SYMBOL_CATEGORY — categoría del símbolo. Se usa para marcar adicionalmente los instrumentos financieros. Por ejemplo, en él se pueden indicar los sectores del mercado a los que pertenece un símbolo: Agriculture, Oil & Gas, etcétera.
    • SYMBOL_EXCHANGE — nombre de la bolsa o plataforma en la que se comercia con el símbolo.

  5. Añadido el soporte de cierre de posiciones según la regla FIFO.

    • Añadido a la enumeración ENUM_ACCOUNT_INFO_INTEGER el valor ACCOUNT_FIFO_CLOSE, que indica que una posición se puede cerrar solo según la regla FIFO. Si el valor de la propiedad es true, solo estará permitido cerrar las posiciones de cada símbolo en el orden en el que se han abierto: primero la más antigua, después la más reciente, etcétera. Si se trata de cerrar las posiciones en otro orden, obtendremos error. Para las cuentas sin sistema de cobertura de registro de posiciones (ACCOUNT_MARGIN_MODE!=ACCOUNT_MARGIN_MODE_RETAIL_HEDGING), la propiedad siempre será igual a false.
    • Añadido un nuevo código de retorno del servidor TRADE_RETCODE_FIFO_CLOSE, la solicitud ha sido rechazada, dado que para la cuenta comercial se ha establecido la regla "Solo se permite el cierre de las posiciones existentes según la regla FIFO".

    El cierre de posiciones puede realizarse de tres modos principales:

    • Cierre a través del terminal de cliente: se trata del cierre manual de posiciones por parte del tráder, con la ayuda de un robot comercial mediante el servicio "Señales", etcétera. Si se intenta cerrar una posición en disconformidad con la regla FIFO, el tráder obtendrá el error correspondiente.
    • Cierre por la activación de un Stop Loss o un Take Profit: estas órdenes se procesan en el lado del servidor, por consguiente, el cierre de posiciones también será iniciado en tal caso no por el tráder (terminal), sino por el servidor. Si se ha activado un Stop Loss o un Take Profit para una posición, y esta posición no se corresponde con la regla FIFO (existen posiciones anteriores del mismo símbolo), esta no será cerrada.
    • Cierre por activación de un Stop Out: estas operaciones también se procesan en el lado del servidor. En el modo normal, cuando el cierre por la regla FIFO está desactivado, al darse un Stop Out, las posiciones se cerrarán comenzando por la que más pérdidas tenga. Si desactivamos esta opción, se verificará de forma adicional la hora de apertura de las posiciones con pérdidas cerradas. El servidor determina las posiciones con pérdidas de cada símbolo, localiza para cada símbolo la posición más antigua, y después cierra entre las posiciones encontradas aquella que tiene mayores pérdidas.

  6. Añadida la posibilidad de agrupar los parámetros a través de "input group". Esto permitirá separar visualmente unos parámetros de otros usando como base la lógica implementada en ellos.
    Ejemplo de asesor cuyo bloque de parámetros de entrada está dividido según su cometido:
    input group           "Signal"
    input int             ExtBBPeriod    =20;         // Bollinger Bands period
    input double          ExtBBDeviation =2.0;        // deviation
    input ENUM_TIMEFRAMES ExtSignalTF    =PERIOD_M15; // BB timeframe
    
    input group           "Trend"
    input int             ExtMAPeriod    =13;         // Moving Average period
    input ENUM_TIMEFRAMES ExtTrendTF     =PERIOD_M15; // MA timeframe
    
    input group           "ExitRules"
    input bool            ExtUseSL       =true;       // use StopLoss
    input int             Ext_SL_Points  =50;         // StopLoss in points
    input bool            ExtUseTP       =false;      // use TakeProfit
    input int             Ext_TP_Points  =100;        // TakeProfit in points
    input bool            ExtUseTS       =true;       // use Trailing Stop
    input int             Ext_TS_Points  =30;         // Trailing Stop in points
    
    input group           "MoneyManagement"
    sinput double         ExtInitialLot  =0.1;        // initial lot value
    input bool            ExtUseAutoLot  =true;       // automatic lot calculation
    
    input group           "Auxiliary"
    sinput int            ExtMagicNumber =123456;     // EA Magic Number
    sinput bool           ExtDebugMessage=true;       // print debug messages
    Al iniciar un asesor de este tipo, en el simulador de estrategias aparece la posibilidad de minimizar y desplegar el bloque de parámetros de entrada de un grupo haciendo doble clic sobre el nombre del mismo, y también de seleccionar todos parámetros de un grupo para la optimización clicando sobre la casilla de verificación de este.




  7. Corregido el error que surgía al importar funciones desde DLL, cuyos nombres coincidían con funciones de MQL. Ejemplo:
    #import "lib.dll"
    int func();
    #import
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    int func()
      {
       return(0);
      }
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       Print( func() );
      }
    Antes, la compilación de este código daba error:
    'func' - ambiguous call to overloaded function with the same parameters
    could be one of 2 function(s)
       int func()
       int func()
    Ahora, en lugar de error, se usará por defecto la función MQL incorporada como aquella con mayor prioridad. Para llamar una función importada, será necesario indicar explícitamente su ámbito:
    void OnStart()
      {
       Print( lib::func() );
      }
  8. Corregida la indicación de la hora en las noticias del calendario económico. Ahora, la hora de un evento se transmite teniendo en cuenta el huso horario del servidor comercial al que está conectado el terminal, y no el huso horario de la computadora local.
  9. Corregido el consumo excesivo de memoria en las funciones CopyTicks y CopyTicksRange.

Signals

  1. Corregida la representación de los gráficos de las señales al trabajar con Wine (Mac OS y Linux).

Tester

  1. El simulador de estrategias ha sido sustancialmente actualizado: se ha añadido una página de inicio, se ha rediseñado la página de ajustes y se ha mejorado la comodidad de uso.

    Página de inicio
    Ahora, al iniciar el simulador, en lugar de multitud de ajustes, al usuario se le ofrecerá seleccionar una de las tareas tipadas y proceder rápidamente a su solución. La novedad está destinada, en primer lugar, a los usuarios sin experiencia.

    Hemos destacado varias tareas principales de simulación y optimización de estrategias y las hemos representado gráficamente en la primera página. Aparte de esto, desde la página de inicio también se puede reiniciar rápidamente una de las tareas anteriores. Si usted ha iniciado muchas tareas y todas ellas no caben en la lista, use el campo de búsqueda. Este permite encontrar un test según cualquier parámetro: según el nombre del programa, el instrumento, el marco temporal, el tipo de modelado, etcétera.




    Ocultar parámetros irrelevantes
    Al elegir una de las tareas de la página inicial, usted pasará a un apartado de ajuste más preciso de los parámetros de simulación: selección del robot, del instrumento, del periodo, etcétera. Para facilitar el trabajo, se ocultarán todos los parámetros innecesarios para la tarea elegida. Por ejemplo, si usted ha elegido los cálculos matemáticos, solo tendrá que establecer dos parámetros: seleccionar el programa para la simulación y el modo de optimización. Los ajustes del periodo de simulación, los retrasos y la generación de ticks permanecerán ocultos.




    Cómodos ajustes de simulación
    Para mayor comodidad, algunos parámetros en la página de ajustes han sido reagrupados. Asimismo, para los parámetros de retraso y visualización se han añadido aclaraciones ampliadas. Aparte de ello, los ajustes de simulación ahora se pueden guardar y cargar manualmente, lo que permite regresar rápidamente a los anteriores resultados.




    Desde aquí, podrá pasar rápidamente a la edición del programa en el MetaEditor.

    Cálculo del beneficio en pips
    Ahora, usted podrá activar en los ajustes el cálculo del beneficio en pips. Esto permite acelerar el proceso de simulación gracias a que el beneficio no será recalculado en la divisa del depósito usando tasas de conversión (y, por consiguiente, no será necesario descargar su historia de precios). Asimismo, en este modo no se calculan los swaps y comisiones.




    Tenga en cuenta que al calcular el beneficio en pips, el volumen de las transacciones realizadas no tiene importancia. Para cada transacción siempre se calcula solo el número de pips ganados/perdidos. Además, en este modo casi no existe el control del margen. Úselo solo para valorar su estrategia rápidamente y en general, mientras que verifica los resultados obtenidos en modos más precisos.

    Mejoras generales
    El botón de inicio/pausa de la simulación, así como la barra de progreso, han sido desplazados al panel de pestañas. Esto le permitirá controlar el progreso, sea cual sea el apartado del simulador en el que se encuentre. Aparte de lo mencionado, los comandos de inicio y pausa de la simulación han sido añadidos al menú de los apartados de ajuste y parámetros de entrada.




  2. El gráfico de los resultados de optimización ahora se representa en la zona de trabajo principal del terminal, y no en un apartado separado del simulador de estrategias. Esto permite usar mucho más espacio para la representación, lo que hace más cómodo el análisis de datos. Aparte de ello, se ha actualizado el sistema de visualización en 3D.




  3. Añadido el guardado de la caché de optimización para el modo "Todos los símbolos en la Observación de mercado".
  4. Añadido el guardado de la caché de simulación.

    Antes, los resultados de las tareas realizadas se guardaban en archivos solo al optimizar los asesores. Ahora, los archivos de caché se guardan también en la simulación única, permitiendo regresar en cualquier momento a los cálculos anteriores: ver todas las estadísticas, los gráficos de balance, equidad y carga del depósito. Asimismo, esto permitirá en el futuro comparar los resultados de las simulaciones entre sí.

    Para descargar los anteriores resultados de simulación, use la nueva página de inicio del simulador: pulse "Resultados anteriores" y seleccione el archivo necesario:




  5. Aumentada significativamente la velocidad de la simulación y la optimización, incluyendo el uso de la red de cálculos en la nube MQL5 Cloud Network.
  6. Corregidos los errores y optimizado el trabajo con frames.

MetaEditor

  1. Añadida la posibilidad de ajustar el diseñador de código.

    MetaEditor dispone de un diseñador de código que permite dar formato automáticamente al código fuente de un programa, de acuerdo con unos estándares determinados. Ahora, además del estilo de formato habitual, usted podrá también usar otros estándares populares. Para ello, abra los ajustes del MetaEditor y seleccione el estilo necesario:




    Aparte de ello, ahora es posible establecer los siguientes parámetros para el diseñador:

    Espacios para el sangrado
    Determina el número de espacios insertados al alinear las construcciones incorporadas:
    if(condition)
      {
       //---
      }

    Reemplazar la tabulación por espacios
    Al activar esta opción, el diseñador sustituirá todos los símbolos de tabulación en el código por símbolos de espacio. El número de símbolos de tabulación se determina en el apartado "General".

    Eliminar líneas vacías
    Al activar esta opción, el diseñador eliminará del código todas las líneas en las que haya un solo símbolo de salto de línea.

    Insertar espacios después de comas y puntos y coma
    Al activar esta opción, el diseñador separará visualmente las construcciones con enumeraciones de elementos. Por ejemplo:
    // antes de la estilización
    ParameterGetRange("InpX",enable,x_cur,x_start,x_step,x_stop);
    // después de la estilización
    ParameterGetRange("InpX", enable, x_cur, x_start, x_step, x_stop);

    Insertar espacios alrededor de los operadores de declaración
    Al activar esta opción, el diseñador insertará espacios alrededor de los operadores de asignación, equidad, comparación, etcétera. Por ejemplo:
    // antes de la estilización
    if(x==1&y!=2)
      {
       int a=0;
      }
    // después de la estilización
    if(x == 1 & y != 2)
     {
      int a = 0;
     }

  2. En el menú contextual de las pestañas de los archivos se ha añadido el comando "Mostrar en el navegador". Este permite encontrar rápidamente el archivo abierto para la edición en la estructura de carpetas del editor.




  3. Corregida la representación de la palabra clave "union" en las descripciones emergentes.

Añadida la traducción de la interfaz de usuario a 18 nuevos idiomas:

  • Región europea: sueco, lituano, danés, letón, estonio, serbio, esloveno, eslovaco, finés y georgiano
  • Región asiática: javanés, marathi, bengalí, panyabí, tamil y telugu
  • Región africana: suajili y hausa

En total, la interfaz de la plataforma está ahora traducida a 50 idiomas que, en suma, constituyen la lengua nativa para más de 4 mil millones de personas.

Para poner la interfaz en su idioma, use el menú "Ver \ Idioma" en la parte superior del terminal.

Documentación actualizada.

Correcciones de crash logs.

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

12 junio 2019
MetaTrader 5 build 2085: Integración con Python y mejoras masivas en el simulador de estrategias

Terminal

  1. Añadida API para solicitar los datos desde el terminal MetaTrader 5 a través de aplicaciones que usen el lenguaje Python.

    Python es un moderno lenguaje de programación de alto nivel para el desarrollo de escenarios y aplicaciones. Contiene multitud de bibliotecas para el aprendizaje de máquinas, la automatización de procesos, el análisis y la visualización de datos.

    El paquete MetaTrader para Python ha sido pensado para obtener de forma rápida y sencilla información bursátil a través de la interacción entre procesadores directamente desde el terminal MetaTrader 5. Los datos obtenidos de esta forma se pueden usar en lo sucesivo tanto para realizar cálculos estadísticos, como en el aprendizaje de máquinas.



    Conexión

    1. Descargue la última versión de Python de la página https://www.python.org/downloads/windows
    2. Al instalar Python, marque la casilla de verificación "Add Python X.X to PATH%", para que sea posible iniciar scripts en Python desde la línea de comandos.
    3. Instale el módulo MetaTrader5 desde la línea de comandos
      pip install MetaTrader5
    4. Añada los paquetes matplotlib y pytz
      pip install matplotlib
      pip install pytz

    Funciones

    • MT5Initialize — establece una conexión con el terminal MetaTrader 5
    • MT5Shutdown — cierra una conexión anteriormente establecida con el terminal MetaTrader 5
    • MT5TerminalInfo — obtiene el estado y los parámetros del terminal MetaTrader 5 conectado
    • MT5Version — retorna la versión del terminal MetaTrader 5
    • MT5WaitForTerminal — espera a que el terminal MetaTrader 5 se conecte al servidor comercial
    • MT5CopyRatesFrom — obtiene las barras del terminal MetaTrader 5, a partir de la fecha indicada
    • MT5CopyRatesFromPos — obtiene las barras del terminal MetaTrader 5, a partir del índice establecido
    • MT5CopyRatesRange — obtiene las barras en el intervalo de fechas indicado del terminal MetaTrader 5
    • MT5CopyTicksFrom — obtiene los ticks del terminal MetaTrader 5, a partir de la fecha indicada
    • MT5CopyTicksRange — obtiene los ticks en el intervalo de fechas indicado del terminal MetaTrader 5


  2. Optimizados los apartados "Mercado" y "Señales". Ahora, los escaparates de los productos y señales funcionan hasta siete veces más rápido, haciendo más cómodo el trabajo con los servicios comerciales integrados.




  3. Añadido el soporte del "Mercado", las "Señales" y la "Búsqueda" en Wine. Ahora, los usarios de Linux y Mac OS tendrán acceso a la mayor tienda de aplicaciones comerciales y el servicio de copiado automático de señales.




  4. El sistema de aprendizaje incorporado ha sido traducido a más 30 idiomas, incluyendo el español, el chino, el portugués y el alemán. Para visualizar los consejos interactivos en otro idioma, basta con cambiar el idioma de la interfaz en el menú "Ver".




  5. Añadida la posibilidad de confirmar los teléfonos y el email indicados al abrir cuentas demo o preliminares.

    El bróker determina la necesidad de verificar los datos. Si está activada, al solicitar una cuenta, el tráder recibirá automáticamente los códigos de confirmación, mientras que la ventana de diálogo aparecerán campos especiales para indicar estos:




    Los códigos de confirmación tienen una validez de varios minutos. Si el tráder no los usa para abrir una cuenta durante el tiempo requerido, se verá obligado a repetir el proceso.

    Antes de enviar los códigos, el sistema comprueba si el teléfono/email indicado ha sido confirmado anteriormente. Si el tráder no ha superado la verificación de estos datos desde su computadora, la apertura de las cuentas tendrá lugar como antes, sin confirmación adicional. De esta forma, los tráders no se encontrarán con excesivas dificultades al solicitar cuentas.

  6. Ampliadas las posibilidades de pago de los servicios de MQL5.community a través del sistema PayPal. Ahora, el sistema permite realizar compras en un clic.

    Cómo funciona
    Durante el proceso de compra, después de autorizarse en su cuenta en PayPal, se le ofrecerá permitir en lo sucesivo los pagos a nuestra compañía:





    Si el usuario está de acuerdo, todas las compras posteriores se podrán realizar en un solo clic, con solo pulsar el botón de la cuenta guardada anteriormente:




    Si usted pulsa "Cancelar y regresar a MetaQuotes Software Corp.", usted continuará realizando los pagos como antes, autorizándose en PayPal manualmente en cada compra.
    El sitio MQL5.com/la plataforma MetaTrader 5 no guarda sus datos de pago. La comprobación de los datos en caso de ingreso de fondos, compras en el Mercado o suscripciones a una Señal la realiza en su lado el sistema de pago.
    Usted siempre puede negarse a vincular su cuenta de PayPal, comprando los servicios del modo habitual.

  7. Mejoras masivas y optimización del funcionamiento del simulador de estrategias.

    Hemos realizado una enorme trabajo en la optimización interna del simulador de estrategias y la corrección de errores. Todo ello ha acelerado significativamente la simulación en una serie de tareas, aumentando asimismo la estabilidad general del funcionamiento. Las mejoras más significativas son:

    El trabajo con frames
    Se ha optimizado significativamente el trabajo con frames en los agentes locales, de red y en la nube. Ahora, estos se procesan a una mayor velocidad, y nunca se omiten.

    Distribución de tareas entre los agentes
    Ahora, al ejecutar la optimización, el simulador de estrategias puede redistribuir las tareas sobre la marcha. Si un nuevo agente está disponible (o uno de los utilizados anteriormente ha quedado libre), el simulador forma automáticamente un paquete de datos de aquellos que ya habían sido distribuidos entre otros agentes. De forma análoga, las tareas se redistribuyen al detectarse que ciertos agentes trabajan demasiado lento: sus tareas se asignan paralelamente a otros agentes, para finalizar la optimización más rápido.

    Asimismo, se ha acelerado significativamente la distribución de tareas en el modo de cálculos matemáticos.

    Estadísticas de optimización en el diario
    Se ha ampliado el registro del proceso de optimización en el diario: ahora se muestra una estadística de uso más detallada de MQL5 Cloud Network, el evento activación/desactivación de agentes en la nube, etc.

    Trabajo en el modo de registro de optimización completo
    Para ahorrar recursos durante la optimización, en el diario del simulador de estrategias no se muestran todos los mensajes de los agentes. Para mostrarlos forzosamente, se ha pensado el modo "Diarios de optimización completos", que se activa a través del menú contextual del diario del simulador. Antes, la activación de este modo ralentizaba sustancialmente el proceso de optimización, ahora prácticamente no influye en el tiempo de los cálculos,.

    MQL5 Cloud Network
    Optimizado el funcionamiento de los agentes de simulación en la nube. Ahora, las tareas se distribuyen de forma más efectiva.

  8. El calendario económico incluye más de 900 indicadores de las 18 mayores economías del mundo: los Estados Unidos, la Unión Europea, Japón, Gran Bretaña, etcétera. Los datos se recopilan en tiempo real a partir de fuentes públicas, permitiendo al usuario reaccionar a tiempo a la situación mundial y tomar decisiones comerciales equilibradas.

    El calendario económico está disponible no solo en los terminales y los sitios web, sino también en los dispositivos móviles. Ahora podrá pasar a la aplicación necesaria directamente desde el menú contextual del calendario en el terminal:




    Elija su plataforma y descargue la aplicación Tradays:


    En adición a todas las funciones del calendario de la plataforma de escritorio, en la versión móvil están disponibles la posibilidad de crear recordatorios sobre eventos, así como la historia completa de los indicadores en forma de gráficos y recuadros.

  9. Añadida la formación automática de la historia de barras de un instrumento personalizado al importar la historia de ticks. Ahora, al cambiar los datos de ticks de un instrumento personalizado, las barras correspondientes se recalculan automáticamente:

    • Esto permite evitar divergencias en los datos.
    • Después de importar los datos de ticks (si están lo suficientemente completos), podremos no gastar tiempo en la importación de barras, el terminal las calculará él mismo.

    Los cambios conciernen tanto a la improtación de ticks a través de la interfaz, como a la actualización de ticks a través de un programa MQL5 con la ayuda de la función CustomTicks*. Cualquier cambio de los datos de ticks conllevará el recálculo de las barras de minuto correspondientes del instrumento personalizado.

  10. Corregida la actualización de la información en la "Ventana de datos" al usar el cursor en cruz en un gráfico desprendido.
  11. Corregido el guardado de la historia de ticks. Antes, si se daban varios ticks en un milisegundo, el orden de guardado de los ticks podía sufrir incorrecciones.
  12. Corregida la construcción de gráficos cuando la historia de precios es demasiado corta (menos de un día).

MQL5

  1. Añadido el soporte de depuración de servicios MQL5. Ahora, usted podrá poner a prueba programas de forma análoga a asesores e indicadores.
  2. Añadidos nuevos tipos de cálculo del beneficio y el margen en la enumeración ENUM_SYMBOL_CALC_MODE:

    • SYMBOL_CALC_MODE_EXCH_BONDS — cálculo para las obligaciones bursátiles.
    • SYMBOL_CALC_MODE_EXCH_STOCKS_MOEX — cálculo para las acciones negociadas en la Bolsa de Moscú.
    • SYMBOL_CALC_MODE_EXCH_BONDS_MOEX — cálculo para las obligaciones negociadas en la Bolsa de Moscú.

  3. Añadida la función TesterDeposit, que permite emular operaciones de depósito de fondos en la cuenta durante la simulación. Puede resultar útil al poner a prueba diferentes sistemas de gestión de capital.
    bool  TesterDeposit(
       double money      // suma depositada
       );
  4. Ahora, durante la ejecución del método OnDeinit, el programa MQL5 no recibe ningún evento del terminal. Antes, los programas podían no tener tiempo de finalizar correctamente la desinicialización (por ejemplo, eliminar todos los objetos tras de sí), debido a que recibían otros eventos.
  5. Corregidos los errores surgidos al cambiar la historia de ticks del día actual de los instrumentos comerciales personalizados.
  6. Corregido el error que provocaba la ralentización del funcionamiento de los programas al usar un gran número (decenas de miles) de objetos gráficos.
  7. Corregido el bloqueo del terminal al realizar solicitudes frecuentes a la historia de ticks desde programas MQL5.
  8. Corregido el error en el funcionamiento de la función iBarShift. Con la bandera "exact=false" y una solicitud fuera de los datos, se retornaba el número de la barra más antigua, y no el de la más nueva.

Tester

  1. Corregida la definición del número de núcleos en las computadoras con procesadores que disponen de varios núcleos NUMA.
  2. Añadida la posibilidad de iniciar la simulación y la optimización con un depósito inicial de cero, puesto que ahora usted puede emular el depósito de fondos durante la simulación con la ayuda de la nueva función TesterDeposit.

MetaEditor

  1. Ahora, es posible añadir el comando de estilización de código al panel de herramientas de acceso rápido.
  2. Corregida la conmutación a la definición y la muestra de información sobre los parámetros al usar símbolos no pertenecientes a Unicode como nombre de las funciones y variables.

Documentación actualizada.

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

21 febrero 2019
MetaTrader 5 build 2005: Calendario económico, programas MQL5 como servicios y API para el lenguaje R

Terminal

  1. El calendario económico incorporado ha sido completamente actualizado.

    El calendario económico es un desarrollo propio. En él encontrará más de 600 índices e indicadores de las mayores economías del mundo: Estados Unidos, la Unión Europea, Japón, Reino Unido, Canadá, Australia, China, etc. Los datos se recopilan en tiempo real a partir de fuentes públicas.

    Aparte de las actualizaciones del contenido, en el calendario ahora tendrá a su disposición diversos filtros de eventos ampliados: por tiempo, prioridad, divisas y países.

    Asimismo, los datos del calendario pueden ser solicitados desde los programas MQL5. Podrá encontrar información detallada sobre ello más abajo.




  2. Añadido un nuevo tipo de programas MQL5: los Servicios. Estos programas permiten crear nuestros propias fuentes de datos de precios para el terminal y transmitir los precios de sistemas externos en tiempo real igual que los servidores comerciales de los brókeres.

    A diferencia de los asesores, indicadores y scripts, los servicios no están vinculados a un gráfico concreto. Los servicios funcionan en segundo plano, y comienzan a funcionar automáticamente al iniciarse el terminal (si no han sido detenidos forzosamente).

    Para gestionar los servicios, se ha añadido al Navegador una subsección aparte:





    Creación de servicios
    Para crear la plantilla de un servicio, use el punto correspondiente del Wizard MQL5. Los servicios tienen un punto de entrada OnStart, de forma análoga a los scripts. En él usted podrá organizar un ciclo constante de obtención y procesamiento de datos con la ayuda de las funciones de red.

    Inicio de servicios
    Para iniciar varias copias de un asesor o indicador con diferentes parámetros, basta con superponerlo a diferentes gráficos. En este caso, además, se crearán varios ejemplares del programa, que funcionarán independientemente unos de otros. Los servicios no están vinculadas a los gráficos, por eso se ha previsto un mecanismo aparte para crear sus ejemplares.

    Elija un servicio en el navegador y pulse "Añadir servicio" en el menú contextual del mismo. Se abrirá una ventana de diálogo estándar del programa MQL5, donde usted podrá permitir/prohibir el comercio y el acceso a las señales, así como establecer los parámetros necesarios.




    Para iniciar e instalar un ejemplar del servicio, utilice el menú del mismo. Para gestionar todos los ejemplares, utilice el menú del propio servicio.

  3. Añadido sistema de aprendizaje.

    Ahora, los principiantes podrán aprender fácilemnete a trabajar con la plataforma. Hemos añadido más de 100 consejos interactivos sobre sus funciones principales.

    • Los consejos no le distrairán del trabajo de la plataforma, ya que han sido cuidadosamente incorporados en el panel de herramientas en forma de barra de progreso.
    • Los consejos se muestran solo para las acciones que usted no ha ejecutado en la plataforma.
    • En los consejos se incorporan enlaces interactivos para entrar en diferentes elementos de la interfaz de la plataforma. Por ejemplo, desde un consejo es posible abrir directamente una ventana de diálogo o un menú con el comando necesario.

    A medida que transcurra el aprendizaje y se ejecuten acciones en la plataforma, la barra de progreso se irá llenando.




  4. La historia de la cuenta comercial puede mostrarse como posiciones: la plataforma reúne los datos de las trasacciones relacionadas con la posición (apertura, incremento, cierre parcial y total), y agrupa estos datos en una entrada única. Esto le permitirá mirar con facilidad la hora de apertura y cierre de la posición, su volumen, el precio y el resultado total. Ahora esta representación también está disponible en los informes de la historia exportados a los archivos.




  5. Añadida una API para solicitar datos del terminal MetaTrader 5 a través de aplicaciones que usan el lenguaje R.

    Para el trabajo, hemos preparado un paquete MetaTrader especial. En este hay una DLL para la interacción entre R y el terminal MetaTrader 5, así como documentación y archivos r auxiliares. En este momento, el paquete se encuentra en proceso de registro en el repositorio CRAN, y en breve estará disponible para la descarga y la instalación.




    Para instalar el paquete, use el siguiente comando:
    R CMD INSTALL --build MetaTrader

    Actualmente, para solicitar los datos, tiene a su disposición los siguientes comandos:

    • MT5Initialize — iniciar e instalar la conexión con el terminal MetaTrader 5. Al ejecutar el comando, el terminal se inicia en caso necesario.
    • MT5Shutdown — desinicializar e interrumpir la conexión con el terminal MetaTrader 5.
    • MT5Version — obtener la versión del terminal MetaTrader 5.
    • MT5TerminalInfo — obtener el estado y los parámetros de conexión del terminal con servidor del bróker (número de cuenta y dirección del servidor).
    • MT5WaitTerminal — esperar la conexión del terminal MetaTrader 5 con el servidor del bróker.
    • MT5CopyTicksFrom(symbol, from, count, flags) — copiar los ticks con la fecha indicada, en el número establecido. La fecha se indica en milisegundos desde 1970.01.01.
    • MT5CopyTicksRange(symbol, from, to, flags) — copiar los ticks del intervalo de fechas indicado. Las fechas se indican en milisegundos desde 1970.01.01.
    • MT5CopyRatesFrom(symbol, timeframe, from, count) — copiar las barras de minuto con la fecha indicada, en el número establecido. La fecha se indica en segundos desde 1970.01.01.
    • MT5CopyRatesFromPos(symbol, timeframe, start_pos, count) — copiar las barras de minuto con la posición indicada desde la última barra.
    • MT5CopyRatesFromRange(symbol, timeframe, date_from, date_to) — copiar las barras del intervalo de fechas indicado. Las fechas se indican en segundos desde 1970.01.01.

    En el futuro, se ampliará la lista de comandos soportados.

  6. Optimizada la ventana de diálogo de cierre de una posición comercial con otra opuesta. Ahora su funcionamiento no se ralentiza cuando existe un gran número de posiciones abiertas.
  7. Corregido el error de cálculo de los instrumentos sintéticos, que provocaba la formación de omisiones de datos.
  8. Ahora, al eliminar un instrumento personalizado, se eliminan los archivos de su historia de barras y de ticks. Esto permite evitar la acumulación de datos utilizados en el disco duro.
  9. Corregida la representación de los resultados de búsqueda en los monitores High DPI.

MQL5

  1. Añadido el acceso a los datos del calendario económico a través de los programas MQL5.

    Nuevas funciones

    CalendarCountryById — obtener la descripción de un país según el identificador.
    bool CalendarCountryById(
       const long           country_id,    // identificador del país
       MqlCalendarCountry&  country        // descripción del país
       );
    CalendarEventById — obtener la descripción de un evento según el identificador.
    bool CalendarEventById(
       const long           event_id,      // identificador del evento
       MqlCalendarEvent&    event          // descripción del evento
       );
    CalendarValueById — obtener la descripción de un valor según el identificador.
    bool CalendarValueById(
       const long           value_id,      // identificador del valor
       MqlCalendarValue&    value          // descripción del valor
       );
    CalendarEventByCountry — obtener la matriz de noticias disponibles del país.
    bool CalendarEventByCountry(
       string               country_code,  // código del país
       MqlCalendarEvent&    events[]       // matriz de eventos
       );
    CalendarEventByCurrency — obtener la matriz de noticias disponibles sobre la divisa en la que influyen.
    bool CalendarEventByCurrency(
       string               currency,      // divisa
       MqlCalendarEvent&    events[]       // matriz de eventos
       );
    CalendarValueHistoryByEvent — obtener la matriz de valores en el periodo indicado según el identificador de evento.
    bool CalendarValueHistoryByEvent(
       ulong                event_id,      // indicador de evento
       MqlCalendarValue&    values[],      // matriz de valores
       datetime             datetime_from, // fecha inicial
       datetime             datetime_to=0  // fecha final
       );
    CalendarValueHistory — obtener la matriz de valores de todos los eventos en el periodo indicado con filtrado según el país y/o divisa.
    bool CalendarValueHistory(
       MqlCalendarValue&    values[],          // matriz de valores
       datetime             datetime_from,     // comienzo del periodo
       datetime             datetime_to=0,     // final del periodo
       string               country_code=NULL, // código del país
       string               currency=NULL      // divisa
       );
    CalendarValueLastByEvent — obtener la matriz de los últimos valores de un evento según el identificador. Esta función permite solicitar solo aquellos valores que han cambiado desde el momento de la última solicitud. Para ello, se usa su parámetro in/out "change_id".

    Con cada cambio de la base de datos del calendario, se actualiza su propiedad "change_id", el identificador del último cambio. Al solicitar los datos, indique la "change_id" y el terminal le retornará los eventos que han aparecido en el calendario a partir de ese momento, así como el valor actual de "change_id", que se puede usar para la siguiente solicitud. En la primera llamada de la función, indique una "change_id" igual a cero, en este caso, la función no le retornará ningún evento, pero le transmitirá la "change_id" actual para solicitudes posteriores.
    bool CalendarValueHistory(
       ulong                event_id,          // identificador del evento
       ulong&               change_id,         // identificador del último cambio del calendario
       MqlCalendarValue&    values[]           // matriz de valores
       );
    CalendarValueLast — obtener la matriz de los últimos valores de todos los eventos con filtrado según el país y/o divisa. Esta función permite solicitar solo aquellos valores que han cambiado desde el momento de la última solicitud. De forma análoga a CalendarValueLastByEvent, para la solicitud se usa la propiedad "change_id".
    bool CalendarValueHistory(
       ulong                event_id,          // identificador del evento
       ulong&               change_id,         // identificador del último cambio del calendario
       MqlCalendarValue&    values[],          // matriz de valores
       string               country_code=NULL, // código del país
       string currency=NULL                    // divisa
       );

    Nuevas estructuras

    MqlCalendarCountry — descripción del país.
    struct MqlCalendarCountry
      {
       ulong             id;                        // identificador del país ISO 3166-1
       string            name;                      // nombre de texto del país
       string            code;                      // nombre en código del país ISO 3166-1 alpha-2
       string            currency;                  // código de la divisa del país
       string            currency_symbol;           // símbolo/señal de la divisa del país
       string            url_name;                  // nombre del país utilizado en la URL en el sitio web mql5.com
      };
    MqlCalendarEvent — descripción del evento.
    struct MqlCalendarEvent
      {
       ulong                          id;           // identificador del evento
       ENUM_CALENDAR_EVENT_TYPE       type;         // tipo del evento
       ENUM_CALENDAR_EVENT_SECTOR     sector;       // sector con el que se relaciona el evento
       ENUM_CALENDAR_EVENT_FREQUENCY  frequency;    // periodicidad de publicación del evento
       ENUM_CALENDAR_EVENT_TIMEMODE   time_mode;    // modo de publicación del evento por tiempo
       ulong                          country_id;   // indicador del país
       ENUM_CALENDAR_EVENT_UNIT       unit;         // unidad de medición del valor del evento
       ENUM_CALENDAR_EVENT_IMPORTANCE importance;   // importancia del evento
       ENUM_CALENDAR_EVENT_MULTIPLIER multiplier;   // multiplicador del valor del evento
       uint                           digits;       // número de decimales tras la coma en el valor del evento
       string                         source_url;   // URL de la fuente
       string                         event_code;   // código del evento
       string                         name;         // nombre de texto del evento en el lenguaje del terminal
      };
    MqlCalendarValue — descripción del valor del evento.
    struct MqlCalendarValue
      {
       ulong             id;                        // identificador del valor
       ulong             event_id;                  // identificador del evento
       datetime          time;                      // hora y fecha del evento
       datetime          period;                    // periodo de informe del evento
       int               revision;                  // revisión del indicador publicado con respecto al periodo de informe
       long              actual_value;              // valor actual del evento
       long              prev_value;                // valor anterior del evento
       long              revised_prev_value;        // valor anterior revisado del evento
       long              forecast_value;            // valor pronosticado del evento
       ENUM_CALENDAR_EVENT_IMPACRT impact_type;     // influencia potencial en el curso de la divisa
      };

    Nuevas enumeraciones

    enum ENUM_CALENDAR_EVENT_FREQUENCY
      {
       CALENDAR_FREQUENCY_NONE            =0,   // no se usa
       CALENDAR_FREQUENCY_WEEK            =1,   // semana
       CALENDAR_FREQUENCY_MONTH           =2,   // mes
       CALENDAR_FREQUENCY_QUARTER         =3,   // trimestre
       CALENDAR_FREQUENCY_YEAR            =4,   // año
       CALENDAR_FREQUENCY_DAY             =5,   // día
      };
    
    enum ENUM_CALENDAR_EVENT_TYPE
      {
       CALENDAR_TYPE_EVENT                =0,   // evento(reunión, discurso, etc.)
       CALENDAR_TYPE_INDICATOR            =1,   // indicador
       CALENDAR_TYPE_HOLIDAY              =2,   // fiesta
      };
    
    enum ENUM_CALENDAR_EVENT_SECTOR
      {
       CALENDAR_SECTOR_NONE               =0,   // no
       CALENDAR_SECTOR_MARKET             =1,   // mercado
       CALENDAR_SECTOR_GDP                =2,   // PIB
       CALENDAR_SECTOR_JOBS               =3,   // trabajo
       CALENDAR_SECTOR_PRICES             =4,   // precios
       CALENDAR_SECTOR_MONEY              =5,   // dinero
       CALENDAR_SECTOR_TRADE              =6,   // comercio
       CALENDAR_SECTOR_GOVERNMENT         =7,   // gobierno
       CALENDAR_SECTOR_BUSINESS           =8,   // negocios
       CALENDAR_SECTOR_CONSUMER           =9,   // consumidor
       CALENDAR_SECTOR_HOUSING            =10,  // vivienda
       CALENDAR_SECTOR_TAXES              =11,  // impuestos
       CALENDAR_SECTOR_HOLIDAYS           =12,  // fiestas
      };
      
    enum ENUM_CALENDAR_EVENT_IMPORTANCE
      {
       CALENDAR_IMPORTANCE_NONE           =0,   // no
       CALENDAR_IMPORTANCE_LOW            =1,   // baja
       CALENDAR_IMPORTANCE_MODERATE       =2,   // media
       CALENDAR_IMPORTANCE_HIGH           =3,   // alta
      };
    
    enum ENUM_CALENDAR_EVENT_UNIT
      {
       CALENDAR_UNIT_NONE                 =0,   // no
       CALENDAR_UNIT_PERCENT              =1,   // porcentajes
       CALENDAR_UNIT_CURRENCY             =2,   // divisa nacional
       CALENDAR_UNIT_HOUR                 =3,   // número de horas
       CALENDAR_UNIT_JOB                  =4,   // número de puestos laborales
       CALENDAR_UNIT_RIG                  =5,   // número de plataformas petroleras
       CALENDAR_UNIT_USD                  =6,   // dólares USA
       CALENDAR_UNIT_PEOPLE               =7,   // número de personas
       CALENDAR_UNIT_MORTGAGE             =8,   // número de créditos hipotecarios
       CALENDAR_UNIT_VOTE                 =9,   // número de votos
       CALENDAR_UNIT_BARREL               =10,  // número de barriles
       CALENDAR_UNIT_CUBICFEET            =11,  // volumen pies cúbicos
       CALENDAR_UNIT_POSITION             =12,  // número de puestos laborales
       CALENDAR_UNIT_BUILDING             =13   // número de construcciones
      };
      
    enum ENUM_CALENDAR_EVENT_MULTIPLIER
      {
       CALENDAR_MULTIPLIER_NONE           =0,   // no    
       CALENDAR_MULTIPLIER_THOUSANDS      =1,   // miles
       CALENDAR_MULTIPLIER_MILLIONS       =2,   // millones
       CALENDAR_MULTIPLIER_BILLIONS       =3,   // miles de millones
       CALENDAR_MULTIPLIER_TRILLIONS      =4,   // billones
      };
      
    enum ENUM_CALENDAR_EVENT_IMPACRT
      {
       CALENDAR_IMPACT_NA                 =0,   // desconocido
       CALENDAR_IMPACT_POSITIVE           =1,   // positivo
       CALENDAR_IMPACT_NEGATIVE           =2,   // negativo
      };
    
    enum ENUM_CALENDAR_EVENT_TIMEMODE
      {
       CALENDAR_TIMEMODE_DATETIME         =0,   // la fuente publica la hora exacta
       CALENDAR_TIMEMODE_DATE             =1,   // el evento ocupa el día completo
       CALENDAR_TIMEMODE_NOTIME           =2,   // la fuente no publica la hora del evento
       CALENDAR_TIMEMODE_TENTATIVE        =3,   // la fuente no publica la hora del evento de antemano, solo el día, la hora se concreta al darse el evento
      };

    Nuevos códigos de errores

    ERR_CALENDAR_MORE_DATA             =5400,   // la matriz es pequeña para el resultado completo (se han dado los valores que han cabido en la matriz)
    ERR_CALENDAR_TIMEOUT               =5401,   // se ha superado el límite de tiempo de espera para la solicitud de datos del calendario
    ERR_CALENDAR_NO_DATA               =5402,   // no se han detectado datos

  2. Corregido y acelerado significativamente el trabajo con las historias de ticks y de barras.obtener la matriz de noticias disponibles sobre la divisa en la que influyen
  3. Corregidas y significativamente aceleradas las funciones de cambio de la historia de ticks y de barras en los instrumentos comerciales personalizados CustomTicks* y CustomRates*.
  4. Añadidas nuevas funciones de conversión de datos.

    CharArrayToStruct - Copia una matriz de tipo uchar en una estructura POD.
    bool  CharArrayToStruct(
       void&         struct_object,    // estructura
       const uchar&  char_array[],     // matriz
       uint          start_pos=0       // posición inicial en la matriz
       );
    StructToCharArray - Copia una estructura POD en una matriz de tipo uchar.
    bool  StructToCharArray(
       const void&  struct_object,     // estructura
       uchar&       char_array[],      // matriz
       uint         start_pos=0        // posición inicial en la matriz
       );

  5. Añadida la función MathSwap para cambiar el orden del byte en los valores ushort, uint y ulong.
    ushort MathSwap(ushort value);
    uint   MathSwap(uint   value);
    ulong  MathSwap(ulong  value);

  6. Añadidas funciones de red para crear conexiones TCP con hostings remotos a través de sockets de sistema:

    • SocketCreate — crea un socket con las banderas indicadas y retorna su manejador
    • SocketClose — cierre el socket
    • SocketConnect — ejecuta la conexión al servidor, con control de límite de tiempo
    • SocketIsConnected — comprueba si está conectado el socket en el momento actual
    • SocketIsReadable — obtiene el número de bytes que se pueden leer desde el socket
    • SocketIsWritable — comprueba si es posible registrar datos en el socket en el momento actual
    • SocketTimeouts — establece el límite de tiempo para obtener y enviar los datos para el objeto de sistema del socket
    • SocketRead — lee los datos desde el socket
    • SocketSend — registra los datos en el socket
    • SocketTlsHandshake — inicia una conexión TLS (SSL) protegida con el host indicado según el protocolo TLS Handshake
    • SocketTlsCertificate — obtiene los datos sobre el certificado usado para proteger la conexión de red
    • SocketTlsRead — lee los datos de una conexión TLS protegida
    • SocketTlsReadAvailable — lee todos los datos disponibles de una conexión TLS protegida
    • SocketTlsSend — envía los datos a través de una conexión TLS protegida

    La dirección del host al que se realiza la conexión con la ayuda de funciones de red se deberá añadir explícitamente a la lista de permitidas en los ajustes del terminal.

    Para trabajar con las funciones de red se han añadido nuevos códigos de errores:

    • ERR_NETSOCKET_INVALIDHANDLE (5270) — a la función se ha transmitido un puntero incorrecto del socket
    • ERR_NETSOCKET_TOO_MANY_OPENED (5271) — se han abierto demasiados sockets (128 como máximo)
    • ERR_NETSOCKET_CANNOT_CONNECT (5272) — error al conectar con el host remoto
    • ERR_NETSOCKET_IO_ERROR (5273) — error de envío/recepción de datos del socket
    • ERR_NETSOCKET_HANDSHAKE_FAILED (5274) — error al establecer una conexión protegida (TLS Handshake)
    • ERR_NETSOCKET_NO_CERTIFICATE (5275) — no hay datos sobre el certificado con el que se protege la conexión

  7. Añadidas nuevas funciones para trabajar con cadenas:

    StringReserve — reserva en la memoria para la cadena un búfer del tamaño indicado.
    bool  StringReserve(
       string&        string_var,          // cadena
       uint           new_capacity         // tamaño del búfer para guardar la cadena
       );
    StringSetLength — establece para una cadena la longitud indicada en símbolos.
    bool  StringSetLength(
       string&        string_var,          // cadena
       uint           new_length           // nueva longitud de la cadena
       );

  8. Añadidas nuevas funciones para trabajar con matrices:

    ArrayRemove — Elimina de la matriz el número indicado de elementos, comenzando por el índice indicado.
    bool  ArrayRemove(
       void&         array[],              // matriz de cualquier tipo
       uint          start,                // desde qué índice comenzamos a eliminar
       uint          count=WHOLE_ARRAY     // número de elementos
       );
    ArrayInsert — Inserta en la matriz-receptor el número indicado de elementos, comenzando por el índice establecido.
    bool  ArrayInsert(
       void&         dst_array[],          // matriz-receptor
       const void&   src_array[],          // matriz-fuente
       uint          dst_start,            // índice en la matriz-receptor para la inserción
       uint          src_start=0,          // índice en la matriz-fuente para el copiado
       uint          count=WHOLE_ARRAY     // número de elementos insertados
       );
    ArrayReverse — Invierte en la matriz el número indicado de elementos, comenzando por el índice indicado.
    bool  ArrayReverse(
       void&         array[],              // matriz de cualquier tipo
       uint          start=0,              // desde qué índice comenzamos a invertir la matriz
       uint          count=WHOLE_ARRAY     // número de elementos
       );

  9. A las funciones CustomRatesUpdate, CustomRatesReplace, CustomTicksAdd y CustomTicksReplace se añade el parámetro "uint count" para indicar el número de elementos de la matriz transmitida que serán utilizados. Por defecto, para el parámetro se usa el valor WHOLE_ARRAY. Eso significa que se utilizará toda la matriz.
  10. Añadida la función CustomBookAdd — transmite el estado de la profundidad de mercado del instrumento personalizado. La función permite retransmitir la profundidad de mercado como si llegase desde el servidor del bróker.
    int  CustomBookAdd(
       const string        symbol,            // nombre del símbolo
       const MqlBookInfo&  books[]            // matriz con las descripciones de los elementos de la profundidad de mercado
       uint                count=WHOLE_ARRAY  // número de elementos que se usarán
       );
  11. Añadida la sobrecarga de la función CustomSymbolCreate, que permite crear un instrumento comercial personalizado basado en uno ya existente. Después de crearlo, cualquier propiedad del símbolo se puede cambiar por el valor necesario con las funciones correspondientes.
    bool  CustomSymbolCreate(
       const string        symbol_name,       // nombre del símbolo personalizado
       const string        symbol_path="",    // nombre del grupo en el que se creará el símbolo
       const string        symbol_origin=NULL // nombre del símbolo sobre cuya base se creará el símbolo personalizado
       );
    Nombre del símbolo desde el que se copiarán las propiedades del símbolo personalizado creado, se indica en el parámetro "symbol_origin".

  12. Actualizada la función StringToTime, que convierte una cadena con una fecha/hora en un valor del tipo datetime. Ahora da soporte a los siguientes formatos de fecha:

    • yyyy.mm.dd [hh:mi]
    • yyyy.mm.dd [hh:mi:ss]
    • yyyymmdd [hh:mi:ss]
    • yyyymmdd [hhmiss]
    • yyyy/mm/dd [hh:mi:ss]
    • yyyy-mm-dd [hh:mi:ss]

  13. Añadida a la enumeración ENUM_TERMINAL_INFO_INTEGER la propiedad TERMINAL_VPS, señal de que el terminal ha sido iniciado en el servidor virtual MetaTrader Virtual Hosting (MetaTrader VPS). Si el programa está iniciado en el hosting, usted podrá desactivar todas sus funciones visuales, puesto que en el servidor virtual no hay interfaz gráfica de usuario.
  14. Añadida a la enumeración ENUM_SYMBOL_INFO_INTEGER la nueva propiedad SYMBOL_EXIST — señal de que existe un símbolo con ese nombre.
  15. Corregida la tipificación al usar la declaración preliminar de una función de plantilla.
  16. Añadida la reinicialización de los indicadores al cambiar la cuenta comercial.
  17. Optimizado el funcionamiento de la función StringSplit.
  18. Corregidos errores en la biblioteca estándar.

Tester

  1. Añadida la función TesterStop, la finalización anticipada estándar del asesor en un agente de simulación. Ahora usted puede interrumpir forzosamente la simulación al alcanzar el número establecido de reducción o de acuerdo con cualquier otro criterio.

    La simulación realizada con la ayuda de esta función, se considera exitosa. Después de llamarla, al terminal se le transmite la historia comercial obtenida como resultado de la simulación, así como todas las estadísticas comerciales.

  2. Desactivada la posibilidad de simular y optimizar expertos a través de MQL5 Cloud Network en el modo de uso de ticks reales. Este modo se puede usar solo en agentes locales y farms en la red local.
  3. Mejorado el trabajo con los indicadores en el modo visual. Ahora el gráfico de precio y las líneas del indicador se dibujan sincrónicamente incluso con la máxima velocidad de visualización.
  4. Optimizadas y aceleradas significativamente la simulación y optimización.
  5. Corregida la depuración de los indicadores con los datos históricos. Ahora las funciones OnInit y OnDeinit de los indicadores se puede depurar correctamente.
  6. Acelerado el acceso a los datos históricos al simular expertos multidivisa.
  7. Corregidos los errores que provocaban el congelamiento del simulador visual al depurar con datos históricos.
  8. Acelerado el inicio de las pasadas de optimización al procesar con un agente un paquete de tareas.
  9. Modificada la política de distribución de paquetes a los agentes de simulación. El tamaño del paquete ha sido aumentado, lo que ha provocado una reducción significativa de los gastos en operaciones de red.
  10. Modificado el comportamiento de la opción de uso de agentes locales, de red y en la nube. Ahora, al desactivar estas opciones, las tareas distribuidas se ejecutan hasta el final, mientras que las nuevas se dejan de distribuir. Anteriormente, estas opciones funcionaban de forma análoga al comando "Desactivar", que interrumpía de inmediato el funcionamiento de los agentes.




MetaEditor

  1. Añadido el soporte para símbolos no-ANSI en el depurador. Ahora, las expresiones observadas se procesan correctamente, incluso si el nombre de la variable se indica en cirílico.
  2. Corregida la representación de los resultados de búsqueda en los monitores High DPI.

Añadida la traducción de la interfaz al croata.

Documentación actualizada.

26 octubre 2018
MetaTrader 5 build 1930: Ventana de gráficos flotante y bibliotecas .Net en MQL5

Terminal

  1. Ahora el usuario podrá sacar los gráficos de los instrumentos financieros de los límites de la ventana del terminal comercial.

    Esto resulta muy cómodo al trabajar con varios monitores. Por ejemplo, podemos ubicar en uno de ellos la ventana principal de la plataforma y monitorear el estado de la cuenta, mientras que en otro hacemos un seguimiento de los gráficos para la valorar la situación del mercado. Para separar un gráfico del terminal, desactive la función "Fijado" en su menú contextual. A continuación, coloque el gráfico en el monitor deseado.





    Para que no tener que alternar entre monitores para aplicar los objetos analíticos o indicadores, los gráficos separados disponen de su propio panel de instrumentos. Para cambiar el conjunto de comandos u ocultar el panel de instrumentos, utilice su menú contextual.

  2. Chats incorporados completamente actualizados. Ahora dan soporte a ventanas de diálogo y canales grupales. Usted podrá conversar en privado con un cierto grupo de gente en un único espacio, sin tener que alternar entre diferentes ventanas de diálogo; asimismo, podrá crear canales temáticos a su gusto, en el idioma que desee. Comuníquese con colegas y amigos en MQL5.community sin visitar el sitio web.

    Cada chat grupal y canal puede ser público o privado. El propio autor decide si es posible unirse a él libremente o solo por invitación. Además, en los canales es posible designar un moderador para controlar la comunicación de manera adicional.




  3. Añadido el soporte de volúmenes de precisión aumentada para el comercio con criptomonedas. Ahora el volumen mínimo posible para las operaciones comerciales es 0.00000001 de lote. Se ha añadido a la profundidad de mercado, la banda de operaciones y otros elementos de la interfaz la posibilidad de representar los volúmenes con una precisión de 8 dígitos decimales.

    El volumen mínimo y su salto de cambio dependerán de los ajustes del instrumento financiero en el lado del bróker.




  4. Añadida a la ventana "Instrumentos" una pestaña con los artículos publicados en MQL5.community. Más de 600 materiales detallados sobre el desarrollo de estrategias comerciales en MQL5, ahora disponibles directamente en el terminal. Cada semana se publican nuevos artículos.




  5. Añadido el soporte de autorización ampliada con uso de certificados al trabajar con Wine.
  6. Corregida la representación de la profundidad de mercado al limitar su profundidad a un nivel.
  7. Añadido al panel de instrumentos "Estándar" el comando "Guardar como imagen". Ahora resulta aún más fácil hacer capturas de los gráficos y compartirlas en la comunidad.




  8. Corregido el uso del desplazamiento temporal al importar barras y ticks. Anteriormente, el desplazamiento no se aplicaba en ciertos casos.




  9. Corregido el bloqueo del terminal al surgir un gran número de noticias del calendario económico.

MQL5

  1. Añadido el soporte nativo de las bibliotecas .NET con importación "inteligente" de funciones. Ahora las bibliotecas .NET se pueden usar sin necesidad de escribir envoltorios especiales: el MetaEditor se encarga de ello.

    Para trabajar con las funciones de una biblioteca .NET, basta con importar la propia DLL sin indicar funciones concretas. El MetaEditor importará automáticamente todas las funciones con las que se pueda trabajar:
    • Las estructuras sencillas (POD, plain old data), son estructuras que contienen solo tipos sencillos de datos.
    • Las funciones estáticas públicas en cuyos parámetros se usan solo tipos sencillos y estructuras POD o sus matrices

    Para llamar las funciones de una biblioteca, solo tiene que importarlas:
    #import "TestLib.dll"
    
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       int x=41;
       TestClass::Inc(x);
       Print(x);
      }
    El código C# de la función Inc de la clase TestClass tiene el aspecto siguiente:
    public class TestClass
    {
       public static void Inc(ref int x)
       {
        x++;
       }
    }
    Como resultado de la ejecución, el script retornará el valor 42.

    Cotinúa el trabajo relacionado con el soporte de bibliotecas .NET: en futuras versiones está planeado ampliar las posibilidades de su uso.

  2. Añadido a la biblioteca estándar el soporte de trabajo con funciones WinAPI. Ahora, al usar las funciones del sistema operativo en un programa MQL, no hay necesidad de importar manualmente las bibliotecas y describir las signaturas de las funciones. Basta con incluir un archivo de encabezado del catálogo MQL5\Include\WinAPI.

    Las funciones WinAPI están agrupadas en archivos aparte según su propósito:

    • libloaderapi.mqh — trabajo con los recursos
    • memoryapi.mqh — trabajo con la memoria
    • processenv.mqh — trabajo con el entorno
    • processthreadsapi.mqh — trabajo con los procesos
    • securitybaseapi.mqh — trabajo con el sistema de seguridad del SO
    • sysinfoapi.mqh — obtener información del sistema
    • winbase.mqh — funciones comunes
    • windef.mqh — constantes, estructuras y enumeraciones
    • wingdi.mqh — trabajo con objetos gráficos
    • winnt.mqh — trabajo con excepciones
    • winreg.mqh — trabajo con el registro
    • winuser.mqh — gestión de ventanas e interfaz
    • errhandlingapi.mqh — procesamiento de errores
    • fileapi.mqh — trabajo con archivos
    • handleapi.mqh — trabajo con manejadores
    • winapi.mqh — inclusión de todas las funciones (archivos de encabezado WinAPI)

    El enlace funciona solo con la arquitectura de 64 bits.

  3. Añadido el soporte de los especificadores inline, __inline, __forceinline al realizar el análisis sintáctico del código. La presencia de estos especificadores en el código no provocará error, pero tampoco influirá en la compilación. En estos momentos, esto permite transferir con mayor facilidad el código С++ a MQL5.
    Podrá encontrar información más detallada sobre los especificadores en MSDN.

  4. Se ha realizado una optimización sustancial de los programas MQL5. En algunos casos, el incremento del rendimiento puede alcanzar el 10%. Para lograr un incremento de la velocidad, compile de nuevo sus programas en la nueva versión del MetaEditor.
    Por desgracia, la optimización adicional ha provocado la pérdida de la compatibilidad de los nuevos programas con las anteriores versiones del terminal. Todos los programas compilados en el MetaEditor de la versión 1910 y superiores no se iniciarán en los terminales de la versión 1880 e inferiores. En este caso, además, los programas compilados anteriormente en las anteriores versiones del MetaEditor funcionarán en los nuevos terminales.

  5. Se ha realizado un enorme trabajo de optimización de multitud de funciones MQL5.
  6. Añadidas nuevas propiedades para fijar/separar gráficos de la ventana principal del terminal y gestionar su posición.

    A la enumeración ENUM_CHART_PROPERTY_INTEGER se han añadido:

    • CHART_IS_DOCKED — ventana del gráfico fijada. Si establecemos el valor false, podremos arrastrar el gráfico fuera de los límites del terminal.
    • CHART_FLOAT_LEFT — coordenada izquierda del gráfico desprendido con respecto a la pantalla virtual.
    • CHART_FLOAT_TOP — coordenada superior del gráfico desprendido con respecto a la pantalla virtual.
    • CHART_FLOAT_RIGHT — coordenada derecha del gráfico desprendido con respecto a la pantalla virtual.
    • CHART_FLOAT_BOTTOM — coordenada inferior del gráfico desprendido con respecto a la pantalla virtual.

    A la enumeración ENUM_TERMINAL_INFO_INTEGER se han añadido:

    • TERMINAL_SCREEN_LEFT — coordenada izquierda de la pantalla virtual. La pantalla virtual es un rectángulo que abarca todo el monitor. Si en el sistema hay dos monitores y su orden se ha establecido de derecha a izquierda, la coordenada izquierda de la pantalla virtual puede encontrarse en el límite de los dos monitores.
    • TERMINAL_SCREEN_TOP — coordenada superior de la pantalla virtual.
    • TERMINAL_SCREEN_WIDTH — anchura del terminal.
    • TERMINAL_SCREEN_HEIGHT — altura del terminal.
    • TERMINAL_LEFT — coordenada izquierda del terminal con respecto a la pantalla virtual.
    • TERMINAL_TOP — coordenada superior del terminal con respecto a la pantalla virtual.
    • TERMINAL_RIGHT — coordenada derecha del terminal con respecto a la pantalla virtual.
    • TERMINAL_BOTTOM — coordenada inferior del terminal con respecto a la pantalla virtual.

  7. Añadido el campo volume_real a las estructuras MqlTick y MqlBookInfo. Dicho campo ha sido pensado para trabajar con el volumen de precisión aumentada. El valor "volume_real" tiene mayor prioridad, en comparación con "volume". El servidor usará precisamente este valor, si se ha indicado.

    struct MqlTick
      {
       datetime         time;          // Hora de la última actualización de precios
       double           bid;           // Precio Bid actual
       double           ask;           // Precio Ask actual
       double           last;          // Precio actual de la última transacción (Last)
       ulong            volume;        // Volumen para el precio Last actual
       long             time_msc;      // Hora de la última actualización de precios en milisegundos
       uint             flags;         // Banderas de los ticks
       double           volume_real;   // Volumen para el precio Last actual con precisión aumentada
      };

    struct MqlBookInfo
      {
       ENUM_BOOK_TYPE   type;            // tipo de solicitud de la enumeración ENUM_BOOK_TYPE
       double           price;           // precio
       long             volume;          // volumen
       double           volume_real;     // volumen con precisión aumentada
      };

  8. A la enumeración ENUM_SYMBOL_INFO_DOUBLE se han añadido nuevas propiedades:

    • SYMBOL_VOLUME_REAL — volumen de la última transacción ejecutada;
    • SYMBOL_VOLUMEHIGH_REAL — valor máximo del volumen de la transacción ejecutada en el día actual;
    • SYMBOL_VOLUMELOW_REAL — valor mínimo del volumen de la transacción ejecutada en el día actual.

    Para obtener estas propiedades, use la función SymbolInfoDouble.

  9. A la enumeración ENUM_MQL_INFO_INTEGER se le ha añadido la propiedad MQL_FORWARD, la bandera que indica que el programa se encuentra en el modo de simulación en tiempo real (forward-testing).
  10. Para las estructuras se ha añadido la propiedad pack( integer_value ). Dicha propiedad permite establecer la alineación de la ubicación de los campos dentro de la estructura; esto es necesario al trabajar con DLL. Para integer_value son posibles los valores 1, 2 ,4 ,8 y 16.
    Si no se ha definido la propiedad, se usará por defecto la alinieación de 1 byte — pack(1).

    Ejemplo de uso:
    //+------------------------------------------------------------------+
    //| Default packing                                                  |
    //+------------------------------------------------------------------+
    struct A
      {
       char              a;
       int               b;
      };
    //+------------------------------------------------------------------+
    //| Specified packing                                                |
    //+------------------------------------------------------------------+
    struct B pack(4)
      {
       char              a;
       int               b;
      };
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       Print("sizeof(A)=",sizeof(A));
       Print("sizeof(B)=",sizeof(B));
      }
    //+------------------------------------------------------------------+
    Conclusión:
    sizeof(A)=5
    sizeof(B)=8
    Podrá encontrar información más detallada sobre la alineación de estructuras en MSDN.

  11. Se han suavizado los requisitos de conversión de las enumeraciones. Al realizar una conversión implícita, el compilador sustituirá automáticamente el valor de la enumeración correcta y mostrará una advertencia.

    Para el código siguiente:
    enum Main
      {
       PRICE_CLOSE_,
       PRICE_OPEN_
      };
    
    input Main Inp=PRICE_CLOSE;
    //+------------------------------------------------------------------+
    //| Start function                                                   |
    //+------------------------------------------------------------------+
    void OnStart()
      {
      }
    El compilador mostrará la advertencia:
    implicit conversion from 'enum ENUM_APPLIED_PRICE' to 'enum Main'
    'Main::PRICE_OPEN_' instead of 'ENUM_APPLIED_PRICE::PRICE_CLOSE' will be used
    Anteriormente, en este caso se mostraba el error:
    'PRICE_CLOSE' - cannot convert enum
    El compilador seguirá mostrando el error, si las enumeraciones se usan incorrectamente en los parámetros de las funciones.

  12. Corregidos los errores de compilación de las funciones de plantilla. Ahora, al usar las funciones de plantilla sobrecargadas, se instalará solo la sobrecarga necesaria, y no todas las disponibles.
    class X {  };
    
    void f(int)  {  }
      
    template<typename T>
    void a(T*) { new T(2); }  // antes, en este lugar el compilador daba error
      
    template<typename T>
    void a()  { f(0); }
      
      
    void OnInit()  { a<X>(); }  

  13. Optimizados ciertos casos de acceso a la historia de ticks a través de la función CopyTicks*.
  14. Añadida la nueva función TesterStop, que permite finalizar de forma anticipada la simulación/pasada de optimización. Al llamarla, todas las estadísticas comerciales acumuladas y el resultado de OnTester son transmitidos al terminal de cliente de la misma forma que en la finalización rutinaria de la simulación/optimización.
  15. Añadida una nueva propiedad para los indicadores personalizados #property tester_everytick_calculate. Dicha propiedad se usa en el simulador de estrategias y permite activar forzosamente el cálculo de indicadores en cada tick.

Tester

  1. Ahora, al realizar la simulación/optimización no visual (estándar y personalizada), todos los indicadores utilizados se calculan solo al solicitarse los datos. La excepción serán aquellos indicadores que contengan llamadas a la función EventChartCustom y que usen el manejador OnTimer. Anteriormente, en el simulador de estrategias, al llegar cualquier tick (incluso de otro instrumento) todos los indicadores se calculaban incondicionalmente. Esta novedad permite aumentar significativamente la velocidad de la simulación y la optimización.

    Para activar forzosamente el cálculo de los indicadores en cada tick, añada al programa la propiedad #property tester_everytick_calculate.

    Los indicadores compilados con las anteriores versiones del compilador, se calcularán como antes, es decir, en cada tick.

  2. Corregido el registro de precisión de la divisa del depósito al simular/optimizar y formar los informes correspondientes.
  3. Optimizado y acelerado el funcionamiento del simulador de estrategias.
  4. Corregida una serie de errores de simulación y optimización.

MetaEditor

  1. Corregida la búsqueda de palabras completas. Ahora, al realizar la búsqueda, el subrayado se considera un carácter normal, y no un separador de palabras.

Documentación actualizada.

12345678910111213