Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1466
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
Guten Tag! Beim Schreiben eines Expert Advisors auf Mql5 bin ich auf ein Problem gestoßen. Es gibt ein Array mit Werten von Candlesticks Eröffnung für das Jahr. Auf jeder Kerze dieses Arrays muss ich ein Array von n-Kerzen erstellen, sagen wir 30, um die Hochs und Tiefs zu überprüfen. So etwas wie ein Zickzack-Indikator.
Ich schrieb diesen Code, der einen Fehler gibt: "Array außerhalb des Bereichs" oder die Werte von Maximum und Minimum in das gesamte Array, aber nicht in der erforderlichen 30-Kerzen-Periode.
Vielleicht muss ich ein anderes Array erstellen, um es in den Funktionen ArrayMaximum() und ArrayMinimum() zu überprüfen, aber ich bin verwirrt mit verschachtelten Schleifen und Array-Größe.
Bitte, geben Sie mir einen Tipp.
if(i+30<=ArraySize(opens))
Hier ist die Ausgabe außerhalb des Arrays
Dieser Fehler ist auf Unachtsamkeit zurückzuführen. Die Behebung des Fehlers löst das Problem nicht.
Wie kann ich ein Array mit 30 Candlestick-Eröffnungskursen erstellen, um darin nach Hochs und Tiefs zu suchen?
ArrayMaximum
ArrayMaximum
Rückgabe Index des Höchstwertes zurück, nicht den Preis.
Ich habe es nicht überprüft, aber es scheint der Weg zu sein, um die Indizes der Minima und Maxima von Kerzeneröffnungen (Openings) zu erhalten.
Obwohl Sie auch den Preis auf einmal erhalten können, aber nicht die Indizes.
Ich habe nirgendwo ein Beispiel für eine mql-Schleife mit einem Schritt gefunden. Das vereinfacht die ganze Angelegenheit.
Nur ChatGPT hat mir geraten, es auf diese Weise zu schreiben:
Ich werde weiter experimentieren. Der Code funktioniert. Ich danke Ihnen.
Der Fehler "array out of range" tritt auf, wenn man ArrayResize nicht durchführt.
Dieser Fehler ist auf Unachtsamkeit zurückzuführen. Die Behebung des Fehlers löst das Problem nicht.
Wie kann ich ein Array mit 30 Candlestick-Eröffnungskursen erstellen, um darin nach Hochs und Tiefs zu suchen?
Wo liegt das Problem? Deklarieren Sie ein Array temp[] und kopieren Sie 30 Elemente hinein und suchen Sie nach dem Index des Minimal-/Maximalwertes. Und wenn es am Ende weniger als 30 sind, wird kopiert, wie viele übrig sind. Und in diesem Fall würde ich lieber eine while()-Schleife verwenden.
Wo liegt das Problem? Deklarieren Sie ein Array temp[] und kopieren Sie 30 Elemente hinein und suchen Sie den Index des Minimal-/Maximalwertes. Und wenn es am Ende weniger als 30 sind, wird kopiert, wie viele übrig sind. Und in diesem Fall würde ich lieber eine while()-Schleife verwenden.
Ja, das kann man machen. Ich kann nicht klar denken, also bitte ich um Rat.
Ja, das könnten Sie tun. Ich kann nicht klar denken, also bitte ich um Rat.
In einem statischen Array ist die Größe konstant, sie kann nicht geändert werden, in einem dynamischen Array kann sie geändert werden, aber die Größe des Arrays ist festgelegt! d.h. die Größe des Arrays ist bekannt und die Indizes der Elemente von 0 bis zum Ende. <= ist unzulässig, weil die Indizes der Elemente von Null an und der Index des letzten Elements um eine Einheit der Array-Größe kleiner sind.
Alles liegt in Ihren Händen))))
In einem statischen Array ist die Größe konstant und kann nicht geändert werden, in einem dynamischen Array kann sie geändert werden, aber die Größe des Arrays ist festgelegt! d.h. die Größe des Arrays ist bekannt und die Indizes der Elemente sind von 0 bis zum Ende. <= ist unzulässig, weil die Indizes der Elemente von Null an beginnen und der Index des letzten Elements um eine Einheit der Array-Größe kleiner ist.
Alles liegt in Ihren Händen))))
Was meinen Siedamit ? Meinen Sie, dass man, wenn man eine bestimmte Anzahl von Elementen von einem Array in ein anderes Array, z.B. temp[], kopieren will, die Arraygröße vor dem Kopieren festlegen sollte ArrayResize(temp, new_size); ?????
Ja, das könnten Sie tun. Ich kann nicht klar denken, also bitte ich um Rat.
Sie brauchen nicht einmal ein temporäres Array.
Dieser Code
sucht nach den maximal 15 verbleibenden Elementen, obwohl er auf die Suche nach 20 Elementen eingestellt ist.
Sie sollten also besser die while()-Schleife verwenden und sich nicht um die Anzahl der verbleibenden Array-Elemente kümmern.