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

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

26 octubre 2018

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.