Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 578
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
DataCandles ist eine Struktur. Das Array, in das wir die Candlesticks aus der Historie schreiben, ist array[]. Wir müssen sie also als Zeitreihe anlegen, damit ihre Indizierung mit der Indizierung der Kerzen im Diagramm übereinstimmt. D.h. die Nullzelle von array[] entspricht den Candlesticks, die dem aktuellen Datum am nächsten sind.
D.h. 1. wir kopieren Candlesticks in das Array array[], 2. wir machen daraus eine Zeitreihe, und lesen dann Werte daraus in die Struktur.
Sie können ohne array[] tun - schreiben Sie einfach Daten direkt aus dem Chart in die Struktur, aber ich schlug vor, dies für die Kompatibilität mit Five - es ermöglicht, direkt zu kopieren nur in den Indikator mit high[i], low[i] und andere Daten, aber in das Skript oder Expert Advisor, müssen wir zuerst kopieren Sie die notwendigen Geschichte Intervall in das Array, das ich tat.
Alert (Serie);
wie hier?
Beide Warnungen sind immer noch falsch
Alert (Serie);
wie hier?
Beide Warnungen sind immer noch falsch
Es handelt sich also um einen Fehler, der unter "Fehler, Bugs, Fragen" gemeldet werden sollte.
Hier ist ein Prüfskript, das die Zeit der kopierten Candlesticks in den Null- und letzten Zellen von array[] anzeigt:
Dies ist also ein Fehler, der unter "Fehler, Bugs, Fragen" gemeldet werden sollte.
Hier ist ein Prüfskript, das die Zeit der kopierten Candlesticks in den Null- und letzten Zellen von array[] anzeigt:
Dies wird ausgegeben:
Array ist Serie: false
Zeit array[0]: 2016.05.12 21:00
Uhrzeit array[9]: 2016.05.12 12:00
Das Ergebnis ist folgendes:
Array ist Serie: false
Zeit array[0]: 2016.05.12 21:00
Uhrzeit array[9]: 2016.05.12 12:00
Ich habe es überprüft - immer falsch, aber die Zeit ist korrekt: wenn zu Beginn des Skripts wählen Array-Array als Zeitreihe "Ja", dann:
Wenn Sie "Nein" wählen, dann:
die Zeiten der Candlesticks, die in das Array geschrieben werden, sind umgekehrt, was bedeutet, dass ArraySetAsSeriess() korrekt funktioniert, aber ArrayIsSeries() nicht, es gibt immer false aus, was ich bereits in den obigen Bug Thread geschrieben habe.
Oh, diese Programmierung. Je weiter man in den Wald....
Verstehen Sie, dass Sie die Richtung der Anordnung nicht kennen müssen. Der Algorithmus sucht nach Wiederholungen. Es spielt also keine Rolle, in welcher Reihenfolge die Takte verarbeitet werden.
Sie benötigen. Denn dann muss ich herausfinden, welche Candlesticks eine Übereinstimmung gebildet haben, und den Preis Low vom nächstgelegenen zum aktuellen Preis nehmen.
Hierfür gibt es eine Kerzenzeit in der Struktur, mit der Sie die nächstgelegene Kerze zu jeder gewünschten Zeit finden können.
Und Sie brauchen die Candlestick-Nummern nicht auszugeben - sie stimmen nicht mit den echten Balken-Nummern überein. Denn wir füllen das Array, und die Indizes im Array gehören nur zur Nummer des Candlesticks im Array, nicht im Diagramm.
Ich habe überprüft, was es ausgibt - immer falsch, aber die Zeit ist korrekt: wenn Sie Array-Array als Zeitreihe "Ja" wählen, wenn Sie das Skript ausführen, dann:
Wenn Sie "Nein" wählen, dann:
Die Zeiten der Candlesticks, die in das Array geschrieben werden, sind umgekehrt, was bedeutet, dass ArraySetAsSeriess() korrekt funktioniert, aber ArrayIsSeries() nicht, es gibt immer false aus, was ich bereits in den obigen Bug Thread geschrieben habe.
Ich habe den Code leicht geändert:
ArraySetAsSeries(array,true); //hier einfach true eingeben
und fügte dann die Anzahl der Kerzenständer zur Selbstkontrolle hinzu:
Alert("Array ist Serie: ",ArrayIsSeries(array),
"\nKerze "+IntegerToString(0,2,'0')+" time array[0]: ",TimeToString(array[0].time,TIME_DATE|TIME_MINUTES),
"\nSwitch "+IntegerToString(searchperiod-1,2,'0')+" time array[",string(searchperiod-1),"]:",TimeToString(array[ArraySize(array)-1].time,TIME_DATE|TIME_MINUTES));
Das Ergebnis ist die folgende Ausgabe:
Array ist Serie: false
Kerze 00 Zeit array[0]: 2016.05.12 22:00
Kerze 09 time array[9]: 2016.05.12 13:00
Dazu gibt es eine Kerzenzeit in der Struktur, mit der Sie die nächstgelegene Kerze zu jeder gewünschten Zeit finden können.
Ich habe den Code ein wenig geändert:
ArraySetAsSeries(array,true); //hier einfach true eingeben
und fügte dann die Anzahl der Kerzenständer zur Selbstkontrolle hinzu:
Alert("Array ist Serie: ",ArrayIsSeries(array),
"\nKerze "+IntegerToString(0,2,'0')+" time array[0]: ",TimeToString(array[0].time,TIME_DATE|TIME_MINUTES),
"\nSwitch "+IntegerToString(searchperiod-1,2,'0')+" time array[",string(searchperiod-1),"]:",TimeToString(array[ArraySize(array)-1].time,TIME_DATE|TIME_MINUTES));
Das Ergebnis ist die folgende Ausgabe:
Array ist Serie: false
Kerze 00 Zeit array[0]: 2016.05.12 22:00
Kerze 09 time array[9]: 2016.05.12 13:00