Mit Werte aus Array zeichnen

 

Servus Leute,


ich habe 4 Arrays (300 Werte jeweils) mit den Höchst- und Tiefwerte der letzten Tage. Diese möchte ich nun als Indikatorline im selben Fenster ausgeben.


Momentan sieht mein Code so aus:

input ENUM_TIMEFRAMES Time= PERIOD_D1;

#property indicator_chart_window 
#property indicator_buffers 12
#property indicator_plots   6

#property indicator_label1  "10 Tage Hoch"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed   

#property indicator_label2  "10 Tage Tief"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrRed  
 
#property indicator_label3  "20 Tage Hoch"
#property indicator_type3   DRAW_LINE
#property indicator_color3  clrBlue   

#property indicator_label4  "20 Tage Tief"
#property indicator_type4   DRAW_LINE
#property indicator_color4  clrBlue   

#property indicator_label5  "30 Tage Hoch"
#property indicator_type5   DRAW_LINE
#property indicator_color5  clrBlack

#property indicator_label6  "30 Tage Tief"
#property indicator_type6   DRAW_LINE
#property indicator_color6  clrBlack  

double LSMSHighest[300];
double SSMSLowest[300];
double LEWTHighest[300];
double SEWTLowest[300];

int OnInit(){

Print("HALLO");


      SetIndexBuffer(0,LSMSHighest, INDICATOR_DATA);
      SetIndexBuffer(1,SSMSLowest,INDICATOR_DATA);
      SetIndexBuffer(2,LEWTHighest,INDICATOR_DATA);
      SetIndexBuffer(3,SEWTLowest,INDICATOR_DATA);
    
//---
     
      for(int i=0;i<3;i++)
     {
      PlotIndexSetInteger(i,PLOT_DRAW_TYPE,DRAW_LINE); // der Typ der graphischen Konstruktion
      PlotIndexSetInteger(i,PLOT_LINE_STYLE,STYLE_SOLID); // der Stil der Linie auf die Zeichnung
      PlotIndexSetInteger(i,PLOT_LINE_WIDTH,1);           // die Dicke der Linie auf die Zeichnung
      
     }
      
      
      
return(INIT_SUCCEEDED);

}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]){

for(int i=0; i<300; i++){

      double LSMS = iHigh(NULL,PERIOD_D1,iHighest(NULL,Time,MODE_HIGH,20,i));
      double LEWT = iHigh(NULL,PERIOD_D1,iHighest(NULL,Time,MODE_HIGH,10,i));
      double SEWT = iLow(NULL,PERIOD_D1,iLowest(NULL,Time,MODE_LOW,10,i));
      double SSMS = iLow(NULL,PERIOD_D1,iLowest(NULL,Time,MODE_LOW,20,i));
      
      
      //CopyBuffer(High,0,0,1,Highest);
      ArrayFill(LSMSHighest,i,1,LSMS);
      ArrayFill(LEWTHighest,i,1,LEWT);
      ArrayFill(SEWTLowest,i,1,SEWT);
      ArrayFill(SSMSLowest,i,1,SSMS);
      }
      ArrayPrint(LSMSHighest,_Digits,NULL,0);
      ArrayPrint(LEWTHighest,_Digits,NULL,0);
      ArrayPrint(SEWTLowest,_Digits,NULL,0);
      ArrayPrint(SSMSLowest,_Digits,NULL,0);
    return(rates_total);
      
}

void OnDeinit(const int reason){

   ArrayFree(LSMSHighest);
   ArrayFree(SSMSLowest);
   ArrayFree(LEWTHighest);
   ArrayFree(SEWTLowest);
   Print(reason);
}

void OnTick(){



}

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result){
                        
                        
                        
                        
                        
}


So, aber ich bekomme keine Linien angezeigt auf meinem Chart oder eine Fehlermeldung. Ich hab mir schon die Arrays ausgeben lassen. Daten sind vorhanden. Ich habe bisher mich noch nicht an sowas ran gewagt und benötige dafür mal hilfe. Ich hoffe ihr könnt mir weiterhelfen, habe das MQL- Nachschlagewerk durch, aber konnte da nichts rauslesen, wo ich den Fehler identifizieren kann.

 
trix0:

Servus Leute,


ich habe 4 Arrays (300 Werte jeweils) mit den Höchst- und Tiefwerte der letzten Tage. Diese möchte ich nun als Indikatorline im selben Fenster ausgeben.


Momentan sieht mein Code so aus:


So, aber ich bekomme keine Linien angezeigt auf meinem Chart oder eine Fehlermeldung. Ich hab mir schon die Arrays ausgeben lassen. Daten sind vorhanden. Ich habe bisher mich noch nicht an sowas ran gewagt und benötige dafür mal hilfe. Ich hoffe ihr könnt mir weiterhelfen, habe das MQL- Nachschlagewerk durch, aber konnte da nichts rauslesen, wo ich den Fehler identifizieren kann.

Lies dir die Seite  mal genau durch

https://www.mql5.com/de/docs/runtime/running

Dokumentation zu MQL5: MQL5 Programme / Programmausführung
Dokumentation zu MQL5: MQL5 Programme / Programmausführung
  • www.mql5.com
Programmausführung - MQL5 Programme - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
Christian #:

Lies dir die Seite  mal genau durch

https://www.mql5.com/de/docs/runtime/running

Habe ich und was soll ich daraus entnehmen? Ich habe ein Indikator. Für diesen gelten die Funktionen "SetIndexBuffer", Etc. und die Funktionen OnInit kann man auch verwenden, ohne das es ein EA ist.

Also wo liegt der Fehler? habe auch getestet, was passiert, wenn ich es in die Funktion "OnCalculate" alles einfüge. Nichts. und das ist die Funktion, bei dem mein Debugger meckert, das ein Indikator eine OnCalculate Funktion benötigt. Man kann nur etwas in einem Chart anzeigen lassen, als Indikator, das ist mir bewusst, aber es ist ja eben bei mir ein Indikator....

 
trix0 #:

Habe ich und was soll ich daraus entnehmen? Ich habe ein Indikator. Für diesen gelten die Funktionen "SetIndexBuffer", Etc. und die Funktionen OnInit kann man auch verwenden, ohne das es ein EA ist.

Also wo liegt der Fehler? habe auch getestet, was passiert, wenn ich es in die Funktion "OnCalculate" alles einfüge. Nichts. und das ist die Funktion, bei dem mein Debugger meckert, das ein Indikator eine OnCalculate Funktion benötigt. Man kann nur etwas in einem Chart anzeigen lassen, als Indikator, das ist mir bewusst, aber es ist ja eben bei mir ein Indikator....

In der Dokumentation steht das man Funktionen für einen Indikator und einen EA nicht mischen kann.


Du brauchst einen Indikator der dann vom EA geladen wird.

Guck dir die Beispiele an wie es gemacht wird.

https://www.mql5.com/de/articles/10

MQL5: Erstellen Ihres eigenen Indikators
MQL5: Erstellen Ihres eigenen Indikators
  • www.mql5.com
Was ist ein Indikator? Es ist ein Satz berechneter Werte, die auf praktische Weise auf dem Bildschirm angezeigt werden sollen. Sätze von Werten werden in Programmen als Arrays dargestellt. Somit bedeutet das Erstellen eines Indikators, einen Algorithmus zu schreiben, der bestimmte Arrays bearbeitet (Preis-Arrays) und die Ergebnisse der Bearbeitung für andere Arrays (Indikator-Arrays) aufzeichnet. Durch die Beschreibung der Erstellung des True Strength Index zeigt der Autor, wie Indikatoren in MQL5 geschrieben werden.
 
Das habe ich ja geschrieben, das ich das heraus gelesen habe und ich alle Funktionen, die mit einem EA zu tun haben gelöscht habe. Ich will die auch nicht mischen. Ich will lediglich den Indikator in meinem chart angezeigt bekommen. 
 
trix0 #:
Das habe ich ja geschrieben, das ich das heraus gelesen habe und ich alle Funktionen, die mit einem EA zu tun haben gelöscht habe. Ich will die auch nicht mischen. Ich will lediglich den Indikator in meinem chart angezeigt bekommen. 

Zeig mal den aktuellen Indikator code

 
Du hast 4 Arrays mit Daten, aber in #property sind 12 Buffer und 6 Plots definiert.  Kann sein, dass es daran liegt.
 
pennyhunter #:
Du hast 4 Arrays mit Daten, aber in #property sind 12 Buffer und 6 Plots definiert.  Kann sein, dass es daran liegt.

wie meinst du das?

 
trix0 #:

wie meinst du das?

Ganz oben in Deinem Code, dritte und vierte Zeile. Da fangen die properties Deines Indikators an. Hier ist eine andere Anzahl definiert als Du später an Buffern zur Verfügung stellst. 
Vielleicht werden die Daten deswegen nicht geplottet, weil der Computer durch das Wirrwarr an Plots nicht genau weiß wie er was plotten soll. Ich habe den Code jetzt nicht selber ausprobiert.
Zerteile den Indi am Besten in seine Einzelteile mit je einem Buffer und einem Plot und lass Dir das erstmal einzeln anzeigen, schau ob es geht und dann füge die Teile unter beachtung der richtigen Buffer und Plotzahl zusammen.
 
trix0 #:
Das habe ich ja geschrieben, das ich das heraus gelesen habe und ich alle Funktionen, die mit einem EA zu tun haben gelöscht habe. Ich will die auch nicht mischen. Ich will lediglich den Indikator in meinem chart angezeigt bekommen. 

Schau Dir in ..\Indicators\Examples\ die Indikatoren Gator.mq5 und Ichimoku.mq5 dort werden zwei, drei Indikatoren gezeichnet - nimm das als Beispiel, statt die ganze Nacht herumzuprobieren, mit ungewissem Ausgang

 
Du hast 12 Puffer und gibst nur 4 an.

Du musst für jeden Databuffer der auch eine Farbe hat, einen Colorbuffer angeben.

So:
Databuffet
Colorbuffer
Databuffer
Colorbuffer
...

Ansonsten stimmen die Zuordnungen nicht.
Grund der Beschwerde: