Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
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.
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.
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.
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.
<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 [...]
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.