Comprobación de las conexiones de red

Como sabe, la plataforma MetaTrader 5 es un sistema distribuido que incluye varios enlaces. Además del terminal de cliente y del servidor broker, incluye la comunidad MQL5, Market y servicios en la nube, entre otras muchas cosas. De hecho, la parte cliente también está distribuida, y consta de un terminal y agentes de prueba que pueden desplegarse en varios ordenadores de una red local. En este caso, la conexión entre los enlaces puede romperse por una razón u otra. Aunque la infraestructura de MetaTrader 5 intenta restaurar automáticamente su funcionalidad, no siempre es posible hacerlo rápidamente.

Por lo tanto, en los programas MQL hay que tener en cuenta la posibilidad de una pérdida de conexión. La API de MQL5 le permite controlar las conexiones más importantes: con el servidor de trading y con la comunidad MQL5. En TerminalInfoInteger están disponibles las siguientes propiedades:

Identificador

Descripción

TERMINAL_CONNECTED

Conexión con el servidor de trading

TERMINAL_PING_LAST

El último ping conocido al servidor de trading en microsegundos

TERMINAL_COMMUNITY_ACCOUNT

Disponibilidad de los datos de autorización MQL5.community en el terminal

TERMINAL_COMMUNITY_CONNECTION

Conexión con MQL5.community

TERMINAL_MQID

Disponibilidad de MetaQuotes ID para el envío de notificaciones push

Todas las propiedades excepto TERMINAL_PING_LAST son banderas booleanas. TERMINAL_PING_LAST contiene un valor de tipo int.

Además de la conexión, un programa MQL a menudo necesita asegurarse de que los datos que tiene están actualizados. En concreto, la bandera TERMINAL_CONNECTED comprobada no significa todavía que las cotizaciones que le interesan estén sincronizadas con el servidor. Para ello, debe comprobar adicionalmente SymbolIsSynchronized o SeriesInfoInteger(..., SERIES_SYNCHRONIZED). Estas características se tratarán en el capítulo sobre series temporales.

La función TerminalInfoDouble admite otra propiedad interesante: TERMINAL_RETRANSMISSION. Denota el porcentaje de paquetes de red reenviados en el protocolo TCP/IP para todas las aplicaciones y servicios en ejecución en este ordenador. Incluso en la red más rápida y mejor configurada, a veces se producen pérdidas de paquetes y, como resultado, no habrá confirmación de la entrega del paquete entre el destinatario y el remitente. En estos casos se vuelve a enviar el paquete perdido. El propio terminal no cuenta el indicador TERMINAL_RETRANSMISSION, sino que lo solicita una vez por minuto en el sistema operativo.

Un valor alto de esta métrica puede indicar problemas externos (conexión a Internet, su proveedor, red local o problemas informáticos), que pueden empeorar la calidad de la conexión del terminal.

Si existe una conexión confirmada con la comunidad (TERMINAL_COMMUNITY_CONNECTION), un programa MQL puede consultar el saldo actual del usuario llamando a TerminalInfoDouble(TERMINAL_COMMUNITY_BALANCE). Esto le permite utilizar una suscripción automatizada a señales de trading de pago (la documentación de la API está disponible en la página web mql5.com ).

Comprobemos las propiedades de la lista utilizando el script EnvConnection.mq5.

void OnStart()
{
   PRTF(TerminalInfoInteger(TERMINAL_CONNECTED));
   PRTF(TerminalInfoInteger(TERMINAL_PING_LAST));
   PRTF(TerminalInfoInteger(TERMINAL_COMMUNITY_ACCOUNT));
   PRTF(TerminalInfoInteger(TERMINAL_COMMUNITY_CONNECTION));
   PRTF(TerminalInfoInteger(TERMINAL_MQID));
   PRTF(TerminalInfoDouble(TERMINAL_RETRANSMISSION));
   PRTF(TerminalInfoDouble(TERMINAL_COMMUNITY_BALANCE));
}

He aquí un ejemplo de registro (los valores coincidirán con su configuración).

TerminalInfoInteger(TERMINAL_CONNECTED)=1 / ok
TerminalInfoInteger(TERMINAL_PING_LAST)=49082 / ok
TerminalInfoInteger(TERMINAL_COMMUNITY_ACCOUNT)=0 / ok
TerminalInfoInteger(TERMINAL_COMMUNITY_CONNECTION)=0 / ok
TerminalInfoInteger(TERMINAL_MQID)=0 / ok
TerminalInfoDouble(TERMINAL_RETRANSMISSION)=0.0 / ok
TerminalInfoDouble(TERMINAL_COMMUNITY_BALANCE)=0.0 / ok