![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Danke für den Rat, hier ist eine sehr einfache Version meines Codes, das ist nicht mein richtiger Code, aber ich hoffe, dass dies klarer sein wird.
wie ich schon sagte, ist dies nicht der echte Code, das Finden von Mustern usw. ist nur ein Beispiel. der Grund, warum ich diesen Thread eröffnet habe, ist dieFunktion DetectExistingPattern()
Ich habe Ihnen bereits einen Beispielcode gegeben, wie man den Code beim ersten Aufruf von OnTick() ausführt, also aktualisieren Sie jetzt Ihren Codebeitrag entsprechend, so dass Ihr DetectExistingPattern() beim ersten Aufruf von OnTick() und nicht bei OnInit() ausgeführt wird.
Sie können auch nicht "Bars" verwenden, um einen neuen Bar zu erkennen. Das ist nicht korrekt. Sie sollten entweder "Time[0]" oder "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )" verwenden. Hier ist ein Beispiel:
Ich habe Ihnen bereits einen Beispielcode gegeben, wie Sie den Code beim ersten Aufruf von OnTick() ausführen können. Aktualisieren Sie nun Ihren Code entsprechend, so dass Ihr DetectExistingPattern() beim ersten Aufruf von OnTick() und nicht bei OnInit() ausgeführt wird.
Sie können auch nicht "Bars" verwenden, um einen neuen Bar zu erkennen. Das ist nicht korrekt. Sie sollten entweder "Time[0]" oder "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )" verwenden. Hier ist ein Beispiel:
Danke @FMIC, ich habe den einfachen Code hinzugefügt, weil @jjc danach gefragt hat. Übrigens habe ich die Verwendung von Balken von Anfang an gelernt, da ich mich erinnere, dass alle so schreiben, also habe ich es auch getan. Warum ist das falsch? Kann es unsachgemäß funktionieren?
ps: Ich benutze Metatrader 4, also ist es mql4 richtig ?
Danke @FMIC, ich habe den einfachen Code hinzugefügt, weil @jjc danach gefragt hat. Übrigens habe ich die Verwendung von Balken von Anfang an gelernt, wenn ich mich recht erinnere, hat jeder so geschrieben, also habe ich es auch getan. Warum ist das falsch? Kann es unsachgemäß funktionieren?
ps: Ich benutze Metatrader 4, also ist es mql4 richtig ?
FMIC:
No! On the forum, you will find that many users have shown that the "Bars" method is very old and unreliable because the number of bars can be changed by the "Options" for charts or it can be constant when the maximum number of bars per chart has been reached. So, it is wrong to use it. Use either "Time[0]" or if you want it to be compatible with MQL5 as well, use "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )". Please see my example.
wie ich sagte, dies ist nicht der echte Code, finden Muster usw. ist nur ein Beispiel. der Grund, warum ich diesen Thread eröffnet istDetectExistingPattern() Funktion
Um auf Ihre ursprüngliche Frage zurückzukommen... In diesem Beispiel wäre eine Möglichkeit, dass Sie Ihre CheckTrendPattern()-Funktion so ändern, dass sie bei einem bestimmten Balken beginnen kann. Anstatt den festen Bereich von Balken 1 bis 10 zu verwenden, verwenden Sie stattdessen einen Offset von 1 bis 10 von einem bestimmten Startpunkt.
Wenn es keine bestehende Order gibt und Sie prüfen wollen, ob das Muster aktuell erfüllt ist, verwenden Sie CheckTrendPattern(0) anstelle von CheckTrendPattern().
Wenn Sie beim Starten eine bestehende Order haben, können Sie wie folgt nach dem Muster suchen, das diese Order ausgelöst hat. Dies ist derselbe Vorschlag, den ich zu Beginn gemacht habe: Sie holen sich den Bar-Index, der der Eröffnungszeit der bestehenden Order entspricht, und beginnen von dort aus mit der Rückwärtssuche.
Wie FMIC jedoch sagt, ist es besser, diese Prüfung beim ersten Aufruf von OnTick() vorzunehmen als bei OnInit(). Meine eigenen Gründe für diesen Vorschlag haben nichts mit der "Verzögerung der Initialisierung" zu tun. Vielmehr würde ich mir Sorgen machen, dass Sie beim Neustart von MT4, wenn der EA bereits an einen Chart angehängt ist, noch nicht 100%ig zuverlässig über eine Orderliste des Brokers oder eine aktualisierte Balkenhistorie verfügen.
Eine weitere Überlegung, die Sie vielleicht in Betracht ziehen sollten, ist das folgende Szenario, das sich innerhalb der Zeitspanne eines einzigen Balkens abspielt:
Um dies zu verhindern, sollten Sie nicht nur offene, sondern auch geschlossene Orders überprüfen.
Um auf Ihre ursprüngliche Frage zurückzukommen... In diesem Beispiel wäre eine Möglichkeit, dass Sie Ihre CheckTrendPattern()-Funktion so ändern, dass sie bei einem bestimmten Balken beginnen kann. Anstatt den festen Bereich von Balken 1 bis 10 zu verwenden, verwenden Sie stattdessen einen Offset von 1 bis 10 von einem bestimmten Startpunkt.
Wenn es keine bestehende Order gibt und Sie prüfen wollen, ob das Muster aktuell erfüllt ist, verwenden Sie CheckTrendPattern(0) anstelle von CheckTrendPattern().
Wenn Sie beim Starten eine bestehende Order haben, können Sie wie folgt nach dem Muster suchen, das diese Order ausgelöst hat. Dies ist derselbe Vorschlag, den ich zu Beginn gemacht habe: Sie holen sich den Bar-Index, der dem Eröffnungszeitpunkt der bestehenden Order entspricht, und beginnen von dort aus mit der Rückwärtssuche. Wie FMIC jedoch sagt, ist es besser, diese Prüfung beim ersten Aufruf von OnTick() und nicht in OnInit() durchzuführen. Meine eigenen Gründe für diesen Vorschlag haben nichts mit der "Verzögerung der Initialisierung" zu tun. Vielmehr würde ich mir Sorgen machen, dass Sie beim Neustart von MT4, wenn der EA bereits an einen Chart angehängt ist, noch nicht 100%ig zuverlässig über eine Orderliste des Brokers oder eine aktualisierte Balkenhistorie verfügen.
Eine weitere Überlegung, die Sie vielleicht in Betracht ziehen sollten, ist das folgende Szenario, das sich innerhalb der Zeitspanne eines einzigen Balkens abspielt:
Jetzt ist es klarer, warum ich es in OnInit tun sollte, Zuverlässigkeit ist natürlich der wichtigste Punkt und ich habe nicht über Ihre Überlegung Warnung denken. dieser Teil ist wirklich wichtig, ich könnte redundante Aufträge öffnen, vielleicht selten, aber möglich. Ich muss das in irgendeiner Weise handhaben. wirklich vielen Dank.
@WHRoeder Ihr neues Bar Check Control ist so einfach und schön. Ich habe Ihre Methode zu meinem Code hinzugefügt, vielen Dank.
Hallo zusammen,
wie @FMIC beraten, ich schreibe und Indikator, der mein Muster findet, geben ein Signal und ein paar mehr Daten, die für meine Aufträge verwenden (ich könnte mehr als eine Bestellung zu unterschiedlichen Preisen öffnen). Jetzt möchte ich es in meinem EA verwenden, aber ich habe eine Frage, ich brauche Ihre Erfahrung tatsächlich. Wenn ich ein Signal von meinem Indikator erhalte, eröffne ich eine Order oder setze eine Order (Verkaufslimit oder Kauflimit usw.), wenn mein mt4 aus irgendeinem Grund abstürzt, wenn ich es wieder öffne, wie kann ich herausfinden, dass die geöffnete Order zu welchem Signal in meinem Indikator gehört. ist es in Ordnung, dafür eine Balkenverschiebung zu verwenden? wie wir zuvor gesprochen haben, kann ich den Zeitpunkt der Ordererstellung finden, dann finde ich diese Balkenverschiebung und sollte ich versuchen, den Indikatorwert mithilfe dieser Verschiebung zu erhalten? Wie kann ich diese Order und den Indikator-Shift abgleichen?
Danke.
Ja, Sie können iBarShift() verwenden, so wie jjc es Ihnen in einem früheren Beitrag erklärt hat, um dann die Daten Ihres Indikators über die Funktion iCustom() zu referenzieren.