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

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

5 octubre 2019

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.