Build 216 Bug ? isConnected() gibt false zurück, aber Metatrader ist immer noch verbunden - Seite 3

 
edddim:

Könnte dies das Problem lösen...?

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);
  }

Danke Edddim!


Würden Sie Ihre Idee auch mit Worten erläutern?

 

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

Danke für die Erläuterung der Gründe, warum Sie in der Endlosschleife bleiben.

Ja, mir ist klar, dass es nicht Ihr Code ist - ich habe eine Reihe von Ereignissen vermutet, die Terminal veranlasst haben, in einen Codebereich zu gelangen, in dem es einen Code ausgeführt hat, der das Verbindungsproblem ausgelöst hat.

Da Sie angeben, dass Sie tatsächlich in der Schleife bleiben, ist es nicht möglich, dass Terminal dies nicht korrekt handhaben kann... wer weiß? aber wenn man diese Ideen nicht veröffentlicht, wird niemand auf die Idee kommen, die Wahrscheinlichkeit eines solchen Ereignisses in Betracht zu ziehen, oder?

Nochmals vielen Dank für Ihre Antwort.

Das Support-Team kann Ihr Problem nicht nachbilden - also ist das Querdenken manchmal von Nutzen...

;)

 

würden Sie Ihre Idee auch mit Worten erklären?

Die Idee ist zu überprüfen, ...etwas komplizierter dargestellt, weil es eingehende Tick mit der Zeit überprüfen wird. Mehr kann mit ArraySize(FILE) größer geprüft werden, und genauer wäre die Prüfung von MOVE[d] > MarketInfo(FILE[d],5) als Menge anderer möglicher Funktionen mit exakter spitzer Änderung. Eine einfachere Version der Prüfung, ob gerade verbunden sein könnte:

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

Die Situation ist, wenn es mehr als 1000 Sleep Pause wäre ungenau als Präzision, aber wenn weniger könnte in den Erhalt der gleichen Zeit wie die vorherige Ergebnis sein, weil die Zeit in Sekunden empfangen wird.

Die nächste Prüfung könnte sein, ob sich der Tick geändert hat, und dann die folgenden Operationen durchgeführt werden.

Das ist von meinem Standpunkt aus gesehen.

 
Vielen Dank für diese Idee, Edddim.

Aber leider löst dies das Problem nicht, da es ziemlich unbequem und nicht wirklich zuverlässig ist.

Außerdem wird geprüft, ob der Markt geöffnet ist und nicht die Verbindung zum Handelskonto (wenn ich Ihre Lösung verstanden habe).


Ich bitte Sie, MetaQuotes, sich mehr Mühe zu geben, um dieses Problem zu beheben, da es sich um ein kritisches Problem handelt und ich nicht der Einzige bin, der dieses Problem hat.

Aber bitte nehmen Sie mir meine Bitte nicht übel, wenn Sie bereits daran arbeiten.


Mit freundlichen Grüßen,


Daniel.

 

Heute habe ich ein Observer-Skript auf meinem virtuellen Server installiert, das den Status von IsConnected() von zwei MT4-Stationen anzeigt. Bei dem einen, MIG Investment, bleibt MT4 nach ein oder zwei kurzen Disconnects auf !isConnected(), obwohl er eigentlich verbunden ist.

Könnten Sie bitte, liebes MT4 Dev Team, ein größeres Test-Setup mit mehreren MT4-Stationen verschiedener Broker machen und den isConnected()-Status umkehren? Ich bin mir mehr als sicher, dass Sie das Problem reproduzieren können, wenn Sie sich etwas Mühe geben!

Die meisten der verfügbaren Skripte und EAs sind darauf angewiesen, dass IsConnected() den korrekten Verbindungsstatus zurückliefert, ein ständiger Neustart von MT4 ist nicht die Lösung, mit der ich zufrieden bin.

 

Noch einmal. Um dieses Problem zu lösen, sollten Sie einen einfachen Experten verwenden

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

KEIN SKRIPT ODER EA MIT ENDLOSSCHLEIFE!!!!!!!

Wenn Ihr Skript einen Verbindungsabbruch meldet, aber unser EA (siehe oben) schweigt, dann haben Sie ein globales Problem mit dem Internet (z.B. ein Problem mit der letzten Meile Ihres Internet-Providers)

Wenn EA "Alarm" ausgibt, dann haben wir ein Problem mit unserer Verbindungsroutine

 

Ja! Stringo antwortet wieder, vielen Dank.

Wie auch immer, dies ist, was es ist! Ich habe es mit dieser Art von einfachen schleifenlosen EAs/Skripten versucht.

Btw, ich bin definitiv sicher, dass ich kein Problem mit meinem Internet habe, da es auf meinem privaten Netzwerk und auf einem virtuellen Server getestet wird.

Die Sache ist, dass ich handeln kann und alles scheint und _ist_ ok, aber isConnected() gibt immer noch FALSE

 

Die Handelsoperation initialisiert ihre eigene Verbindung mit dem Handelsserver.

IsConnected() zeigt den Status der Pumpendatenverbindung an.

1. Ist der Verbindungsindikator (rechte untere Ecke) rot oder dunkel?

2. Mit welchem Broker sind Sie verbunden?

3. Welches Betriebssystem ist auf Ihrem virtuellen Server installiert?

 

danke für Ihre schnelle Antwort, hier meine Antworten:

1. Es ist grün-rot wie immer

2. MIG-Investitionen

3. Auf meinem virtuellen Server ist Windows Server 2003 installiert. Auf meinem privaten Desktop, der gelegentlich das gleiche Problem zeigt, ist WinXP installiert.

 
stringo:

Noch einmal. Um dieses Problem zu lösen, sollten Sie einen einfachen Experten verwenden

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

KEIN SKRIPT ODER EA MIT ENDLOSSCHLEIFE!!!!!!!

Wenn Ihr Skript einen Verbindungsabbruch meldet, aber unser EA (siehe oben) schweigt, dann haben Sie ein globales Problem mit dem Internet (z.B. ein Problem mit der letzten Meile Ihres Internet-Providers)

Wenn EA "Alarm" ausgibt, dann haben wir ein Problem mit unserer Verbindungsroutine

Ich habe Folgendes versucht:

void start()
{

if(IsConnected()) Print("Verbunden!");
if(!IsConnected()) Print("Alarm!!! Verbindung unterbrochen!");
}

Connected" wird gedruckt, wenn eine Verbindung besteht, aber wenn die Verbindung unterbrochen wird, ist der EA tot. Ich denke, der Grund dafür ist, dass es keine eingehenden Ticks mehr gibt, um den Code !IsConnected() auszulösen, und so wird eine verlorene Verbindung nie erkannt!!!