¿Qué novedades tiene MetaTrader 5?

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

7 diciembre 2019
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.

6 julio 2018
MetaTrader 5 build 1880: cálculo del historial completo de instrumentos sintéticos

Terminal

  1. Ha sido añadido el cálculo del historial de precios de los instrumentos sintéticos para toda la profundidad de datos disponible.

    La plataforma calcula el historial de barras de minuto para los instrumentos sintéticos a base de las barras de minuto de los instrumentos que forman parte de su fórmula. Antes, el cálculo se realizaba por defecto sólo para dos últimos meses en el historial. El historial más profundo se completaba solamente en caso de la solicitud explícita (desplazamiento del gráfico a la izquierda o la llamada a las funciones Copy). Ahora el historial se calcula usando todos los datos de forma incondicional.




    El historial de precios de cada instrumento que forma parte de la fórmula puede tener una profundidad distinta. Debido a eso, el cálculo se realiza usando el período más corto. Por ejemplo, en la fórmula se usan tres símbolos:

    • EURUSD con el historial hasta 2009.01.01
    • USDJPY con el historial hasta 2012.06.01
    • EURJPY con el historial hasta 2014.06.01

    En este caso, el historial del instrumento sintético será calculado sólo a partir de 2014.06.01 hasta el momento actual. Además, de esta fecha serán quitados 100 minutos más con el fin de asegurar la integridad del cálculo (si en el historial falta una barra separada de un minuto, durante el cálculo se usará la barra del minuto anterior).

    En existencia de un historial profundo, el cálculo de un instrumento sintético puede durar bastante tiempo. Para que el usuario pueda ver el gráfico sin tener que esperar la conclusión de todos los cálculos, en primer lugar, se calcula el historial para dos últimos meses (igual como en las versiones anteriores). Sólo después de eso, comienza el cálculo del historial anterior.

MQL5

  1. Ha sido añadida la propiedad ACCOUNT_CURRENCY_DIGITS —número de dígitos tras la coma para la divisa del depósito de la cuenta. Para obtenerlo, utilice la función AccountInfoInteger. Esta propiedad puede ser usada durante el cálculo del beneficio independiente para la normalización de los valores obtenidos.
  2. Ha sido corregido el retardo de la ejecución de las funciones Copy y las funciones i durante el trabajo con el timeframe semanal.
  3. Han sido corregidos los errores en la función WebRequest.

Tester

  1. Ha sido añadida la posibilidad de una simulación singular del Asesor Experto después de cargar los resultados de la optimización desde el archivo cache.
  2. Ha sido acelerada la descarga inicial del historial por los agentes locales de la simulación.

Ha sido actualizada la documentación.

26 junio 2018
MetaTrader 5 build 1870: adición de símbolos a la Observación del Mercado según ISIN

Terminal

  1. En la ventana "Observación del Mercado" se ha añadido la búsqueda de instrumentos según el ISIN (International Securities Identification Numbering system). Ahora los instrumentos se pueden añadir de tres formas: según el nombre, la descripción o el ISIN.



  2. Corregida la ralentización del funcionamiento de la interfaz de usuario al cambiar la contraseña de la cuenta comercial.
  3. Corregido el error que provocaba en algunas situaciones una carga elevada sobre procesador por parte del terminal de cliente.

MQL5

  1. Corregida la transmisión de encabezados HTTP personalizados en la función WebRequest.
  2. Corregido el comportamiento de la función Bars al indicar fechas idénticas como comienzo y final del rango. Ahora, si hay una barra, retorna 1. Antes, en este caso, la función retornaba incondicionalmente 0.

Tester

  1. Corregido el inicio de la simulación individual en el modo visual después de la optimización en tiempo real.
  2. Corregida la clasificación de los resultados de optimización. Ahora se tienen en cuenta las pasadas con parámetros de entrada incorrectos (INIT_INCORRECT_PARAMETERS) y con un factor de beneficio inexistente.
  3. Corregido el cálculo del gráfico de optimización genética después de cambiar el criterio de optimización.

Actualización de la documentación.

15 junio 2018
MetaTrader 5 build 1860: funciones para el trabajo con barras en MQL5 y mejoras en el simulador de estrategias

Terminal

  1. Se ha modificado por completo la ventana de diálogo para la apertura de cuentas. Ahora el usuario elige en primer lugar el bróker que le interesa, y después el tipo de cuenta que desea abrir. Gracias a ello, la lista de brókeres es ahora más compacta, puesto que muestra solo los nombres de las compañías, y no todos los servidores disponibles.

    Asimismo, para facilitar la búsqueda, se han añadido a la lista los logotipos de las empresas. Si el bróker deseado no se encuentra en la lista, solo tendrá que teclear el nombre de la compañía o la dirección del servidor en la línea de búsqueda y pulsar "Encontrar su bróker".




    Para ayudar a los tráders principiantes, las descripciones de los tipos de cuenta han sido añadidas a la ventana de diálogo. Además, en relación con la actualización de la General Data Protection Regulation (GDPR), al abrir una cuenta, es posible que se muestren enlaces a los diferentes acuerdos y políticas de las compañías de corretaje:




    Se han ampliado significativamente las posibilidades de apertura de cuentas reales. La función de descarga de documentos para confirmar la identidad y la dirección, que se presentaba anteriormente en los terminales móviles, ahora está disponible en la versión de escritorio. Los brókeres regulados por MiFID ahora pueden solicitar todas la información necesaria para identificar a un cliente, incluyendo los datos sobre su ocupación, sus ingresos, su experiencia comercial, etc. Todo esto hará que sea más fácil y más rápido para usted conseguir cuentas reales, y también le evitará trámites burocráticos innecesarios.




  2. Se ha añadido a la historia de transacciones la representación de los valores de Stop Loss y Take profit. Para las transacciones de entrada y de viraje, estos se establecen de acuerdo con los valores de las órdenes Stop Loss y Take Profit, como resultado de las cuales se ejecutaron. Para las transacciones de salida, se usan los valores de Stop Loss y Take Profit de las posiciones relevantes al momento del cierre. Este último permite guardar y mostrar información sobre los valores de Stop Loss y Take Profit que tenía la posición en el momento de su cierre. Anteriormente, dicha información no se guardaba en ningún lugar, ya que la posición después del cierre desaparece, y el historial de posiciones en el terminal se basa en las transacciones.




  3. Se ha añadido a la historia de posiciones la representación de los valores de Stop Loss y Take profit. Se cubren de acuerdo con el valor de las transacciones de Stop Loss y Take Profit que abren y cierran las posiciones correspondientes.




  4. Ahora, al representar las órdenes pendientes en el gráfico, se usa el volumen actual de la orden, en lugar del inicialmente solicitado.




  5. Se ha optimizado y acelerado significativamente la representación de la profundidad de mercado en el modo ampliado con la muestra de spread activada.
  6. Optimizado el procesamiento de los resultados de ejecución de las solicitudes comerciales. En algunos casos, esto puede proporcionar una aceleración significativa del procesamiento.
  7. Corregido el error de funcionamiento del Trailing Stop, que en algunos casos causaba al envío de varias solicitudes de cambio de nivel de Stop Loss de una posición.
  8. Corregido el establecimiento del volumen mínimo y máximo, y también del salto de volumen en las propiedades de las herramientas personalizadas.
  9. Corregido el error que provocaba que la opción "fijar escala" no se tuviera en cuenta al aplicar la plantilla al gráfico de un instrumento comercial.
  10. Corregido el error que provocaba en algunos casos que la historia de ticks se acumulara incorrectamente.

MQL5

  1. Aumentada la velocidad de funcionamiento de los programas MQL5, gracias a la optimización adicional del código fuente al realizar la compilación. Para aumentar la velocidad de sus programas, compílelos otra vez en la nueva versión del MetaEditor.
    Por desgracia, la optimización adicional ha provocado la pérdida de compatibilidad de los nuevos programas con las versiones anteriores del terminal. Todos los programas compilados en el MetaEditor de versión 1860 o posteriores no se inciarán en los terminales con una versión por debajo de 1860. En este caso, además, los programas compilados antes en las versiones anteriores del MetaEditor, funcionarán en los nuevos terminales.

  2.  Añadidas las funciones iTime, iOpen, iHigh, iLow, iClose, iVolume, iBars, iBarShift, iLowest, iHighest, iRealVolume, iTickVolume, iSpread. Estas funciones son análogas a las utilizadas en MQL4. De esta forma, para los usuarios será más sencillo transferir el código de los programas comerciales a la plataforma de quinta generación.

    Anteriormente, la mayoría de las tareas resueltas por estas funciones se podía ejecutar fácilmente usando las funciones Copy*. Sin embargo, para buscar los valores máximos/mínimos en el gráfico y buscar las barras por tiempo, el usuario tenía que implementar sus propias funciones. Ahora es posible hacer esto con la ayuda de las funciones iHighest, iLowest e iBarShift.

    iTime
    Retorna el valor del tiempo de apertura de la barra (indicada por el parámetro shift) del gráfico correspondiente.
    datetime  iTime(
       string           symbol,          // símbolo
       ENUM_TIMEFRAMES  timeframe,       // periodo
       int              shift            // desplazamiento
       );

    iOpen
    Retorna el valor del precio de apertura de la barra (indicada por el parámetro shift) del gráfico correspondiente.
    double  iOpen(
       string           symbol,          // símbolo
       ENUM_TIMEFRAMES  timeframe,       // periodo
       int              shift            // desplazamiento
       );

    iHigh
    Retorna el valor del precio máximo de la barra (indicada por el parámetro shift) del gráfico correspondiente.
    double  iHigh(
       string           symbol,          // símbolo
       ENUM_TIMEFRAMES  timeframe,       // periodo
       int              shift            // desplazamiento
       );

    iLow
    Retorna el valor del precio mínimo de la barra (indicada por el parámetro shift) del gráfico correspondiente.
    double  iLow(
       string           symbol,          // símbolo
       ENUM_TIMEFRAMES  timeframe,       // periodo
       int              shift            // desplazamiento
       );

    iClose
    Retorna el valor del precio de cierre de la barra (indicada por el parámetro shift) del gráfico correspondiente.
    double  iClose(
       string           symbol,          // símbolo
       ENUM_TIMEFRAMES  timeframe,       // periodo
       int              shift            // desplazamiento
       );

    iVolume
    Retorna el valor del volumen de ticks de la barra (indicada por el parámetro shift) del gráfico correspondiente.
    long  iVolume(
       string           symbol,          // símbolo
       ENUM_TIMEFRAMES  timeframe,       // periodo
       int              shift            // desplazamiento
       );

    iBars
    Retorna el número de barras en la historia según el símbolo y el periodo correspondientes.
    int  iBars(
       string           symbol,          // símbolo
       ENUM_TIMEFRAMES  timeframe        // periodo
       );

    iBarShift
    Busca la barra según el tiempo. La función retorna el índice de la barra en el que entra el tiempo especificado.
    int  iBarShift(
       string           symbol,          // símbolo
       ENUM_TIMEFRAMES  timeframe,       // periodo
       datetime         time,            // hora y fecha
       bool             exact=false      // modo
       );

    iLowest
    Retorna el índice del menor valor encontrado (desplazamiento relativo a la barra actual) del gráfico correspondiente.
    int  iLowest(
       string           symbol,          // símbolo
       ENUM_TIMEFRAMES  timeframe,       // periodo
       int              type,            // identificador de la serie temporal
       int              count,           // número de elementos
       int              start            // índice
      );

    iHighest
    Retorna el índice del mayor valor encontrado (desplazamiento relativo a la barra actual) del gráfico correspondiente.
    int  iHighest(
       string           symbol,          // símbolo
       ENUM_TIMEFRAMES  timeframe,       // periodo
       int              type,            // identificador de la serie temporal
       int              count,           // número de elementos
       int              start            // índice
      );

    iRealVolume
    Retorna el valor del volumen real de la barra (indicada por el parámetro shift) del gráfico correspondiente.
    long  iRealVolume(
       string           symbol,          // símbolo
       ENUM_TIMEFRAMES  timeframe,       // periodo
       int              shift            // desplazamiento
       );

    iTickVolume
    Retorna el valor del volumen de ticks de la barra (indicada por el parámetro shift) del gráfico correspondiente.
    long  iTickVolume(
       string           symbol,          // símbolo
       ENUM_TIMEFRAMES  timeframe,       // periodo
       int              shift            // desplazamiento
       );

    iSpread
    Retorna el valor del spread de la barra (indicada por el parámetro shift) del gráfico correspondiente.
    long  iSpread(
       string           symbol,          // símbolo
       ENUM_TIMEFRAMES  timeframe,       // periodo
       int              shift            // desplazamiento
       );
  3. Añadida la función TesterHideIndicators. Esta indica el modo en que se muestran/ocultan los indicadores usados en el experto. La funcion se ha diseñado para gestionar la visibilidad de los indicadores utilizados solo en la simulación. Indique la bandera true si es necesario ocultar los indicadores creados, de lo contrario, indique false.
    void  TesterHideIndicators(
       bool      hide     // bandera
       );
  4. Añadida la generación del evento CHARTEVENT_CLICK al clicar con el ratón en los niveles comerciales del gráfico.
  5. Corregido y optimizado el funcionamiento de las funciones CopyTicks.
  6. Corregido el valor dado por la función SymbolInfoDouble para la propiedad SYMBOL_TRADE_LIQUIDITY_RATE.
  7. Corregido el error de copiado de matrices de línea con áreas de memoria superpuestas.
  8. Corregido el error al destacar una matriz de línea en la función FileReadArray.
  9. Corregida una serie de errores en la biblioteca estándar MQL5.

Tester

  1. Actualizado por completo el sistema de trabajo con la caché de optimización. La caché constituye los datos sobre las pasadas de optimización calculadas con anterioridad. El simulador de estrategias los guarda para reanudar la optimización después de una pausa y no tener que recalcular las pasadas de simulación ya realizadas.

    Cambio en el formato de guardado de la caché de optimización
    Anteriormente, la caché se almacenaba en forma de archivo XML, en el que entraban todas las pasadas de optimización del experto con los ajustes de simulación indicados. En el mismo archivo entraban resultados de optimización con diferentes parámetros de entrada.
    Ahora la caché de optimización se guarda en forma de archivos binarios aparte para cada conjunto de parámetros optimizados. Gracias al cambio de formato y la reducción del tamaño de los archivos, el trabajo del simulador con la caché de optimización es considerablemente más rápido. Esta aceleración será especialmente notoria al reanudar una optimización anteriormente pausada.

    Visualización de los resultados de las optimizaciones anteriormente realizadas
    Ahora podrá ver los resultados de las optimizaciones realizadas con anterioridad directamente en el simulador de estrategias, sin tener que analizar enormes archivos XML en programas de terceros. Abra la pestaña "Resultados de optimización", elija el experto y el archivo con la caché de optimización:



    En la lista se representan todos los archivos de la caché de optimización que están en el disco para el asesor elegido. Para cada archivo se muestra la fecha de optimización, los ajustes de simulación (símbolo, marco temporal, fechas), así como información sobre los parámetros de entrada. Además, podrá filtrar los resultados de la optimización según el servidor comercial en el que se han recibido.

    Recálculo del criterio de optimización sobre la marcha
    El criterio de optimización es un cierto índice, cuyo valor define la calidad del conjunto de parámetros de entrada a simular. Cuanto mayor sea el valor del criterio de optimización, mejor se considerará el resultado de la simulación con este conjunto de parámetros.

    Anteriormente, al realizar la optimización, solo se calculaba un criterio, seleccionado antes de la optimización. Ahora, al ver los resultados, podrá modificar el criterio de optimización sobre la marcha, y el simulador de estrategias volverá a calcular automáticamente todos los valores.




    Cómo usar la caché de optimización manualmente
    Anteriormente, la caché de optimización se guardaba como un archivo XML que se podía abrir y analizar en programas de terceros. Ahora se guarda en archivos binarios cerrados. Para obtener los datos en el formato XML, expórtelos con la ayuda del menú contextual de la pestaña "Resultados de optimización".

  2. Añadida la posibilidad de indicar manualmente la divisa del depósito y el tamaño del apalancamiento para la simulación y la optiimización. Anteriormente, la divisa del depósito se establecía de acuerdo con la cuenta conectada actual. Por consiguiente, para cambiarla, el usuario debía pasar a otras cuentas. El tamaño del apalancamiento se podía elegir solo de una lista predefinida, ahora se puede indicar cualquier valor.

    Tenga en cuenta que, para realizar correctamente la simulación, en la cuenta deberán estar disponibles los cursos cruzados para recalcular los beneficios y el margen en la divisa del depósito indicada.




  3. Eliminada la prohibición del uso de OpenCL en los agentes de simulación. Anteriormente, los dispositivos OpenCL solo podían utilizarse al realizar la simulación en agentes locales. Ahora los agentes tienen permitido usar todos los dispositivos OpenCL disponibles (procesador, tarjeta gráfica) al trabajar en la red local y en MQL5 Cloud Network.

MetaEditor

  1. Se ha optimizado y acelerado el trabajo con el repositorio de datos MQL5 Storage.
  2. Corregida la reanudación de la depuración después de una pausa en un archivo MQH.
  3. Corregido el error al resaltar el código fuente en el editor.
  4. Corregido el error de navegación por lo resultados de la búsqueda.
  5. Corregido el remplazo masivo de texto. En algunos casos, solo se remplazaba la primera aparición de la secuencia a sustituir, en lugar de todas.

Actualización de la documentación.



18 enero 2018
MetaTrader 5 build 1755

Terminal

  1. Corregido el error que provocaba que el terminal y el MetaEditor bloquearan el apagado y el reinicio de Windows.
  2. Corregida la colocación del margen del gráfico al aplicar plantillas.

MQL5

  1. Corregido el error que provocaba la ralentización de la compilación en ciertas condiciones.

Correciones de crash logs.

12 enero 2018
MetaTrader 5 build 1745

MetaTrader 5 build 1745 es la última versión de la plataforma comercial que da soporte a Microsoft Windows XP/2003/Vista.

Hace unos meses, ya anunciamos que las antiguas versiones de los sistemas operativos dejarían de tener soporte. Windows 2003, Windows Vista y sobre todo Microsoft Windows XP son ya muy antiguos. Microsoft dejó de dar soporte a Windows XP hace 3 años, puesto que, debido a sus limitaciones técnicas, este sistema no permite implementar al cien por cien las posibilidades potenciales del equipo.

MetaTrader 5 build 1745, así como las versiones de la plataforma anteriormente publicadas, continuarán funcionando en los sistemas operativos indicados, pero ya no recibirán ninguna actualización. Asimismo, en los sistemas operativos mencionados tampoco se iniciarán los instaladores.

La versión mínima para trabajar con MetaTrader 5 será Windows 7, pero le recomendamos encarecidamente utilizar las versiones de 64 bits de Windows 10.

Terminal

  1. Se ha añadido al instalador la clave /auto, que permite instalar un programa de forma automática, sin acciones adicionales por parte del usuario. Al iniciar el instalador con esta clave, no se muestran los ajustes de instalación, el terminal se instala directamente conforme a una ruta estándar y con un nombre estándar de la carpeta para el programa en el menú "Inicio". Ejemplo de inicio:
    C:\mt5setup.exe /auto
  2. Corregido el funcionamiento del instalador cuando el usuario del sistema operativo carece de derechos suficientes.
  3. Corregido el consumo excesivo de los recursos del procesador cuando en el terminal no se ejecuta ninguna acción activa (no hay gráficos abiertos, el usuario no realiza ninguna acción).
  4. Activada la compresión automática de archivos *.log a nivel del sistema de archivos. Esto permitirá reducir en el disco el volumen de espacio ocupado por los registros.

Tester

  1. Aumentado el volumen de la caché al realizarse pasadas únicas en la simulación, lo cual acelera la simulación en los sistamas operativos de 64 bits.
  2. Corregida la optimización de los robots comerciales a través de la red computacional en la nube MQL5 Cloud Network. Podían surgir problemas con los productos comprados en la tienda MetaTrader Market.
  3. Corregida la formación de spreads de las barras generadas en el modo de simulación "Según todos los ticks".
  4. Corregida la selección del dispositivo OpenCL en el simulador de estrategias. El simulador visual ahora tiene permitido el acceso a todos los dispositivos OpenCL disponibles.
  5. Activada la compresión automática de archivos *.log a nivel del sistema de archivos. Esto permitirá reducir en el disco el volumen de espacio ocupado por los registros.

MQL5:

  1. Corregida la eliminación de barras del instrumento personalizado con el método CustomRatesDelete.
Correciones de crash logs.
Actualización de la documentación.
20 diciembre 2017
MetaTrader 5 build 1730: Proyectos en el MetaEditor e instrumentos sintéticos

Finaliza el soporte de las antiguas versiones de los terminales

La nueva versión de la plataforma no dará soporte a los terminales de escritorio y móviles de las versiones antiguas:

  • Terminal de cliente: versiones inferiores al build 730 del 23 de noviembre de 2012
  • Terminal móvil para iPhone: versiones inferiores al build 1171 del 11 de noviembre de 2015
  • Terminal móvil para Android: versiones inferiores al build 1334 del 5 de agosto de 2016
Dichos terminales no podrán conectarse a los servidores de las nuevas versiones. Le recomendamos encarecidamente que actualice sus terminales de antemano.

Modificado el protocolo de trabajo con MQL5 Storage

Para dar soporte a los nuevos proyectos compartidos se ha modificado el protocolo de trabajo con el repositorio online MQL5 Storage. Por desgracia, después de actualizar a la nueva versión de la plataforma, usted deberá extraer (check-out) de nuevo todos los datos del repositorio. Los propios datos que se guardan en él no se tocarán ni perderán.

Antes de actualizar a la nueva versión de la plataforma, le recomendamos enviar todos los cambios locales al repositorio (ejecutar Commit).

Terminal

  1. Añadida la posibilidad de crear instrumentos financieros sintéticos, es decir, instrumentos basados ​​en uno o más de los disponibles. Solo tiene que especificar la fórmula para el cálculo de las cotizaciones y la plataforma generará los ticks del instrumento sintético en tiempo real, y también creará su historia de minutos.

    Cómo sucede esto

    • Usted crea un instrumento sintético y establece una fórmula para él.
    • La palataforma calculará sus ticks con una frecuencia de 10 veces por segundo (y solo si cambia el precio aunque sea de un instrumento que entre en la fórmula).
    • La plataforma calcula la historia de las barras de minuto (en los dos últimos meses) basándose en las barras de minuto de los instrumentos que entren en su fórmula. Todas las barras nuevas (la actual y la siguiente) se construirán en tiempo real basándose en los ticks generados del instrumento sintético.

    Por ejemplo, usted puede crear un instrumento que muestre el índice del dólar (USDX). Su fórmula tendrá el aspecto siguiente:

    50.14348112 * pow(ask(EURUSD),-0.576) * pow(USDJPY,0.136) * pow(ask(GBPUSD),-0.119) * pow(USDCAD,0.091) * pow(USDSEK,0.042) * pow(USDCHF,0.036)

    Nota: en la fórmula original del índice del dólar se usan las parejas USDEUR y USDGBP. Puesto que en la plataforma solo hay parejas de divisas inversas, en la fórmula del instrumento sintético para ellas se usa la potencia negativa y el precio Ask en lugar de Bid.

    La plataforma calculará en tiempo real el precio del nuevo instrumento basándose en las cotizaciones de los otros seis instrumentos, proporcionados por su bróker. En la Observación del mercado y en el gráfico, podrá ver cómo cambiar su precio:


    Cree un nuevo instrumento personalizado, abra sus especificaciones e indique la fórmula:



    Para mayor comodidad, el editor de fórmulas muestra una lista con las posibles variantes a medida que se introduce el nombre de los instrumentos y funciones.

    El cálculo de los ticks y las barras de minuto del instrumento sintético comienza al añadirlo a la "Observación del mercado". En este caso, a la "Observación del mercado" se añaden todos los símbolos necesarios para su cálculo. Al diario de la plataforma se añadirá una entrada sobre el comienzo del cálculo: Synthetic Symbol USDX: processing started.
    • El cálculo del instrumento sintético terminará al ocultarse de la "Observación del mercado".
    • Los símbolos usados en el momento actual para calcular los instrumentos sintéticos no pueden ser ocultados de la "Observación del mercado".

    Cálculo de las cotizaciones en tiempo real
    Cada 100 ms (diez veces por segundo) se comprueba si ha cambiado el precio de aunque sea uno de los instrumentos que participa en la fórmula. De ser así, tendrá lugar el recálculo del precio del instrumento sintético y se generará un tick. El cálculo se realiza paralelamente en tres flujos para los precios Bid, Ask y Last. Por ejemplo, si en la fórmula se indica EURUSD*GBPUSD, el cálculo de los precios del intrumento sintético será el siguiente:

    • Bid — bid(EURUSD)*bid(GBPUSD)
    • Ask — ask(EURUSD)*ask(GBPUSD)
    • Last — last(EURUSD)*last(GBPUSD)

    La presencia de cambios se comprueba para cada precio por separado. Por ejemplo, si al darse el cálculo cambia solo el precio Bid del instrumento fuente, entonces para el tick del instrumento sintético se calculará solo el precio donde ha habido cambios.

    Construcción de la historia de barras de minuto
    Aparte de recopilar los ticks en tiempo real, la plataforma crea también la historia de minutos del instrumento sintético. De este modo, el tráder puede mirar sus gráficos de una forma análoga a los instrumentos convencionales, para llevar a cabo el análisis técnico con la ayuda de objetos e indicadores.

    En cuanto el tráder añade un instrumento sintético a la Observación del mercado, la plataforma comprueba si existe historia de minutos calculada para él. De no ser así, esta se creará para los últimos 60 días, es decir, unas 50 000 barras. Si, en los ajustes de la plataforma, en el parámetro barras máximas en la ventana se indica un valor menor, se usará precisamente esta limitación.

    Si una parte de las barras de este periodo ya ha sido construida, la plataforma creará las nuevas barras que falten. La historia más profunda se crea solo al intentar visualizar el periodo temporal correspondiente en el gráfico (al pasarlo hacia atrás o solicitar la historia de un programa MQL5).

    La historia de las barras de minuto de los instrumentos sintéticos se calcula usando como base las barras de minuto (no los ticks) de los instrumentos incluidos en la fórmula. Por ejemplo, para calcular el precio Open de la barra de minuto de un instrumento sintético, la plataforma toma el precio de los instrumentos Opеn incluidos en su fórmula. El cálculo de los precio High, Low y Close se realiza de forma análoga.

    Si para algún instrumento de la fórmula no está presente la barra de minuto correspondiente, la plataforma tomará para el cálculo el precio Close de la barra anterior. Por ejemplo, se usan tres instrumentos: EURUSD, USDJPY y GBPUSD. Si al calcular la barra correspondiente al minuto 12:00, para el instrumento USDJPY no está presente esta barra de minuto, al realizar el cálculo se usarán los precios siguientes:

    • Para Open — EURUSD Open 12:00, USDJPY Close 11:59, GBPUSD Open 12:00
    • Para High — EURUSD High 12:00, USDJPY Close 11:59, GBPUSD High 12:00
    • Para Low — EURUSD Low 12:00, USDJPY Close 11:59, GBPUSD Low 12:00
    • Para Close — EURUSD Close 12:00, USDJPY Close 11:59, GBPUSD Close 12:00

    Si la barra de minuto no está presente en ninguno de los instrumentos de la fórmula, no se calculará la barra de minuto correspondiente del instrumento sintético.

    Construcción de las nuevas barras de minuto
    Todas las nuevas barras (la presente y las siguientes) del instrumento sintético se crean usando como base los ticks generados. El precio al que se construyen las barras depende del parámetro "Construcción de gráficos" en las especificaciones:




    Qué operaciones se pueden utilizar en la fórmula del instrumento
    En la fórmula se pueden utilizar los datos de precio, así como ciertas propiedades de los símbolos disponibles (proporcionados por el bróker). Para ello, indique:

    • El nombre del símbolo: dependiendo de qué precio del instrumento sintético se calcule, en la fórmula se usará el precio Bid, Ask o Last del instrumento indicado. Por ejemplo, si indicamos EURUSD*GBPUSD, entonces Вid se calculará como bid(EURUSD)*bid(GBPUSD), y el precio Ask, como ask(EURUSD)*ask(GBPUSD).
    • bid(nombre del símbolo) — para calcular el precio Bid de un instrumento sintético se usará obligatoriamente el precio Bid del símbolo indicado. En la práctica, esta variante se corresponde con la anterior (sin indicar el tipo de precio).
    • ask(nombre del símbolo) — para calcular el precio Bid de un instrumento sintético se usará obligatoriamente el precio Ask del símbolo indicado. Para calcular el precio Ask, al contrario, se usará el precio Bid del instrumento indicado. Para calcular el precio Last se usará el precio Last del instrumento indicado. Por ejemplo, si indicamos ask(EURUSD)*GBPUSD, el cálculo será el siguiente:
      • Вid = ask(EURUSD)*bid(GBPUSD)
      • Ask = bid(EURUSD)*ask(GBPUSD)
      • Last = last(EURUSD)*last(GBPUSD)
    • last(nombre del símbolo) — el precio Last del símbolo indicado se usará al realizarse el cálculo de todos los precios del instrumento sintético (Bid, Ask y Last). Por ejemplo, si indicamos last(EURUSD)*GBPUSD, el cálculo será el siguiente:
      • Вid = last(EURUSD)*bid(GBPUSD)
      • Ask = last(EURUSD)*ask(GBPUSD)
      • Last = last(EURUSD)*last(GBPUSD)
    • volume(nombre del símbolo) — en la fórmula se utilizará el volumen de ticks del instrumento indicado. Asegúrese de que se transmite la información sobre los volúmenes para el instrumento indicado.
    • point(nombre del símbolo) — en la fórmula se colocará el tamaño del cambio mínimo de precio del instrumento indicado.
    • digits(nombre del símbolo) — en la fórmula se colocará el número de dígitos decimales en el precio del instrumento indicado.

    Si el símbolo tiene un nombre complicado (contiene guiones, puntos, etc), deberá estar entre comillas. Por ejemplo, "RTS-6.17".
    En la fórmula se pueden utilizar las operaciones aritméticas: suma (+), resta (-), multiplicación (*), división (/) y resto de la división (%). Por ejemplo, EURUSD+GBPUSD indica que el precio se calcula como la suma de los precios EURUSD y GBPUSD. Asimismo, en la fórmula se puede utilizar un signo menos unario para cambiar el signo: -10*EURUSD.

    Existe cierta prioridad de ejecución para las operaciones aritméticas:

    • Las operaciones de multiplicación, división y resto de la división se realizan en primer lugar; después se ejecutan las operaciones de suma y resta.
    • Las operaciones se realizan de izquierda a derecha. Si en la fórmula se realizan varias operaciones que tenga la misma prioridad (por ejemplo, multiplicación y división), se ejecutará en primer lugar la operación de la izquierda.
    • Para modificar la prioridad de las operaciones se pueden utilizar los paréntesis ( y ). Las expresiones entre paréntesis tienen la mayor prioridad en los cálculos. Para ellas también existe el principio de izquierda a derecha: primero se calculan las expresiones entre paréntesis que se encuentren más a la izquierda en la fórmula.

    Asimismo, en la fórmula se pueden utilizar constantes:

    • Numéricas (enteras y reales con punto). Por ejemplo, EURUSD*2+GBPUSD*0.7.
    • Propiedades de símbolo _Digits y _Point. Estas añaden a la fórmula las propiedades del símbolo personalizado a partir de las especificaciones. _Digits — número de dígitos después de la coma en el precio de un instrumento, _Point — tamaño del cambio mínimo de precio de un instrumento.

    Además, en la fórmula se pueden usar todas las funciones matemáticas utilizables en MQL5, excepto MathSrand, MathRand y MathIsValidNumber. Para todas las funciones se usan solo los nombres cortos: fabs(), acos(), asin(), etcétera.

  2. Añadida la posibilidad de agregar cotizaciones para los instrumentos financieros en tiempo real. Ahora en MQL5 se puede escribir un experto que agregará cualquier cotización del instrumento personalizado indicado. Para ello, se usa la nueva función CustomTicksAdd.
    int  CustomTicksAdd(
       const string           symbol,       // nombre del símbolo
       const MqlTick&         ticks[]       // matriz con los datos de ticks que se deben aplicar al instrumento personalizado
       );
    La función CustomTicksAdd permite retransmitir los ticks como si llegaran del servidor del bróker. Los datos se registran directamente en la base de ticks, y luego se envían a la ventana "Observación del mercado". Y ya desde ella, el terminal guarda los ticks en su base. Si se transmite un gran volumen de datos en una llamada, la función cambia su comportamiento para ahorrar recursos. Si se transmiten más de 256 ticks, los datos se dividen en dos partes. La primera parte (la más grande) se registra directamente en la base de ticks (como hace CustomTicksReplace). La segunda parte, compuesta de los últimos 128 ticks, se transmite a la ventana de "Observación de mercado" y, después de ello, se guarda en la base del terminal.

  3. Añadida la representación de los precios High y Low en la Observación del mercado. Por defecto, estas columnas están desactivadas. Se podrán activar a través del menú contextual:




    Para los instrumentos cuyos gráficos se construyen según los precios Bid (como se indica en las especificaciones), se muestran los precios Bid High y Bid Low. Para los instrumentos cuyos gráficos se construyen según los precios Last, se muestran Last High y Last Low.

    Junto con las columnas High/Low se activará automáticamente la columna Last, si en la Observación del mercado hay aunque sea un solo instrumento cuyos gráficos se construyan con los precios Last.

  4. Añadida la posibilidad de editar la historia de ticks de los instrumentos financieros personalizados. Pulse "Símbolos" en el menú contextual de la Observación del mercado, elija el instrumento personalizado y solicite el intervalo de datos necesario en la pestaña "Ticks".

    • Para cambiar el valor, clique dos veces sobre el mismo.
    • Para añadir o eliminar entradas, use el menú contextual.
    • Para eliminar varias barras/ticks a la vez, selecciónelos con el ratón, manteniendo la tecla Shift o Ctrl+Shift.


    Para mayor comodidad, los cambios de las entradas se iluminan:

    • fondo verde — entrada cambiada
    • fondo gris — entrada eliminada
    • fondo amarillo — entrada añadida

    Para guardar los cambios, pulse "Aplicar cambios" en la parte inferior de la ventana.

  5. Añadida la representación de las cuentas preliminares en el árbol del Navegador.

    Los tráders pueden enviar al bróker solicitudes para la apertura de cuentas reales directamente desde los terminales de escritorio. Para ello, basta con rellenar un sencillo formulario con su información de contacto, de la misma forma que se hace al abrir una cuenta demo. Después se crea para el tráder una cuenta preliminar especial. A continuación, el bróker se pone en contacto con el tráder para formalizar las relaciones, y crea una cuenta real a partir de la preliminar.




  6. Añadida la muestra de la hora en milisegundos en la Ventana de cotizaciones:



  7. Se ha acelerado el escaneo de los servidores disponibles en la ventana de diálogo de la cuenta nueva.
  8. Corregida la representación del objeto gráfico "Línea de tendencia" con las opciones "Rayo a la izquierda" y "Rayo a la derecha" activadas.
  9. Optimizado el trabajo con grandes cantidades de mensajes del correo interno (cientos de miles).
  10. Optimizado el trabajo del terminal con grandes cantidades de instrumentos comerciales (50 mil y más).
  11. Añadida la optimización de la historia de ticks de los instrumentos personalizados ejecutada después de editar la historia.

MetaEditor

  1. En el MetaEditor han aparecido los proyectos completos. Así, desarrollar programas es mucho más cómodo.

    Ahora como proyecto no actúa el principal archivo MQ5 del programa. El proyecto es un archivo "MQPROJ" aparte, en el que se guardan los ajustes del programa, los parámetros de compilación y la información sobre todos los archivos utilizados. El acceso a los ajustes principales del proyecto se organiza a través de una ventana de diálogo aparte, ya no hay necesidad de indicarlos en el código fuente con la ayuda de #property.

    Para trabajar más cómodamente con el proyecto, ahora existe una pestaña aparte en el Navegador. En esta se representan por categorías todos los archivos utilizados: de inclusión, de recursos, de encabezado, etc. Además, los archivos se añaden al navegador del proyecto de forma automática. Por ejemplo, si usted incluye un nuevo archivo MQH en el código, se mostrará automáticamente en el apartado "Dependencies" del navegador.

    Hemos previsto directamente la posibilidad de trabajar con nuevos proyectos en el repositorio online MQL5 Storage. Ahora resulta mucho más cómodo desarrollar grandes proyectos junto a otros miembros de MQL5.community.

    Para trabajar en dichos proyectos compartidos, se ha añadido el nuevo apartado Shared Projects. El proyecto creado en este apartado se envía directamente al repositorio: usted podrá conceder derechos a otros miembros y proceder al desarrollo conjunto rápidamente.




    Al compilar el proyecto en Shared Project, el archivo ejecutable EX5 se copia automáticamente en el catálogo local Experts, Indicators o Scripts, dependiendo del tipo de programa. Usted podrá iniciar directamente el programa en el gráfico, sin copiar los archivos manualmente cada vez.


    Cambios en el trabajo con el repositorio MQL5 Storage

    Para implementar la posibilidad de trabajar con proyectos compartidos, se ha rehecho por completo el protocolo de trabajo con el repositorio MQL5 Storage. Por desgracia, después de actualizar a la nueva versión de la plataforma, usted deberá extraer (check-out) de nuevo todos los datos del repositorio. Los propios datos que se guardan en él no se tocarán ni perderán.

    Antes de actualizar a la nueva versión de la plataforma, le recomendamos enviar todos los cambios locales al repositorio (ejecutar Commit).

    El comando "Extraer datos del repositorio" (Checkout from Storage) ahora no está disponible. Para extraer datos de utilizan los comandos "Activar MQL5 Storage" y "Obtener archivos del repositorio":

    • Si en la copia actual del MetaEditor usted no ha usado aún el repositorio, pulse "Activar MQL5 Storage" en el menú contextual de la ventana "Navegador". Todos los catálogos y archivos existentes en su repositorio se transferirán a la computadora local.
    • Si usted ya trabaja con el repositorio, entonces para extraer todos los datos del mismo, pulse "Obtener archivos del repositorio" en el menú contextual del elemento raíz de MQL5 en la ventana "Navegador".

    Nuevos proyectos: ejemplo de creación y detalles del funcionamiento

    En el MetaEditor ahora existe un nuevo elemento: el proyecto propiamente dicho. Se trata de un archivo con la expansión mqproj, en el que se guardan las propiedades generales del programa, así como información sobre todos los archivos utilizados. Ahora es posible gestionar cómodamente las propiedades del programa en una ventana de diálogo propia del MetaEditor, sin tener que modificarlas manualmente en el código fuente (directivas #property).

    Si usted ya dispone de desarrollos, el método más sencillo de probar los nuevos proyectos es usar el comando "Nuevo proyecto a partir de un Archivo fuente".



    En el mismo catálogo que se encuentra el archivo fuente, se creará un archivo de proyecto homónimo con la expansión mqproj. Al proyecto se añadirán de forma automática las propiedades principales del programa, indicadas como #property en el archivo fuente: el nombre, el copyright, la versión, el enlace al desarrollador y la descripción.

    Las propiedades del programa en el archivo del proyecto tienen prioridad sobre las propiedades indicadas en el código fuente. Si usted indica las propiedades tanto en el proyecto como en el código fuente, se usarán las propiedades del proyecto.




    En las propiedades de los proyectos han aparecido dos nuevas opciones para compilar programas MQL5:

    • Activar optimización adicional: las aplicaciones con la optimización desactivada se compilan más rápido, pero funcionan más despacio.
    • Comprobar los divisores reales: las aplicaciones con la comprobación desactivada funcionan un poco más rápido, puesto que los errores de división por cero no son comprobados al ejecutar el código.

    Para trabajar con un proyecto se ha diseñado la pestaña aparte "Proyecto", en la ventana "Navegador". En esta pestaña se muestran cómodamente todos los archivos usados en el proyecto. Al generar el proyecto a partir de un archivo fuente, se añaden automáticamente al apartado "Dependencies" todos los archivos de inclusión utilizados (indicados con la ayuda de la directiva #include en el archivo MQ5 principal y en todos los archivos incluidos en él).

    Al añadir nuevos archivos de inclusión al código fuente, dichos archivos también aparecerán en el Navegador del proyecto. En el apartado Headers se añadirán los archivos de encabezado utilizados, y en el apartado Resources, las imágenes, sonidos y otros programas MQL5 incluidos en el proyecto en forma de recursos. En el apartado Sources se muestran los archivos MQ5 con el código fuente. Al apartado Settings and files podemos añadir otros archivos, por ejemplo, los ajustes para la simulación y las plantillas para los gráficos.

    Para añadir los archivos existentes al proyecto y eliminar archivos del mismo, use los comandos del menú contextual. Preste mucha atención al eliminar archivos: usted puede quitar un archivo del proyecto (suprimir la vinculación) o eliminarlo completamente del disco duro:




    Crear un nuevo proyecto es igual de fácil que crear un programa MQL5 normal. Pulse "Nuevo proyecto" y, ya en el Wizard de MQL5 en el modo normal, elija el tipo de programa a crear, indicando también sus propiedades (nombre, manejador de eventos, etc).

    Para obtener un archivo ejecutable EX5, usted podrá abrir el proyecto y ejecutar el comando de compilación (F7) o, como antes, abrir el archivo MQ5 principal del programa y compilarlo.


    Proyectos compartidos en MQL5 Storage: detalles del funcionamiento

    Para trabajar con proyectos compartidos, se ha diseñado el apartado Shared Projects. Si usted aún no ha activado el repositorio, ejecute en el menú contextual de esta carpeta el comando Activate MQL5 Storage. El MetaEditor comprobará de inmediato si hay datos guardados en su repositorio, y también si hay disponible para usted algún proyecto compartido. Los datos disponibles se extraerán instantáneamente del repositorio y luego serán cargados en la computadora (Checkout). Los proyectos compartidos disponibles se mostrarán en el apartado Shared Project, para obtenerlos, pulse "Extraer archivos del repositorio" en el menú contextual.

    Para crear un nuevo proyecto compartido, elija la carpeta Shared Projects y pulse "Nuevo proyecto":




    A continuación, siga los pasos estándar del Wizard MQL5: indique el tipo, el nombre y las propiedades del futuro programa. Elija para los proyectos compartidos nombres claros y comprensibles, para que los demás miembros puedan distinguirlos fácilmente. En los nombres solo se permiten letras latinas, no están permitidos los espacios en blanco.

    Una vez creado, el proyecto se añadirá automáticamente al repositorio MQL5 Storage. Los archivos utilizados de la biblioteca estándar no son añadidos al repositorio, podrá añadirlos manualmente en caso necesario.

    Para permitir trabajar en el proyecto a los otros integrantes, abra las propiedades del mismo. Aquí podrá conceder derechos a usuarios concretos (indicando el login de MQL5.community), y también establecer los parámetros generales del trabajo cooperativo:

    • Proyecto privado
    • Cualquiera puede unirse al proyecto
    • Solicitar la participación en el proyecto




    Para trabajar con mayor comodidad, al compilar un proyecto compartido, el archivo ejecutable final (EX5) se copia de forma automática en la carpeta Experts, Indicators o Scripts, dependiendo del tipo de programa. De esta forma, usted podrá iniciar directamente el programa en el terminal, sin copiarlo manualmente al catálogo necesario.


    Proyectos públicos en MQL5 Storage: participación en los desarrollos

    Como ya hemos mencionado anteriormente, cada proyecto compartido en MQL5 Storage dispone de ajustes de privacidad: el proyecto puede ser privado o estár abierto para otros usuarios. Ahora todos los proyectos en los que se puede participar libremente se representan en la pestaña aparte "Proyectos públicos".

    Cualquier usuario puede encontrar un proyecto interesante y participar en su desarrollo. Basta con pulsar "Unirse", y después recibir el proyecto desde el repositorio.



    Al unirse, el usuario solo adquiere el derecho a ver el proyecto. Para tener derecho a enviar al repositorio sus propios cambios, contacte con el autor del proyecto. Para ver el login del autor, abra las propiedades del proyecto a través del menú contextual.

  2. Añadida la posibilidad de insertar fácilmente diferentes propiedades y recursos en el código del programa. Por ejemplo, usted podrá añadir rápidamente al código un archivo de inclusión. Elija el comando "Insertar — MQH en forma de #incude", y después elija el archivo de inclusión necesario en la ventana que se abrirá. A continuación, al código del programa se le añadirá la directiva #include con la ruta correcta indicada al archivo elegido.




    Con la ayuda de este mismo menú, es posible añadir con facilidad archivos en forma de matriz binaria o de texto al código del programa. Usted podrá, por ejemplo, trasladar las plantillas de los gráficos junto con los expertos/indicadores: incluya su plantilla en el código del programa en forma de matriz, a continuación, con la ayuda de la función FileSave, guárdela en el disco. Después de ello, la plantilla se podrá aplicar al gráfico directamente desde el experto con la ayuda de la función ChartApplyTemplate.
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //--- archivo de la plantilla en forma de matriz binaria
       unsigned char my_template[]=
         {
          0xFF,0xFE,0x3C, ... ,0x00 // la matriz de datos ha sido acortada en el ejemplo
         };
    //--- guardamos y aplicamos la plantilla
       if(FileSave("my_template.tpl",my_template))
         {
          Print("Custom template saved in \\MQL5\\Files");
          if(ChartApplyTemplate(0,"\\Files\\my_template.tpl"))
             Print("Custom template applied to the current chart");
          else
             Print("Failed to apply custom template");
         }
       else
          Print("Failed to save custom template");
      }

  3. Añadida la posibilidad de transformar las líneas entre los formatos ASCII, HEX y Base64. Elija una línea en el código fuente, y a continuación pulse el comando necesario en el menú "Editar — Transformar":




  4. Corregida la búsqueda por archivos sin tener en cuenta el registro.
  5. Corregido el error en el depurador al calcular el valor de una expresión del tipo x.y[0][1].z.
  6. Corregido el desplazamiento por el código con la ayuda de los botones "Adelante" y "Atrás".

MQL5:

  1. Añadido un nuevo servicio online para proteger adicionalmente los programas MQL5: MQL5 Cloud Protector. Se trata de una protección análoga a la usada en la mayor tienda de aplicaciones comerciales, MetaTrader Market, donde los archivos de los productos (EX5) enviados por los vendedores son compilados de manera adicional en código nativo.

    Ahora todos pueden disponer de un nivel de protección como el del Mercado. Basta con ejecutar el comando Servicio — MQL5 Cloud Protector en el MetaEditor. La única diferencia de esta protección con respecto a la del Mercado consiste en que no se vincula a la computadora del usuario. Los archivos protegidos con MQL5 Cloud Protector se pueden iniciar en cualquier computadora, como los archivos EX5 normales.
    El servicio MQL5 Cloud Protector funciona de forma segura. La protección adicional se aplica solo al archivo ya compilado. El código fuente no se transmite a ninguna parte. Primero el program se compila en un archivo EX5 en la compuatadora del usuario, después el archivo compilado se envía al servicio por un canal codificado, es protegido y retorna al usuario.



  2. Añadidas varias funciones para trabajar con instrumentos financieros personalizados.

    Función Acción
    CustomSymbolCreate Crea un símbolo personalizado con el nombre indicado en el grupo indicado
    CustomSymbolDelete Elimina el símbolo personalizado con el nombre indicado
    CustomSymbolSetInteger Establece para el símbolo personalizado el valor de propiedad de tipo de número entero
    CustomSymbolSetDouble Establece para el símbolo personalizado el valor de propiedad de tipo real
    CustomSymbolSetString Establece para el símbolo personalizado el valor de propiedad de tipo string
    CustomSymbolSetMarginRate Establece para el símbolo personalizado los coeficientes del margen de carga dependiendo del tipo y la dirección de la orden
    CustomSymbolSetSessionQuote Establece la hora de comienzo y finalización de la sesión de cotizaciones indicada para los símbolos y el día de la semana indicados
    CustomSymbolSetSessionTrade Establece la hora de comienzo y finalización de la sesión de comercial indicada para los símbolos y el día de la semana indicados
    CustomRatesDelete Elimina todas las barras en el intervalo temporal indicado de la historia de precios del instrumento personalizado
    CustomRatesReplace Sustituye totalmente la historia de precios del instrumento personalizado en el intervalo temporal indicado, con los datos de la matriz del tipo MqlRates
    CustomRatesUpdate Añade a la historia del instrumento personalizado las barras ausentes y sustituye las existentes con datos de la matriz del tipo MqlRates
    CustomTicksAdd Añade a la historia de precios del instrumento personalizado los datos de la matriz del tipo MqlTick. El símbolo personalizado debe ser elegido en la ventana de MarketWatch (Observación del mercado)
    CustomTicksDelete Elimina todos los ticks en el intervalo temporal indicado de la historia de precios del instrumento personalizado
    CustomTicksReplace Sustituye totalmente la historia de precios del instrumento personalizado en el intervalo temporal indicado, con los datos de la matriz del tipo MqlTick

  3. Se han añadido a la Biblioteca Estándar Colecciones de datos genéricas, que contienen clases e interfaces para definir las colecciones basadas en plantillas. Las nuevas colecciones estrictamente tipadas hacen más cómodo el desarrollo de programas y aumentan el rendimiento del trabajo con datos.

    La biblioteca se ubica en el catálogo de trabajo del terminal en la carpeta Include\Generic.

  4. Añadido el soporte de plantillas para los datos del tipo union.
  5. Añadida la propiedad del instrumento comercial SYMBOL_VISIBLE. La llamada de SymbolInfoInteger(symbol, SYMBOL_VISIBLE) retornará false si el símbolo indicado no se ve en la Observación del mercado.
  6. Añadido el evento CHARTEVENT_MOUSE_WHEEL. El evento se llama al girar o pulsar la ruleta del ratón en el gráfico (si se ha establecido para él CHART_EVENT_MOUSE_WHEEL=true).
  7. Añadidas nuevas propiedades del gráfico:

    • CHART_EVENT_MOUSE_WHEEL — activar/desactivar la generación del evento de giro y pulsación de la ruleta del ratón en el gráfico CHARTEVENT_MOUSE_WHEEL. . Valores posibles: 0 y 1.
    • CHART_CROSSHAIR_TOOL — activar/desactivar la posibilidad de pasar el cusor al modo "Cursor en cruz" al pulsar el botón central del ratón. Valores posibles: 0 y 1.
    • CHART_CONTEXT_MENU — activar/desactivar la representación del menú contextual al pulsar el botón derecho del ratón en el gráfico. Valores posibles: 0 y 1.

  8. Ahora, al calcular la escala de la ventana del indicador, no se tienen en cuenta los búferes de dibujado con el estilo DRAW_NONE.
  9. Añadida la generación del evento CHARTEVENT_CHART_CHANGE al indicar la propiedad CHART_SCALEFIX (escala fija) para el gráfico.
  10. Añadida la función ArraySwap, que permite intercambiar rápidamente el contenido de las matrices dinámicas.
    bool  ArraySwap(
       void&  array1[],      // primera matriz
       void&  array2[]       // segunda matriz
       );
    La función adopta matrices dinámicas de idéntico tipo e idénticas dimensiones. Para las matrices multidimensionales, deberá coincidir el número de elementos en todas las dimensiones, excepto la primera.

  11. Añadida la nueva propiedad TERMINAL_RETRANSMISSION — el porcentaje de paquetes de red nuevamente enviados (retransmisiones) en el protocolo TCP/IP para todos los servicios y aplicaciones iniciados en una computadora dada. Incluso en la red más rápida y mejor configurada tienen lugar pérdidas de paquetes y, como consecuencia, no se da la confirmación de la entrega de los paquetes entre el receptor y el emisor. En tales casos, el paquete "perdido" es enviado de nuevo.

    El terminal no calcula este índice, el valor del mismo se solicita una vez por minuto desde el sistema operativo. No es un índice de calidad de la conexión de un terminal concreto a un servidor comercial concreto, puesto que se calcula para toda la actividad de la red, incluyendo la actividad sistémica y la actividad de fondo.

    La propiedad TERMINAL_RETRANSMISSION ha sido añadida a la lista ENUM_TERMINAL_INFO_DOUBLE, para obtenerla, hay que utilizar la función TerminalInfoDouble.
  12. Optimizado el trabajo con la historia comercial.
  13. Signals: Corregida la sustitución del tipo de ejecución de la orden según el resto (filling) al darse el cierre forzoso de las posiciones abiertas según la señal. En los ajustes de copiado de señales se contempla la opción "Stop, si la cuenta está por debajo de XXX USD": si el nivel de equidad en la cuenta cae por debajo de lo especificado, entonces el copiado de señales comerciales se detiene automáticamente, y todas las posiciones se cierran de manera forzosa. Anteriormente, al darse el cierre forzoso de las posiciones, en ciertos casos para las órdenes de cierre no se indicaba correctamente el tipo de relleno. Ahora, el terminal comprueba los tipos de relleno permitidos en los ajustes del símbolo e indica en las órdenes la variante permitida.

Tester

  1. El comportamiento de la función HistoryOrderSelect en el simulador de estrategias se ha adaptado de acuerdo con el terminal de cliente.
  2. El comportamiento de las funciones CopyTicks y CopyTicksRange en el simulador de estrategias se ha adaptado de acuerdo con el terminal de cliente.
  3. Optimizada la representación de los objetos gráficos al realizar la simulación en el modo visual.
  4. Corregida la muestra de los resultados de la simulación de los instrumentos bursátiles (con el modelo bursátil de gestión de riesgos). Ahora en el gráfico se representan solo los recursos (equidad), no se representan el balance y la carga sobre el depósito. El estado comercial de estas cuentas se valora según el nivel de los recursos. En sí, el balance solo muestra el propio dinero en la cuenta y no tiene en cuenta los activos y las obligaciones del tráder. La carga sobre el depósito (margin/equity) no se muestra, ya que el margen en el cálculo bursátil constituye el precio actual del activo/obligación teniendo en cuenta el descuento, y suele cambiar junto con la equidad.

  • Añadida la traducción de la interfaz de usuario al holandés.
  • Actualización de la documentación.


23 agosto 2017
MetaTrader 5 iOS build 1649: estadísticas de mercado sobre instrumentos

Añadida la posibilidad de visualizar las estadísticas de mercado de los instrumentos financieros cuyo comercio se está realizando en el modo de ejecución bursátil. Para ello, es necesario llamar desde Market Watch el menú del símbolo que le interese y desplegar sus estadísticas.


Optimizado el trabajo con las posiciones en la pestaña "Comercio". Ahora, al dar un toque sobre la celda de una posición/orden, se mostrará una imagen detallada de la misma y las posibles variantes de acción: cerrar, modificar o incrementar la posición, y también abrir el gráfico del símbolo del cual está abierta la posición.

2 agosto 2017
MetaTrader 5 Android build 1642: Solicitud simplificada de apertura de cuentas reales

En MetaTrader 5 Android se ha añadido la posibilidad de abrir rápidamente cuentas preliminares (preliminary) con un bróker. Para ello, usted deberá elegir el punto del menú "Abrir una cuenta real" e indicar en la lista de brókeres el suyo. A continuación, solo le quedará adjuntar a la solicitud un documento que certifique se identidad y un extracto bancario. Su solicitud de apertura de una cuenta real se enviará de inmediato al bróker, que en caso necesario le pedirá a usted información adicional.


21 julio 2017
MetaTrader 5 build 1640: Creación y simulación de instrumentos financieros propios

Terminal

  1. Añadida la posibilidad de crear instrumentos financieros propios. Ahora usted podrá crear cualquier instrumento, establecer los ajustes necesarios para él, importar al mismo sus datos de precio y visualizar gráficos sobre dicho instrumento.

    Crando un símbolo personalizado
    Abra la ventana de gestión de símbolos a través del menú contextual "Observación del mercado" y pulse "Crear un símbolo":


    Hay multitud de parámetros disponibles para el ajuste. Podrá ver la lista de dichos parámetros en la documentación. Usted tendrá la posibilidad de ajustar su propio instrumento: copie los parámetros de cualquier instrumento semejante y después cambie lo que necesite. Para ello, elija el instrumento del que ya disponga en el campo "Copiar desde".
    El nombre del símbolo personalizado no deberá coincidir con los nombres de los símbolos retransmitidos por los brókeres. Si usted se conecta al servidor y en este resulta haber un símbolo que coincide con el símbolo personalizado, el símbolo personalizado será eliminado.
    Aquí mismo están los comandos de importación y exportación de los ajustes. Podrá compartir fácilmente símbolos personalizados o transferirlos entre sus terminales. Los ajustes se exportan a archivos de texto del formato JSON.

    Gestión de los símbolos personalizados
    Todos los símbolos se representan en el grupo aparte Custom. Para modificar o eliminar un símbolo, use el menú contextual en la lista:



    Importando la historia de precios
    Usted podrá importar los datos de precio a un símbolo propio desde cualquier archivo de texto. Elija el símbolo y pase a continuación a la pestaña "Barras".


    En el diálogo de importación, indique la ruta al archivo con los datos y establezca la configuración:

    • Separador — elemento separador en un archivo de texto.
    • Omitir columnas y líneas — número de columnas (de izquierda a derecha) y líneas (de arriba a abajo) que se pueden omitir al realizar la importación.
    • Desplazamiento — desplazamiento temporal por horas. Esta opción se usa al importar los datos guardados en otro huso horario.
    • Usar solo las seleccionadas — esta opción permite importar solo las líneas seleccionadas en la ventana de visualización. Las líneas se pueden destacar con la ayuda del ratón, manteniendo las teclas "Ctrl" o "Shift".

    El archivo con las barras debe tener el formato: Fecha Hora Open High Low Close VolumendeTicks Spread. Ejemplo:
    2016.06.27    00:01:00    1.10024    1.10136    1.10024    1.10070    18    54000000    44
    2016.06.27    00:02:00    1.10070    1.10165    1.10070    1.10165    32    55575000    46
    2016.06.27    00:03:00    1.10166    1.10166    1.10136    1.10163    13    13000000    46
    2016.06.27    00:04:00    1.10163    1.10204    1.10155    1.10160    23    51000000    41
    Para su propio símbolo usted podrá usar los datos de cualquier otro instrumento existente. Expórtelos (esta posibilidad se añadió en la anterior versión de la plataforma), y en caso necesario, modifíquelos e impórtelos de vuelta.
    En MetaTrader 5 la historia de precio se guarda en forma de barras de minuto. El resto de los marcos temporales se crea sobre su base. Al realizar la importación, usted podrá usar los datos de marcos temporales mayores, pero hay que tener en cuenta que los gráficos de los marcos temporales menores, en este caso, tendrán huecos. Por ejemplo, al importar los datos de horas, en el gráfico de minutos usted podrá ver una barra cada hora.
    Los datos de precio de los símbolos de usuario se guardan en el catálogo aparte Custom (fuera de los catálogos de servidores comerciales concretos):
    C:\Users\[windows account]\AppData\Roaming\MetaQuotes\Terminal\[instance id]\bases\Custom

    Usando símbolos propios
    El uso de símbolos propios prácticamente no se diferencia del uso de aquellos que ofrece el bróker. Estos también se muestran en la ventana de "Observación de mercado", es posible abrir gráficos de ellos, y después colocar indicadores y objetos analíticos sobre los mismos. Además, en este caso, no es posible comerciar con los símbolos personalizados.

    Simulación de estrategias usando símbolos propios
    Los símbolos propios creados se pueden utilizar para poner a prueba los robots comerciales y los indicadores en el simulador de estrategias. Esto permite optimizar las estrategias incluso para los instrumentos financieros que el bróker no tiene disponibles en este momento. Basta con importar correctamente la historia y configurar las propiedades del símbolo personalizado.


    Al calcular el margen y el beneficio, el simulador de estrategias usa automáticamente los cursos cruzados disponibles. Por ejemplo, hemos creado un símbolo AUDCAD.custom propio con un tipo de cálculo del margen Fórex, y la divisa de nuestro depósito es USD. Entonces, basándose en el nombre del instrumento fórex, el simulador busca los símbolos necesarios en el siguiente orden:
    1.     primero se buscan los símbolos AUDUSD.custom (para el cálculo del margen) y USDCAD.custom (para el cálculo del beneficio de las transacciones)
    2.     a continuación, si alguno de dichos instrumentos no está presente, se busca el primer símbolo cuyo nombre se corresponda con las parejas de divisas necesarias, es decir, AUDUSD y USDCAD, respectivamente. Por ejemplo, se han encontrado AUDUSD.b y NZDUSD.b, esto significa que los cursos de estos instrumentos se usarán al calcular el margen y el beneficio.

    Los instrumentos con los demás tipos de cálculo de margen (Futures, Stock Exchange) precisan de una pareja de divisas para convertir la divisa del instrumento en la divisa del depósito. Por ejemplo, hemos creado nuestro propio símbolo con una divisa de beneficio y una divisa de margen expresadas en libras esterlinas (GBP), mientras que la divisa del depósito es el franco suizo (CHF). Entonces, la búsqueda de instrumentos para la simulación se realizará en el siguiente orden:
    1. Se comprueba la presencia del instrumento financiero que corresponde a la pareja GBPCHF (GBP vs CHF).
    2. Si no existe tal instrumento, entonces se busca el primer instrumento financiero cuyo nombre se corresponda con la pareja de divisas, por ejemplo, GBPCHF.b o GBPCHF.def.

    Al realizar simulaciones con sus propios instrumentos, asegúrese de que en la cuenta están disponibles todas las parejas de divisas necesarias para los cálculos. De lo contrario, el cálculo de los resultados financieros y de las exigencias de depósito durante la simulación no serán posibles.

    Más posibilidades en las siguientes versiones de la plataforma
    El trabajo con los propios instrumentos aún no ha finalizado, en las próximas versiones de la plataforma aparecerán nuevas funciones. Usted podrá importar la historia a los símbolos personalizados directamente desde los expertos, así como retransmitir datos sobre ellos (añadir cotizaciones) en tiempo real.

  2. Añadido el filtrado de la banda de transacciones según el volumen.

    Es posible ocultar de la banda las transacciones con un volumen menor al indicado. De esta forma, en la banda permanecerán solo las transacciones importantes, que influyen en el mercado.

    Pulse dos veces sobre la primera línea de la banda de transacciones, indique el volumen mínimo en lotes, y a continuación pulse sobre cualquier otra zona de la pantalla. Las transacciones serán filtradas, y el valor actual del filtro aparecerá en el encabezamiento de la columna de volumen.


    También es posible indicar el volumen mínimo a través del menú contextual de la banda de transacciones.

  3. Añadida la posibilidad de vincular la profundidad de mercado al gráfico activo. Cada vez que usted pase a la visualización del gráfico de algún instrumento financiero, en la profundidad de mercado se activará de forma automática exactamente el mismo instrumento. No tendrá que abrir aparte la profundidad de mercado para cada símbolo.



  4. Corregida la actualización de los paneles de instrumentos después de ocultar y desplegar la ventana del terminal.
  5. Corregida la formación de la historia comercial de las posiciones al cruzarse los tickets de las transacciones y las posiciones.

MQL5

  1. Añadida la posibilidad de perfilado de programas MQL5 sobre la historia de precios. Esto permitirá comprobar rápidamente la productividad de los programas sin tener que esperar nuevos tickets.

    Al perfilar con datos reales, el programa se inicia en el gráfico habitual en el terminal. Muchos programas, en especial los indicadores, ejecutan ciertos cálculos solo con la llegada de un nuevo tick (OnTick, OnCalculate). De esta forma, para valorar la productividad debemos esperar la llegada de nuevos ticks en tiempo real. Al realizar la simulación con datos históricos, usted podrá indicar de inmediato la carga para el programa. El perfilado se inicia en el simulador de estrategias en el modo visual, después usted recibirá inmediatamente multitud de eventos de llegada de un nuevo tick.



  2. Añadido el soporte de Unión (union). Se trata de un tipo especial de datos que consta de varias variables que comparten una misma zona de la memoria. Por consiguiente, la unión proporciona la posibilidad de interpretar una misma secuencia de bits con dos (o más) métodos diferentes. La declaración de una unión comienza con la palabre clave union.
    union LongDouble
    {
      long   long_value;
      double double_value;
    };
    A diferencia de la estructura, los diferentes miembros de una unión se relacionan con una misma zona de la memoria. En este ejemplo se ha declarado la unión LongDouble, en la que el valor del tipo long y el valor del tipo double comparten la misma zona de la memoria. Es importante comprender que no es posible hacer que la unión guarde al mismo tiempo valores de tipo entero long y reales double (como sucedía en la estructura), puesto que las variables long_value y double_value se solapan (en la memoria) una sobre otra. Sin embargo, un programa MQL5 puede en cualquier momento procesar la información que se contiene en esta unión como un valor entero (long) o como uno real (double). Por consiguiente, la unión permite obtener dos (o más) variantes de representación de una misma secuencia de datos.

    Al declarar una unión, el compilador delimita automáticamente una parte de la memoria que sea suficiente para guardar en una unión las variables del tipo de volumen más grande. Para acceder a un elemento de la unión, se usa la misma sintaxis que para las estructuras: el operador "punto".
    union LongDouble
    {
      long   long_value;
      double double_value;
    };
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //---
       LongDouble lb;
    //--- obtenemos el número no válido -nan(ind) y lo mostramos
       lb.double_value=MathArcsin(2.0);
       printf("1.  double=%f                integer=%I64X",lb.double_value,lb.long_value);
    //--- valor mayor normalizado (DBL_MAX)
       lb.long_value=0x7FEFFFFFFFFFFFFF;
       printf("2.  double=%.16e  integer=%I64X",lb.double_value,lb.long_value);
    //--- menor positivo normalizado (DBL_MIN)
       lb.long_value=0x0010000000000000;    
       printf("3.  double=%.16e  integer=%.16I64X",lb.double_value,lb.long_value);
      }
    /*  Resultado de la ejecución
        1.  double=-nan(ind)                integer=FFF8000000000000
        2.  double=1.7976931348623157e+308  integer=7FEFFFFFFFFFFFFF
        3.  double=2.2250738585072014e-308  integer=0010000000000000
    */

  3. Añadida la generación automática del operador implícito de copiado para los objetos de estructuras y clases. Ahora el compilador crea de forma automática operadores de copadio, lo que permite escribir para los objetos las entradas sencillas del tipo b=a:
    class Foo
      {
       int               value;
    public:
       string Description(void){return IntegerToString(value);};
       //--- constructor por defecto
                         Foo(void){value=-1;};
       //--- constructor con parámetros   
                         Foo(int v){value=v;};
      };
    //+------------------------------------------------------------------+
    //|  estructura que contiene el objeto del tipo Foo                          |
    //+------------------------------------------------------------------+
    struct MyStruct
      {
       string            s;
       Foo               foo;
      };
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //---
       MyStruct a,b;
       Foo an_foo(5);
       a.s="test";
       a.foo=an_foo;
       Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
       Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
    //---
       Print("b=a");
       b=a;
    //---
       Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
       Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
    /*
       Resultado de la ejecución;
       a.s=test a.foo.Description()=5
       b.s= b.foo.Description()=-1
       b=a
       a.s=test a.foo.Description()=5
       b.s=test b.foo.Description()=5
    */
      }
    En el operador implícito se realiza el copiado por miembros de los objetos.

    • Si el miembro es un objeto, se llama al operador de copiado correspondiente para este objeto.
    • Si el miembro es una matriz de objetos, entonces, antes de llamar el operador de copiado correspondiente para cada elemento, la matriz receptora aumenta o disminuye hasta el tamaño necesario a través de ArrayResize.
    • Si el miembro es una matriz de tipos simples, para copiar se usa la función ArrayCopy.
    • Si el miembro es un puntero a un objeto, se copia el propio puntero, y no el objeto al que señala.

    En caso necesario, podemos redefinir el comportamiento, y en lugar de un operador implícito de copiado, crear nuestra propia variedad con la ayuda de la sobrecarga.

  4. Optimizada la utilización de la memoria al recurrir a la historia de precios desde los expertos con la ayuda de funciones Copy*. Al trabajar con grandes volúmenes de datos, el uso de la memoria se reducirá varias veces.

  5. Ahora la función TimeToStruct retorna un valor booleano, permitiendo comprobar el éxito de la conversión de datetime a MqlDateTime.
  6. Añadida la prohibición del uso de las funciones FileWriteStruct y FileReadStruct para las estructuras que contengan líneas, matrices dinámicas, objetos y punteros.
  7. Añadidos los códigos de respuesta:

    • TRADE_RETCODE_REJECT_CANCEL — la solicitud de activación de una orden pendiente ha sido rechezada, y la propia orden ha sido cancelada
    • TRADE_RETCODE_LONG_ONLY — la solicitud ha sido rechazada, puesto que en el símbolo se ha establecido la norma "Solo se permiten posiciones largas"
    • TRADE_RETCODE_SHORT_ONLY — la solicitud ha sido rechazada, puesto que en el símbolo se ha establecido la norma "Solo se permiten posiciones cortas"
    • TRADE_RETCODE_CLOSE_ONLY — la solicitud ha sido rechazada, puesto que en el símbolo se ha establecido la norma "Solo se permite cerrar las posiciones existentes"

  8. Añadido un nuevo valor, devuelto por la función SymbolInfoInteger con el parámetro SYMBOL_ORDER_MODE. SYMBOL_ORDER_CLOSEBY — bandera sobre la posibilidad de colocar órdenes de cierre de posición con una opuesta (Close By).
  9. A la enumeración ENUM_SYMBOL_INFO_INTEGER se ha añadido la propiedad boleana SYMBOL_CUSTOM. Permite saber si el símbolo es un símbolo personalizado. Para obtener la propiedad, use la función SymbolInfoInteger.
  10. Ahora es posible averiguar el motivo de la creación de una orden, transacción y posición.

    Nuevas propiedades


    Motivos de la creación de una orden, transacción y posición
    Para averiguar los motivos de la creación de las operaciones comerciales se han añadido tres enumeraciones:

    ENUM_POSITION_REASON ENUM_DEAL_REASON ENUM_ORDER_REASON Descripción de las causas
    POSITION_REASON_CLIENT DEAL_REASON_CLIENT ORDER_REASON_CLIENT La operación se ha ejecutado como resultado de la activación de una orden colocada desde el terminal de escritorio
    POSITION_REASON_MOBILE DEAL_REASON_MOBILE ORDER_REASON_MOBILE La operación se ha ejecutado como resultado de una orden colocada desde el terminal móvil
    POSITION_REASON_WEB DEAL_REASON_WEB ORDER_REASON_WEB La operación se ha ejecutado como resultado de la activación de una orden colocada desde la plataforma web
    POSITION_REASON_EXPERT DEAL_REASON_EXPERT ORDER_REASON_EXPERT La operación se ha ejecutado como resultado de la activación de una orden colocada desde un programa MQL5: un asesor o script
    - DEAL_REASON_SL ORDER_REASON_SL La operación se ha ejecutado como resultado de la activación de un Stop Loss
    - DEAL_REASON_TP ORDER_REASON_TP La operación se ha ejecutado como resultado de la activación de un Take Profit
    - DEAL_REASON_SO ORDER_REASON_SO La operación se ha ejecutado como resultado del evento Stop Out
    - DEAL_REASON_ROLLOVER - La transacción se ha ejecutado a causa del traslado de una posición
    - DEAL_REASON_VMARGIN - La transacción se ha ejecutado después de abonarse/retirarse el margen de variación
    - DEAL_REASON_SPLIT - La transacción se ha ejecutado a causa del fraccionamiento (reducción del precio) de una acción u otro activo que tenía una posición abierta en el momento del anuncio del fraccionamiento

  11. Optimizada la sincronización y el acceso a la historia de ticks.
  12. Corregido el retorno de ticks a la matriz estática en la función CopyTicksRange. En este caso, antes simepre se retornaban 0 ticks.
  13. Introducidas diferentes correcciones en la biblioteca de lógica difusa Fuzzy.

Signals

  1. Corregida la apertura de una señal desde la página web cuando no hay conexión con la cuenta comercial.

Tester

  1. Se ha optimizado y acelerado considerablemente el funcionamiento de la historia de órdenes y transacciones. Al trabajar con un gran volumen de datos (decenas de miles de entradas en la historia y más), la velocidad del funcionamiento aumenta varias veces.
  2. Corregido el cálculo del tiempo de mantenimiento de la posición en el informe de simulación.

MetaEditor

  1. En el depurador se ha corregido la representación del contenido de las matrices-miembros estáticas de la clase.
  2. Añadida la lista de puntos de interrupción en el programa depurado. Para pasar a ella, use el menú contextual de la pestaña "Depuración":


    Para pasar a cualquiera de los puntos, pulse dos veces sobre él.
Actualización de la documentación.


8 junio 2017
MetaTrader 5 iOS build 1605: apertura de una cuenta preliminar con un bróker

En MetaTrader 5 iOS se ha añadido la posibilidad de abrir rápidamente cuentas preliminares (preliminary) con un bróker. Ahora es suficiente con elegir el punto del menú "Abrir una cuenta real" e indicar su servidor en la lista de servidores. Después de rellenar los datos personales, solo queda adjuntar dos documentos que acrediten su identidad y su dirección, y enviar la solicitud de registro. De esta forma, el bróker podrá abrirle una cuenta real, pidiéndole información adicional en el caso necesario.


En el build 1605 de MetaTrader 5 iOS también se ha optimizado y rediseñado el correo:

  • ahora los correos relacionados están unidos en una misma cadena y se muestran en un solo punto
  • también está disponible la vista previa de los archivos adjuntos
  • al enviar un nuevo correo es posible añadir hasta 5 documentos adjuntos (el tamaño del archivo no debe superar los 8 Mb).
26 abril 2017
MetaTrader 5 build 1596: acceso a la historia de precios

Terminal

  1. Añadido el acceso a la historia de barras y a la historia de ticks. Ahora es posible solicitar la historia de minutos o de ticks desde el servidor no solo a través de MQL5, sino también a través de la plataforma comercial. El acceso a los datos de los precios se amplía dentro del proceso de preparación para el lanzamiento de las funciones fuente de datos personalizados. Próximamente en la plataforma existirá la posibilidad de construir gráficos usando datos de precio propios, crear símbolos sintéticos y usar gráficos offline.

    Para descargar los datos, abra el menú de gestión de símbolos de la "Observación del mercado":


    Ahora en él estarán disponibles las pestañas: "Barras" y "Ticks". Elija el símbolo, el rango temporal y pulse "Solicitar". La plataforma solicitará todos los datos del servidor o los representará al instante, si ya han sido descargados. Los datos de precio guardados se pueden exportar a un archivo CSV.

  2. Añadida la muestra del tiempo con una precisión de milisegundos para las posiciones, transacciones y órdenes.



  3. En la ventana de comercio se ha corregido la notificación sobre la negativa a ejecutar la solicitud de cierre de una posición mediante una posición opuesta.

MQL5

  1. Corregido el funcionamiento de la función PositionSelect. En algunos casos no se seleccionaba la posición con el ticket menor.
  2. Corregido el funcionamiento de las funciones CopyTicks y CopyTicksRange al solicitar la historia de ticks a una gran profundidad.

Signals

  1. Corregido el error de copiado de señales al aumentar el tamaño de una posición ya existente. El error surgía en algunos casos en las cuentas con compensación.

Tester

  1. Corregido el procesamiento de las órdenes límite para los instrumentos bursátiles. Las órdenes colocadas mejor que las del mercado (con el precio de compra por debajo del precio del mercado, o con el precio de venta por encima del precio de mercado) se ejecutan sin deslizamiento. Las órdenes colocadas peor que las del mercado o la mismo nivel, se ejecutan justo después de colocarlas, al precio del mercado en ese momento.

Actualización de la documentación.

8 abril 2017
MetaTrader 5 Android build 1576: añadidas las posiciones a la historia comercial

Se ha añadido a MetaTrader 5 Android la representación de la historia comercial en forma de posiciones. Anteriormente, en la pestaña "Historia" se representaban solo las transacciones y órdenes de la historia, ahora es posible utilizar las posiciones para el análisis comercial. Para ello, todas las transacciones relacionadas con una posición se agrupan en un solo registro, donde se podrá ver:

  • La hora de apertura y cierre de la posición (definidas por la primera y última operación)
  • El volumen de la posición (si la posición está parcialmente cerrada, se muestra el volumen cerrado y el volumen original)
  • Los precios medios ponderados de apertura y cierre de la posición
  • El resultado financiero total de todas las transacciones relacionadas con la posición

30 marzo 2017
MetaTrader 5 iOS build 1547: historia comercial en forma de posiciones

Añadida la presentación de la historia comercial en forma de posiciones. Anteriormente, en la pestaña "Historia" se exhibían operaciones y órdenes, ahora en esta también se muestran las posiciones. La plataforma comercial reúne los datos de las operaciones relacionadas con una posición, y luego agrupa dichos datos en una única entrada. En esta entrada podrá ver:

  • La hora de apertura y cierre de la posición, definidas por la primera y última operación.
  • El volumen de la posición; si la posición está parcialmente cerrada, se muestra el volumen cerrado y el volumen original
  • El precio de apertura medio ponderado y el precio de cierre de la posición
  • El resultado financiero total de las transacciones relacionadas con la posición

previa12345678910111213