Build 216 bug ? isConnected() devuelve false pero metatrader sigue conectado - página 3

 
edddim:

¿Esto podría resolver el problema...?

string FILE[1];
int MOVE[1];
 
void init() { FILE[0]=Symbol(); }
 
int start()
  {
//---- check connection
   if ( !Connection() ) return(0);
//---- 
   return(0);
  }
 
bool Connection()
  {
   int d;
   bool connect;
   RefreshRates();
   for ( d=0; d<ArraySize(FILE); d++)
    {
     if ( MOVE[d] != MarketInfo(FILE[d],5) )
      {
       MOVE[d] = MarketInfo(FILE[d],5);
       /* if ( !connect ) */
       connect=1;
      }
    }
   return(connect);
  }

¡gracias edddim!


¿podrías explicar tu idea también con palabras?

 

the problem is not in my code it is in the IsConnected().

Gracias por la iluminación de sus razones para permanecer en el bucle infinito.

Sí, me doy cuenta de que no es su código - yo estaba postulando en cuanto a la serie de eventos que causaron Terminal para llegar a sí mismo en el área de código donde se ejecuta algún código que precipitó el problema de conexión.

Dado que usted afirma que efectivamente permanece en el bucle, entonces no es posible que Terminal no pueda manejar esto correctamente... ¿quién sabe? pero a menos que uno publique estas ideas nadie pensará en considerar la probabilidad de que esto ocurra, ¿sí?

De nuevo, gracias por su respuesta.

El equipo de soporte no puede emular tu problema - así que a veces el pensamiento lateral es de utilidad...

;)

 

¿podría explicar su idea en también con palabras?

La idea es que se compruebe, ...poco más complicado presentado porque se comprobará tick entrante con el tiempo. Más se puede comprobar con ArraySize(FILE) más grande, y más preciso sería comprobar MOVE[d] > MarketInfo(FILE[d],5) como conjunto de otras posibles funciones incluidas con el cambio apuntado exacto. Más simple versión de comprobar si sólo conectado podría ser:

int incomeTime = TimeCurrent();
Sleep(1000);
if ( incomeTime <= 0 ) return;
RefreshRates();
if ( incomeTime >= TimeCurrent() ) return;

La situación es si es más de 1000 Pausa de sueño sería inexacta como la precisión, pero si menos podría ser el resultado de recibir el mismo tiempo que el anterior, porque el tiempo recibido es en segundos.

La siguiente comprobación podría ser si se cambia el tick, que se hagan operaciones seguidas.

Esto es desde mi punto de vista.

 
Gracias por esta idea, Edddim.

Pero desafortunadamente, esto no resuelve el problema ya que es bastante inconveniente y no es realmente confiable.

Además, está comprobando si el mercado está abierto y no está comprobando la conexión con la cuenta de trading (si he entendido su solución).


Les pido amistosamente, MetaQuotes, que pongan un poco más de esfuerzo en arreglar esto ya que es un problema crítico y no soy el único que se encuentra con esto.

Sin embargo, por favor no se ofendan por mis peticiones si ya están trabajando en ello.


Saludos cordiales,


Daniel.

 

Hoy he instalado un script observador en mi Servidor Virtual que indica el estado de IsConnected() de dos estaciones MT4. Con una de ellas, MIG Investment, MT4 se queda en !isConnected() después de una o dos desconexiones cortas aunque realmente esté conectada.

¿Podríais, por favor, querido equipo de desarrollo de MT4, hacer una prueba más grande con varias estaciones MT4 de diferentes brokers y anular el estado de isConnected()? Estoy más que seguro de que podréis reproducir esto si os esforzáis un poco.

La mayoría de los scripts y EAs disponibles dependen de que IsConnected() devuelva el estado de conexión correcto, reiniciar MT4 todo el tiempo no es la solución que me gusta.

 

Una vez más. Para determinar este problema debe utilizar simple experto

void start()
  {
   if(!IsConnected()) Print("Alarm!!! Connection is lost!");
  }

¡¡¡¡¡¡¡NO UN SCRIPT O EA CON UN BUCLE INTERMINABLE!!!!!!!

Si su script informa de la pérdida de conexión, pero nuestro EA (ver arriba) mantiene el silencio, entonces usted tiene un problema global con Internet (por ejemplo, un problema con la última milla de su proveedor de Internet)

Si el EA imprime "Alarma" entonces tenemos un problema con nuestra rutina de conexión

 

¡Sí! Stringo responde de nuevo, muchas gracias.

¡Sin embargo, esto es lo que es! Lo he probado con este tipo de EAs/scripts simples sin bucle.

Btw, estoy definitivamente positivo que no tengo un problema con mi internet ya que está probado en mi red privada y en un servidor virtual.

El caso es que puedo operar y todo parece y _está_ bien pero isConnected() sigue devolviendo FALSE

 

La operación comercial inicializa su propia conexión con el servidor comercial.

IsConnected() muestra el estado de conexión de los datos de bombeo.

1. ¿Es el indicador de conexión (esquina inferior derecha) rojo u oscuro?

2. ¿A qué corredor está conectado?

3. ¿Qué sistema operativo está instalado en su servidor virtual?

 

gracias por su rápida respuesta, aquí mis respuestas:

1. Es verde-rojo como siempre

2. Inversiones MIG

3. En mi servidor virtual está instalado Windows Server 2003. En el escritorio de mi casa que ocasionalmente muestra el mismo problema WinXP.

 
stringo:

Una vez más. Para determinar este problema debe utilizar simple experto

void start()
  {
   if(!IsConnected()) Print("Alarm!!! Connection is lost!");
  }

¡¡¡¡¡¡¡NO UN SCRIPT O EA CON UN BUCLE INTERMINABLE!!!!!!!

Si su script informa de la pérdida de conexión, pero nuestro EA (ver arriba) mantiene el silencio, entonces usted tiene un problema global con Internet (por ejemplo, un problema con la última milla de su proveedor de Internet)

Si el EA imprime "Alarma", entonces tenemos un problema con nuestra rutina de conexión

He probado lo siguiente:

void start()
{

if(IsConnected()) Print("¡C onectado!");
if(!IsConnected()) Print("¡Alarma! ¡Se ha perdido la conexión!");
}

Conectado se imprime cuando hay conexión pero cuando se pierde la conexión el EA se queda muerto. Creo que la razón es porque no hay más ticks entrantes para activar el código !IsConnected() y por lo tanto nunca detectará una conexión perdida!!!