Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 30
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 verstehe das überhaupt nicht...
Ich erstelle einen Handle eines Standard-AOs im Indikator, aber mit einem festgelegten Zeitrahmen. Wenn ich Daten von AO mit einem Zeitrahmen erhalte, der nicht mit dem aktuellen übereinstimmt, erhalte ich ... Ich bekomme nichts - Fehler 4806.
Frage: Wie kann man Daten von Standardindikatoren abrufen, deren Zeitrahmen nicht mit dem aktuellen übereinstimmt?
Ich verstehe das überhaupt nicht...
Ich erstelle einen Handle eines Standard-AOs im Indikator, aber mit einem festgelegten Zeitrahmen. Wenn ich Daten von AO mit einem Zeitrahmen erhalte, der nicht mit dem aktuellen übereinstimmt, erhalte ich ... Ich bekomme nichts - Fehler 4806.
Was ist die Frage, was ist der richtige Weg, um die Daten von Standardindikatoren mit Zeitrahmen, die nicht mit dem aktuellen übereinstimmen, zu erhalten?
Über das Abrufen der INDICATOR-Werte im INDICATOR:
Forum für Handel, automatisierte Handelssysteme und Strategietests
Wie man Daten aus einem anderen Indikator in einen Indikator übernimmt
Wladimir Karputow, 2016.12.27 08:41
Da bei MQL5-Indikatoren der Balken mit dem Index "0" standardmäßig der LINKE Balken im Diagramm ist, versuchen wir, Daten von zwei anderen Indikatoren - MA und Alligator - in unseren Indikator zu übernehmen(dieses Beispiel im Indikator "IndicatorFromIndicators.mql5").
Versuchen wir, Daten von MA und Alligator auf dem Balken mit dem Index "0", "1" und "2" zu erhalten:
//---
Comment("Проверка: time[0]=",time[0],"\n",
"rates_total-1: ",rates_total,"\n",
"BarsCalculated(iMA): ",BarsCalculated(handle_iMA),"\n",
"BarsCalculated(iAlligator): ",BarsCalculated(handle_iAlligator),"\n",
"MA[",0,"]=",StringFormat("%."+IntegerToString(Digits()+1)+"f",iMAGet(0)),"\n",
"MA[",1,"]=",StringFormat("%."+IntegerToString(Digits()+1)+"f",iMAGet(1)),"\n",
"MA[",2,"]=",StringFormat("%."+IntegerToString(Digits()+1)+"f",iMAGet(2)),"\n",
"Jaws[",0,"]=",StringFormat("%."+IntegerToString(Digits())+"f",iAlligatorGet(GATORJAW_LINE,0)),"\n",
"Jaws[",1,"]=",StringFormat("%."+IntegerToString(Digits())+"f",iAlligatorGet(GATORJAW_LINE,1)),"\n",
"Jaws[",2,"]=",StringFormat("%."+IntegerToString(Digits())+"f",iAlligatorGet(GATORJAW_LINE,2)));
//--- return value of prev_calculated for next call
return(rates_total);
}
Fügen wir den Testindikator"IndicatorFromIndicators.mql5" in den Chart ein und setzen das Fadenkreuz auf den RECHTESTEN Balken, d.h. nicht auf den Nullbalken. So sieht es aus:
Obwohl das Fadenkreuz auf den RECHTESTEN Takt eingestellt ist - also definitiv nicht auf einen Takt mit dem Index "0", sollten Sie bei der Verwendung vonCopyBuffer beachten, dassCopyBuffer Daten von der Gegenwart in die Vergangenheit kopiert, d.h. Takt mit Index "0" bedeutet den aktuellen Takt.
CopyBuffer: Die zu kopierenden Datenelemente (Indikatorpuffer mit einem Index buffer_num) werden von der Startposition aus von der Gegenwart in die Vergangenheit gezählt, d.h. die Startposition 0 bedeutet den aktuellen Takt (Indikatorwert für den aktuellen Takt).
Das heißt, im MQL5-Indikator, wenn er die Operation CopyBuffer verwendet, müssen Sie das Array umdrehen (ArraySetAsSeries), so dass der äußerste rechte Balken im Diagramm dem Index "0" im Indikatorpuffer entspricht (im Beispiel "iMTF_AO.mq5" entspricht der äußerste rechte Balken im Diagramm nun rates_total-1).
Über den Erhalt von INDICATOR-Werten in INDICATOR:
CopyBuffer: Die Elemente der kopierten Daten (Indikatorpuffer mit einem Index buffer_num) werden von der Startposition aus von der Gegenwart in die Vergangenheit gezählt, d.h. die Startposition gleich 0 bedeutet den aktuellen Takt (Indikatorwert für den aktuellen Takt).
Das heißt, im MQL5-Indikator, wenn er die Operation CopyBuffer verwendet, müssen Sie das Array umdrehen (ArraySetAsSeries), so dass der äußerste rechte Balken im Diagramm dem Index "0" im Indikatorpuffer entspricht (im Beispiel "iMTF_AO.mq5" entspricht der äußerste rechte Balken im Diagramm nun rates_total-1).
Ich bekomme nur einen Balken. Und der Indikator für den "nativen" Zeitrahmen zeigt die Daten normal an. Auf den "nicht-nativen" - leeren Wert. Ich habe empirisch herausgefunden, dass ein leerer Wert zurückgegeben wird, bis der gesamte Verlauf für den Zeitraum geladen ist, für den ich Daten von AO erhalte.
Die Frage wäre dann: Wie kann man vermeiden, in die Schleife einzutreten, während die Historie für den Zeitrahmen geladen wird? Es handelt sich nur um einen Test, während der Indikator im Allgemeinen Berechnungen auf der Grundlage des Verlaufs eines bestimmten Zeitrahmens durchführt und nicht versucht werden muss, sie durchzuführen, solange kein Verlauf vorhanden ist.
Ich bekomme nur einen Balken. Und der Indikator für den "nativen" Zeitrahmen zeigt die Daten normal an. Auf der "nicht-nativen" Seite wird ein leerer Wert angezeigt. Ich habe empirisch herausgefunden, dass ein leerer Wert zurückgegeben wird, bis der gesamte Verlauf für den Zeitraum geladen ist, für den ich Daten von AO erhalte.
Dann wird die Frage anders klingen: Wie kommt man nicht in die Schleife, während der Verlauf für den Zeitrahmen geladen wird? Dies ist nur ein Test. Im Allgemeinen führt der Indikator Berechnungen auf der Grundlage des Verlaufs eines bestimmten Zeitrahmens durch, und es besteht keine Notwendigkeit, diese Berechnungen durchzuführen, bis es keinen Verlauf mehr gibt.
Das "i" ist nicht "0", sondern ein exorbitanter Wert. Fazit: Nehmen wir an, wir lassen das Beispiel auf M15 laufen - wir haben 5000 Balken in diesem Zeitraum. Wir fordern Daten von H4 an - wir haben nur 400 Balken darauf. Dann versuchen wir, "AO(4999)" anzufordern.
Das heißt, von der Periode H4 versuchen wir, den Balken mit dem Index "4999" anzufordern - aber es gibt überhaupt keinen solchen Balken auf H4, es gibt dort nur 400 Balken, aber wir fordern den Balken "0" an, und wenn der Indikator die Operation CopyBuffer verwendet, sollten wir das Array umkehren (ArraySetAsSeries), so dass der ganz rechte Balken im Diagramm dem Index "0" im Indikatorpuffer entspricht (jetzt im Beispiel "iMTF_AO.mq5" entspricht der ganz rechte Balken im Diagramm rates_total-1).
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Wanzen, Wanzen, Fragen
fxsaber, 2017.04.12 08:38
Ein kleiner Hinweis auf den Hut. Umgehung des ZuweisungsoperatorsErgebnis
Hier..:
Das "i" ist nicht "0", sondern ein exorbitanter Wert. Fazit: Nehmen wir an, wir lassen das Beispiel auf M15 laufen - wir haben 5000 Balken in diesem Zeitraum. Wir fordern Daten von H4 an - wir haben nur 400 Balken darauf. Dann versuchen wir, "AO(4999)" anzufordern.
Zum Beispiel, von der Periode H4, versuchen wir, die Bar mit dem Index "4999" - aber es gibt nicht eine solche Bar auf H4, gibt es nur 400 Bars gibt, aber wir wollen Bar "0", und wenn der Indikator verwendet die Operation CopyBuffer, sollten wir das Array (ArraySetAsSeries), so dass die ganz rechts im Chart entspricht Index "0" in der Indikator-Puffer (zum Beispiel "iMTF_AO.mq5" jetzt die ganz rechts im Chart entspricht rates_total-1).
Nein, natürlich habe ich versucht, den Grenzwert zu berechnen:
... Aber ich sehe, dass ich es in der Eile vermasselt habe - es ist nur für den aktuellen Zeitrahmen geeignet
Nein, natürlich habe ich versucht, den Grenzwert zu berechnen:
... Aber ich sehe, ich habe es in der Eile vermasselt - es ist nur für den aktuellen Zeitrahmen geeignet
Haben Sie sich den Code, den ich Ihnen gezeigt habe, überhaupt angesehen? Oder haben Sie es durchgeführt?
Ich habe nicht gefragt, wie man den Indikatorpuffer füllt, sondern warum, wenn ich Werte von AO nicht aus dem aktuellen Balken nehme, sie leere Werte zurückgeben.
Ich habe es - es gibt keine Historie, sie wird geladen und während sie geladen wird, gibt AO aus einem nicht nativen Zeitrahmen den Fehler "keine Daten" zurück.
Nun stellt sich die Frage: Wie kann man wissen, dass die Historie für den benötigten Zeitrahmen vollständig geladen ist, um nicht in den Indikatorzyklus einzutreten?