TimeCurrent() und iTime() Fehler/Problem - Seite 2

 
RaptorUK:
Ich denke, das Problem besteht darin, dass der erste Aufruf von start() für einen Indikator möglicherweise nicht das Ergebnis eines neuen Ticks ist ... in diesem Fall meldet TimeCurrent() die falsche Zeit. Ich habe das nicht überprüft...

In diesem Fall würde ich den ersten Tick einfach ignorieren ... und ab Tick 2 normal weitermachen.

Ja, das ist es, was ich meine.
 
Es ist ein Indikator, warum kümmern Sie sich, was TimeCurrent ist. Tun Sie Ihre for Indikator gezählt Schleife und zeichnen auf den Balken. Schauen Sie nicht auf TimeCurrent, schauen Sie nicht auf Bid.
 
Ich zeichne bestimmte Zeiten auf einem Diagramm, die mit der GMT übereinstimmen, daher ist es sehr wichtig, den Offset zwischen der MT4-Serverzeit und der GMT zu ermitteln.
 

Paul_B:
I'm plotting certain times on a chart which match to GMT, so it matters a great deal when trying to get the offset between MT4 server time and GMT.

<g> Ich glaube, Sie sind mit der Kultur dieses Forums noch nicht ganz auf der Höhe. Die Reihenfolge der Antworten von Moderatoren und anderen langjährigen Benutzern des Forums ist immer "Sie machen etwas falsch", gefolgt von "Warum wollen Sie das tun?", wenn sich herausstellt, dass Sie nichts falsch machen.

Wenn ich Sie wäre, würde ich die Aufrufe von start() einfach beenden, wenn IsConnected() falsch ist. Oder Sie könnten einen Tick-Count in einer statischen Variable verwalten und Tick #1 ignorieren, aber das würde den Start unter normalen Umständen unnötig verzögern.

 
Vielen Dank für die Eingabe cyclops993, ich habe es derzeit funktioniert, aber was ich habe, scheint nicht wie eine ideale Lösung oder besonders robust. Ich werde IsConnected() ein wenig weiter zu erkunden.
 
Paul_B: Ich zeichne bestimmte Zeiten auf einem Diagramm, die mit GMT übereinstimmen, so dass es eine große Rolle spielt, wenn ich versuche, den Offset zwischen MT4-Serverzeit und GMT zu erhalten.
Jetzt verstehen wir das Warum. (Warum haben Sie nicht erklären, sich auf die OP?) Genau wie mein Code
      nextAutoUpdate = timeSrv + HR2400;
      if(Srvr_To_UTC_Auto) if(
         IsDllsAllowed()){                            // Complained @ init
         int      srvrToUTC         = LocalTimeToUTC() - TimeCurrent();
         double   nearestHalfHour   = MathRound(srvrToUTC / 1800.);
         Srvr_To_UTC_Hours          = nearestHalfHour / 2.; // Update external
      }

Ich schließe mich dem Vorschlag von RaptorUK an, für einen Indikator den ersten Tick zu ignorieren und alle Balken beim zweiten Tick zu aktualisieren.

Es ist auch nicht völlig unerwartet. Da Indikatoren nicht schlafen können, wenn ein EA einen Indikator in seiner Init über iCustom lädt, kann der Aufruf nicht einen Pufferwert zurückgeben, bis der Indikator seine Init UND Start läuft.

 
Paul_B:
Vielen Dank für den Input cyclops993, ich habe es derzeit arbeiten, aber was ich habe, scheint nicht wie eine ideale Lösung oder besonders robust. Ich werde IsConnected() ein wenig weiter zu erkunden.

Ich glaube nicht, dass Sie eine große Wahl haben. MT4 generiert einen Dummy-Aufruf von start(), damit die Indikatoren auf Offline-Charts angezeigt werden, und weil es generell möchte, dass die Indikatoren (wieder) auf den Charts erscheinen, sobald MT4 geladen ist, ohne auf den Aufbau einer Verbindung zu warten.

Wenn Sie die Gewissheit erhöhen wollen, dass eine ordnungsgemäße Verbindung und ein gültiges TimeCurrent() vorhanden sind, können Sie auch nach AccountNumber() != 0 und AccountBalance() > 0 suchen. Oder Sie könnten einfach auf den zweiten Tick warten, was bei Symbolen mit geringer Liquidität zu Verzögerungen von mehreren Sekunden führen würde.

 

Danke Leute, ich werde den Indikator so programmieren, dass er wartet, bis der zweite Tick empfangen wird.

Übrigens, gerade erforscht die IsConnected() Möglichkeit, aber ich war immer noch immer die "falsche" TimeCurrent(), auch wenn IsConnected() als wahr gemeldet.

 
cyclops993:

<g> Ich glaube, Sie sind mit der Kultur dieses Forums noch nicht ganz auf der Höhe. Die Reihenfolge der Antworten von Moderatoren und anderen langjährigen Benutzern des Forums ist immer "Sie machen etwas falsch", gefolgt von "Warum wollen Sie das tun?", wenn sich herausstellt, dass Sie nichts falsch machen.

Wenn ich Sie wäre, würde ich die Aufrufe von start() einfach beenden, wenn IsConnected() falsch ist. Oder Sie könnten einen Tick-Count in einer statischen Variable verwalten und Tick #1 ignorieren, aber das würde den Start unter normalen Umständen unnötig verzögern.

Wenn ein Benutzer keinen Testcode zur Verfügung stellt, um das Problem zu demonstrieren, ist es etwas schwierig, konkrete Hilfe zu leisten, und oft ist die beste Annahme, die gemacht werden kann, die eines Fehlers im Code . . vielleicht sollten Sie einfach die Leitung übernehmen und alle Fragen und Hilfeersuchen beantworten. Damit wären alle Probleme gelöst, und Sie müssten sich nicht über diejenigen lustig machen, die nur zu helfen versuchen. . .
 
RaptorUK:
Wenn ein Benutzer keinen Testcode zur Verfügung stellt, um das Problem zu demonstrieren [...]

Es war nichts falsch oder fehlte im OP. Es war klar, dass Paul_B davon ausging, dass start() nur als Reaktion auf neue Ticks aufgerufen wird, was aus der MT4-Dokumentation durchaus nachvollziehbar ist.(Warum er TimeCurrent() überprüfen wollte, spielt keine Rolle und geht uns eigentlich nichts an.)

Ihre Antwort war im Grunde eine nette Version von RTFM, trotz der Tatsache, dass das Handbuch in diesem Bereich eindeutig mangelhaft ist [was, wie ich betonen möchte, ungewöhnlich ist; die Qualität der MT4-Dokumentation ist ziemlich gut]. Angevoyageur reagierte darauf mit der Bezeichnung "Aufregung", was zu einem Muster pathologisch empfindlicher Reaktionen auf jede noch so milde Kritik an MT4 zu gehören scheint. WHRoeder fügte dann hinzu: "Das wollen Sie nicht tun", gefolgt vom Kopieren und Einfügen eines Codes, der eindeutig irrelevant war, weil Paul_B eindeutig bereits wusste, wie man einen GMT-Offset berechnet.