Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 850
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
Korrigieren Sie den Kurvenindikator. Eine Linie kann nur bei vollständiger Neuberechnung gezeichnet werden, was durch einen Befehl im Kontextmenü geschieht.
Es gibt auch eine in mql4.
Ich danke Ihnen.
Hat es mit einer Krücke geschafft). Ich musste den Indikator nach dem manuellen Ziehen einer vertikalen Linie aktualisieren, wofür er sich die Zeit nimmt. Ich habe die Funktion des Ziehens eines Objekts verwendet und die Funktion des Wechselns von TF mit einer Rückkehr zum ursprünglichen Objekt hinzugefügt. Aber aus irgendeinem Grund verzögert sich die Aktualisierung um mehrere Sekunden. Die Funktion der TF-Umschaltung ist zu langsam, ich verstehe sie nicht.
Diese Funktion ist asynchron. Sie gibt nur das Ergebnis des Befehls in der Ereigniswarteschlange zurück.
Um sofort zu aktualisieren, müssen Sie den Befehl ChartRedraw() nach dem Befehl Chart Switch ausführen
Das ist natürlich ein falscher Ansatz. Wenn Sie das Diagramm erst nach Abschluss der Linienverschiebung aktualisieren wollen, sollte die Schleife der Indikator-Neuberechnung nicht von OnCalculate(), sondern von ChartEvent() aufgerufen werden - die Verschiebung der Linie wird abgefangen - die Funktion der Indikator-Neuberechnung wird aufgerufen, die den gesamten Zyklus der Linien-Neuberechnung mit den neuen Daten durchlaufen wird (die Linie wird für einige Daten benötigt, nicht wahr?).
Oder der Indikator ist einfach nicht richtig gemacht und aktualisiert den Null-Balken nicht auf die aktuellen Daten, und Sie haben ihn gekickt?
Kann jemand helfen, EA-Code auf MT5 zu beheben?
Ich habe die Handbücher gelesen, aber beim Kompilieren komme ich nicht über 2 Lacke hinaus.
Deklaration von "xxxx" verdeckt globale Deklaration
и
möglicher Datenverlust aufgrund von Typumwandlung
Ich habe einfach dummerweise die Namen der globalen Variablen korrigiert und die Typen übereinstimmen lassen.
Das sind 10.000.000, die Sie verlangen können - für die Überwindung Ihrer Faulheit.
Ich habe einfach die Namen der globalen Variablen korrigiert und die Typen angepasst.
Du schuldest mir 10 000 000 für die Überwindung deiner Faulheit.
Ich danke Ihnen vielmals.
Ich schäme mich, zu zeigen, wie ich es repariert habe)
int CountTrades(long PositionID1)
Diese Funktion ist asynchron. Sie gibt nur das Ergebnis des Befehls in der Ereigniswarteschlange zurück.
Um sofort zu aktualisieren, müssen Sie den Befehl ChartRedraw() nach dem Befehl zum Umschalten des Diagramms ausführen
Das ist natürlich ein falscher Ansatz. Wenn Sie das Diagramm erst nach Abschluss der Linienverschiebung aktualisieren müssen, sollte die Schleife der Indikator-Neuberechnung nicht aus OnCalculate(), sondern aus ChartEvent() aufgerufen werden - die Verschiebung der Linie wird abgefangen - die Funktion der Indikator-Neuberechnung wird aufgerufen, die den vollen Zyklus der Neuberechnung der Linie mit den neuen Daten durchführt (die Linie wird für einige Daten benötigt, nicht wahr?).
Oder vielleicht wurde der Indikator einfach falsch gemacht und er aktualisiert den Null-Balken nicht mit den aktuellen Daten und Sie haben es vermasselt?
Der Indikator zählt die letzten nicht berechneten Balken. Und nach dem Ziehen der Vertikalen sollte sie nach dem Lesen der neuen vertikalen Zeit vollständig neu berechnet werden. Ich habe hier darüber geschrieben und Screenshots hinzugefügt, die zeigen, wie es funktioniert.
Danke, ich werde versuchen, Ihre Idee umzusetzen. Ich bin im Allgemeinen nicht sehr gut mit Indikatoren, ich habe mich hauptsächlich mit Expert Advisors beschäftigt.
Diese Funktion ist asynchron. Sie gibt nur das Ergebnis des Befehls in der Ereigniswarteschlange zurück.
Um sofort zu aktualisieren, müssen Sie den Befehl ChartRedraw() nach dem Befehl Chart Switch ausführen
Das ist natürlich ein falscher Ansatz. Wenn Sie das Diagramm erst nach Abschluss der Linienverschiebung aktualisieren möchten, sollte die Schleife der Indikator-Neuberechnung nicht von OnCalculate(), sondern von ChartEvent() aufgerufen werden - Verschiebung der Linie - Aufruf der Indikator-Neuberechnungsfunktion, die den gesamten Zyklus der Linien-Neuberechnung mit den neuen Daten durchläuft (die Linie wird für einige Daten benötigt, richtig?).
Oder vielleicht ist der Indikator nur nicht richtig gemacht und nicht aktualisieren die Null-Bar auf die aktuellen Daten, und Sie trat es?
Ich habe Ihren Rat befolgt. Alles hat perfekt funktioniert. Jetzt wird der Indikator sofort nach dem Ziehen komplett neu gezeichnet. Nochmals vielen Dank.
Ich habe Ihren Rat befolgt. Alles hat perfekt funktioniert. Jetzt wird der Indikator sofort nach dem Ziehen komplett neu gezeichnet. Nochmals vielen Dank.
Bitte sehr. Aber es sollte in OnCalculate() gezeichnet werden, oder nicht?
Wenn der Indikator auf das Diagramm gezogen wird, nimmt er keine Änderungen an der Linie wahr, aber er sollte die Linie zeichnen.
Bitte sehr. Aber es sollte in OnCalculate() zeichnen, oder nicht?
Wenn Sie es auf ein Diagramm anwenden, ist es sich keiner Bewegung der Linie bewusst, aber es sollte die Linie zeichnen.
Wenn der Indikator an das Diagramm angehängt wird, wird in init() eine vertikale Linie erstellt, für die zunächst eine Zeit festgelegt wird, z. B. Time[10]. Ich habe den Code inOnChartEvent() und OnCalculate() dupliziert. Nur in OnChartEvent ich von allen Bars neu berechnet.
Bei der Installation des Indikators auf dem Chart in init() wird eine vertikale Linie erstellt, die zunächst auf eine bestimmte Zeit, z. B. Time[10], gesetzt wird. Ich habe den Code in OnChartEvent() und OnCalculate() dupliziert. Nur in OnChartEvent ich von allen Bars neu berechnet.
Wäre es nicht besser, z.B. die Funktion Refresh() mit den erforderlichen formalen Parametern zu erstellen und sie bei Bedarf aufzurufen?
Und übrigens, wenn Sie die rates_total im Indikator jenseits von OnCalculate() mit Bars() mit einem Datumsbereich abrufen, können Sie einen Hänger im Indikator erwischen:
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Analog von iBarShift
Nikolai Semko, 2018.04.05 23:47
So weit diese Variante, aber ich möchte sie jetzt hinzufügen, um diesen Fehler der Bars-Funktion zu umgehen, über den ich bereits an servicedesk geschrieben habe.
Der Kern dieses Fehlers ist, dass wenn in der Funktion Bars sowohlstart_time als auchstop_time innerhalb eines Balkens liegen oder in der Zukunft (rechts vom Null-Balken), dann bleibt diese Funktion für mehr als 10 Sekunden hängen.
Vielleicht mache ich später eine richtige, schnellere, aber umständlichere Version.