Indikator soll länger sein als Kurs

 

Hallo,

ich bin Programmierer, aber ganz neu bei MQL5.

Ich habe deinen Indikator entwickelt, der auf Vorhersagen für den nächsten Tag macht; d.h., wenn aktuell Tag t ist, liefert der Indikator Werte bis zu Tag t+1.

Das habe ich versucht, wie folgt abzubilden:


double indbuffer[];

int OnInit() {
  SetIndexBuffer(0, indbuffer, INDICATOR_DATA);
  return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) {
  int offset;
  if (prev_calculated == 0) {
    offset = begin;
  } else {
    offset = prev_calculated - 1;
  }

  for (t = offset; t < rates_total; t++) {
    indbuffer[t+1] = (price[t]+price[t-1])/2; // nur ein Beispiel
  }
  return(rates_total);
}

Das funktioniert aber leider nicht; in der "indbuffer[t+1] =" Zeile bekomme ich den Fehler "array out of range", was ja auch ziemlich logisch ist.

Ich habe auch schon versucht, indbuffer mittels ArrayResize größer zu machen, aber das hat nicht geklappt.

(Wie) kann ich also den Indikator bis t+1 zeichnen, obwohl der Kurs nur bis t läuft?

 

Die Array Puffer der Indikatoren werden automatisch immer an und nur bis zum aktuellen Zeitpunkt angepasst, d.h. mit jedem neuen Balken um Eins erhöht.

Aber man kann einen Indikatorpuffer insgesamt in die Zukunft oder Vergangenheit schieben also, nach vorn oder zurück. Ein Beispiel auf Deinem PC ist der Alligator: ...\MQL5\Indicators\Examples\Alligator.mq5

Schau Dir an wie die Parameter InpJawsShift=8; InpTeethShift=5; und  InpLipsShift=3; verwendet werden.

Oder man kann Objekte in die Zukunft zeichnen.

 

Danke, das hat schon mal geholfen. Ich verwende jetzt in OnInit noch:

int OnInit() {
  SetIndexBuffer(0, indbuffer, INDICATOR_DATA);
  PlotIndexSetInteger(0, PLOT_SHIFT, P); // P ist Eingabeparameter >= 0
  return(INIT_SUCCEEDED);
}
Das funktioniert nun soweit, dass mir nun tatsächlich ein Prognosewert für den nächsten Tag angezeigt wird.


Allerdings auch nur für diesen. Für P=1 ist das ok, aber bei z.B. P=5 würde ich erwarten, dass der Plot bis t+5 reicht.


Beim Alligator tritt dasselbe Problem auf, es scheint also nicht an meinem Indikator zu liegen. Aber woran dann?

 

??

In der MQL5 Referenz geschaut? (Kursor auf PlotIndexSetInteger() und F1 drücken dann weiter.. und man kann lesen:

PLOT_SHIFT

Verschiebung der graphischen Konstruktion des Indikators Zeit-Achse in Bars

Er verschiebt um Bars nicht nach Zeitstempel.

Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Indikatorkonstanten / Zeichnungsstile
Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Indikatorkonstanten / Zeichnungsstile
  • www.mql5.com
Zeichnungsstile - Indikatorkonstanten - Konstanten, Enumerationen und Strukturen - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 

Ja, das habe ich gesehen, aber ich habe glaube ich nicht so wirklich begriffen, was es bedeutet :-).

Ich hatte angenommen, bei einem Timeframe von daily (den ich eingestellt habe) bedeutet 1 Bar = 1 Tag? Mir fehlen da einige Basics...

Was müsste ich denn richtigerweise tun, um den Kurs 5 "Einheiten" (welche auch immer es sind) in der Zukunft zu zeichnen?

 

Ich verstehe nicht. Hast Du den Alligator (Standardparameter) gestartet? Bei mir schaut es so aus, zwei Puffer sind in die Zukunft verschoben und zeigen entspr. Werte für Dienstag 23.8.:


Wenn Dir da allerdings, wie Du sagst Grundlegendes fehlt, schau mal hier:

https://www.mql5.com/de/articles/496 // Quickstart for newbies

Schnelleinstieg oder Kurzanleitung für Anfänger
Schnelleinstieg oder Kurzanleitung für Anfänger
  • www.mql5.com
Liebe Leser, in diesem Artikel möchte ich Ihnen vermitteln und zeigen, wie man sich möglichst schnell und einfach die Grundlagen der Erstellung automatischer Handelssysteme, wie die Arbeit mit Indikatoren u. a., erschließt. Der Beitrag richtet sich an Neueinsteiger, in ihm kommen weder komplizierte noch schwer zu verstehende Beispiele zur Anwendung.