IsConnected() - página 3

 

Lo siento, pero por qué no debería funcionar:

int start()

{

    while ( !IsStopped() )
    {
        IsConnectedBefore = IsConnectedNow;
        IsConnectedNow = IsConnected();
      ....

     }

}   

Así que mi EA está siempre en el bucle while y no necesita ningún tick.

 

Todo lo relacionado con PostMessageA() se publicó sólo como respuesta a la frase "llamar a start() desde init()" que aparece anteriormente en este hilo. No podía dejar esto sin comentar. "llamar a start() desde init()" es sencillamente erróneo a muchos niveles y por lo tanto tenía que comentarlo y también proporcionar una solución adecuada para lograr lo mismo, es decir, forzar una llamada de start() desde dentro de init() incluso en los fines de semana.


Para el problema de iniciar MT4 en estado de desconexión no da solución. Aunque tampoco entiendo cuál puede ser el caso de uso de esto, ya que es la conexión la que va y viene mientras que el propio metatrader debería mantenerse fácilmente en funcionamiento 24/7 sin interrupción. E incluso cuando se reinicia en el fin de semana, con el PostMessageA() en init() se reanudará inmediatamente el bucle en start() tan pronto como la conexión vuelve después de la reanudación, incluso sin una garrapata y luego se mantendrá de nuevo en funcionamiento para siempre hasta el próximo (accidental) reinicio.

 
sunshineh:

Lo siento, pero por qué no debería funcionar:

Así que mi EA está siempre en el bucle while y no necesita ningún tick.


sip, Porque no reiniciaste la terminal mientras no tienes conexión a internet, pero si reinicias la terminal mientras no tienes conexión a internet el EA no entra en el bucle sin un tick, hagas lo que hagas, aunque uses PostMessageA() o llames a Start () desde init(), la única forma de hacerlo es con un script, porque los script se ejecutan Independientemente de si hay tick o no
 

De todas formas gracias a todos por intentar ayudar. Decidí ensuciarme un poco las manos y ejecutar un programa externo para ejecutar el script, fin de la historia.
De todos modos, la función IsConnected() Todavía me hace reír, Si una cosa tan simple que no cubre

 
7bit:

Todo lo relacionado con PostMessageA() se publicó sólo como respuesta a la frase "llamar a start() desde init()" que aparece anteriormente en este hilo. No podía dejar esto sin comentar. "llamar a start() desde init()" es sencillamente erróneo a muchos niveles y por lo tanto tenía que comentarlo y también proporcionar una solución adecuada para lograr lo mismo, es decir, forzar una llamada a start() desde dentro de init() incluso en los fines de semana.


Para el problema de iniciar MT4 en estado de desconexión no da solución. Aunque tampoco entiendo cuál puede ser el caso de uso de esto, ya que es la conexión la que va y viene mientras que metatrader en sí debería mantenerse fácilmente en funcionamiento 24/7 sin interrupción. E incluso cuando se reinicia en el fin de semana, con el PostMessageA() en init() se reanudará inmediatamente el bucle en start() tan pronto como la conexión vuelve después de la reanudación, incluso sin una garrapata y luego se mantendrá de nuevo en funcionamiento para siempre hasta el próximo (accidental) reinicio.


Gracias por tu interjección 7Bit, es útil conocer mejores métodos, he estado ejecutando un EA con éxito como he descrito arriba en un intento de resolver un problema que me estaba causando problemas de significancia. El terminal podía perder regularmente la conexión pero por una razón desconocida no la recuperaba. Me llevó a volver a escanear manualmente los servidores en la terminal antes de que se volviera a conectar. Inicialmente pensé que era una casualidad de tiempo, pero demasiado a menudo para ser una casualidad, podría esperar una hora, no recuperar la conexión y luego la instancia que hizo clic en volver a escanear, se volvería a conectar. Mi solución fue probar continuamente el estado de la conexión... si perdía la conexión le daba 5 minutos para reconectarse gritaba a los cuatro vientos en alers, emails y logs que estaba pasando y luego cerraba el terminal y reiniciaba. Eso funcionó en la mayoría de las ocasiones. De vez en cuando, había un problema legítimo de conexión y como el EA no se inicializa sin conexión estoy atrapado en un agujero. He buscado métodos para resolver esto, todos los cuales son métodos fuera de MT4 y por lo tanto fuera de mis capacidades de TI actuales. Afortunadamente, he cambiado de broker y no he tenido ningún problema con mi actual proveedor... así que trabajar en esto más es bajo en la lista de prioridades.

Pero puede ocurrir que se pierda la conexión y que MT4 no se vuelva a conectar cuando la conexión sí está disponible. Un reinicio de la terminal no pone en fase mis EA's, pero sentarse sin conexión durante una hora sí.

V

 
Viffer:

Afortunadamente, he cambiado de corredor y no he tenido ningún problema con mi actual proveedor... así que trabajar en esto es algo que no está en la lista de prioridades.

No he visto esto con mi corredor todavía, así que realmente podría suceder sólo con algunos corredores. La conexión se pierde a veces durante unos segundos una o dos veces al día, pero siempre se reconecta inmediatamente.


Para crear rápidamente una aplicación externa que pueda monitorizar y controlar de forma remota otra aplicación de Windows (pulsando botones, comendando menús, etc.) recomiendo AutoIT. Es un lenguaje de scripting fácil de aprender, como el BASIC, que está muy centrado en este tipo de cosas.

 
7bit:

No he visto esto con mi corredor todavía, por lo que realmente podría suceder sólo con algunos corredores. La conexión se pierde a veces durante unos segundos una o dos veces al día, pero siempre se reconecta inmediatamente.


Para crear rápidamente una aplicación externa que pueda monitorizar y controlar de forma remota otra aplicación de Windows (pulsando botones, comendando menús, etc.) recomiendo AutoIT. Es un lenguaje de scripting fácil de aprender como el BASIC que está muy centrado en este tipo de cosas.

Gracias por eso, voy a buscarlo

V

 
qjol:

la función IsConnected() Todavía me hace reír, si una cosa tan simple que no cubre

Pensé que el problema era que MT4 retrasa init() después de un reinicio hasta que esté completamente conectado?


¿Qué tiene que ver esto de repente con IsConnected()? IsConnected() parece funcionar como se pretende. Devuelve true cuando está conectado y false cuando está desconectado. No veo qué tiene de risible eso.

 
7bit:

Pensé que el problema era que MT4 retrasa init() después de un reinicio hasta que está completamente conectado?


¿Qué tiene que ver esto de repente con IsConnected()? IsConnected() parece funcionar como se pretende. Devuelve true cuando está conectado y false cuando está desconectado. No veo qué tiene de risible eso.


porque

if (!IsConnected()) debería devolver false & Mientras no se produzca un nuevo tick IsConnected() no se puede comprobar Por eso me hace gracia

 
qjol:

Mientras no llegue un nuevo tick no se puede comprobar IsConnected() Por eso me hace gracia

Se puede comprobar, sólo hay que ejecutar la comprobación en un bucle infinito. cómo iniciar este bucle al arrancar el terminal durante un corte de conexión es un problema completamente distinto. Una vez que tengas tu bucle en marcha hará lo que se espera.

Tu problema no tiene nada que ver con la función IsConnected(). Con el mismo argumento también podrías quejarte de Print() o Alert() o cualquier otra función que no puedas llamar porque no pudiste iniciar todo el código en primer lugar por alguna razón completamente diferente.

Razón de la queja: