Ich hab mir mal einen Indikator DailyHiLo gebaut, vielleicht kannst Du damit anfangen und dann die Elemente hinzufügen wie Du sie brauchst?
Ohne Garantie!
wenn du 30 Bars max willst brauchst du nicht 1000 Bars Dreinkopieren, lies die doku, da steht drin wie du die copy werte richtig verwendest
nein ich will nicht maximal 30 Bars haben. Es soll nach hinten weiterlaufen in der Zeitspanne.
es soll immer überprüft werden, welche kerze die höchste ist aus den letzten 10 Kerzen z.B.:
Aus zum beispiel der 1 Kerze bis zur 10 ten kerze. dann soll überprüft werden welche die höchste Kerze von der 2ten bis zur 11 Kerze ist. Danach von der 3ten bis zur 12ten Kerze. usw.
_____EDIT_____
Okay jetzt hab ich kapiert was du gemeint hast. Ich kopiere nur die Daten nur rüber ohne die irgendwie zu analysieren und ArrayMaximum nimmt jedesmal den höchsten Wert. Da ich das aber bei jedem einzelnen Bar so mache, ist es immer logisch, das es der Maximalwert ist.
Ich hab mir mal einen Indikator DailyHiLo gebaut, vielleicht kannst Du damit anfangen und dann die Elemente hinzufügen wie Du sie brauchst?
Ohne Garantie!
Ich hab mir mal das angeschaut von dir. Erstmal vielen Dank!
Ich habe meinen Code komplett überarbeitet.
#property indicator_chart_window #property indicator_buffers 6 #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 MqlRates PriceInformation[]; double High[], Low[], SHighest[200],SLowest[200]; int SHigh, SLow; int OnInit() { 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[]) { SetIndexBuffer(0,SHighest, INDICATOR_DATA); SetIndexBuffer(1,SLowest,INDICATOR_DATA); /*SetIndexBuffer(2,MHigh,INDICATOR_DATA); SetIndexBuffer(3,MLow,INDICATOR_DATA); SetIndexBuffer(4,LHigh,INDICATOR_DATA); SetIndexBuffer(5,LLow,INDICATOR_DATA); //--- // PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE); // der Typ der graphischen Konstruktion PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID); // der Stil der Linie auf die Zeichnung PlotIndexSetInteger(0,PLOT_LINE_WIDTH,2); // die Dicke der Linie auf die Zeichnung */ ArraySetAsSeries(PriceInformation, true); int Data = CopyRates(_Symbol,_Period,0,200, PriceInformation);//Preisdaten der letzten 1000 Kerzen laden ArraySetAsSeries(High,true);//Array soll von aktuellen zu den ältesten Daten sortiert werden. ArraySetAsSeries(Low,true);//Array soll von aktuellen zu den ältesten Daten sortiert werden. CopyHigh(_Symbol,_Period,0,200,High); //Die Daten des maximalen Preises aus den Letzten 1000 Kerzen aus dem aktuellen Chart mit der aktuellen Periode in das Array High kopieren CopyLow(_Symbol,_Period,0,200,Low); //Die Daten des aus den Letzten 1000 Kerzen aus dem aktuellen Chart mit der aktuellen Periode in das Array High kopieren for(int i=0; i<180 ;i++) { SHigh = ArrayMaximum(High,i,10);//Höchste Kerze von Position i aus dem Array High zur 10ten Position im Array ermitteln SLow = ArrayMinimum(Low,i,10);//Niedrigste Kerze von Position i aus dem Array High zur 10ten Position im Array ermitteln SHighest[i] = PriceInformation[SHigh].high; //Höchstpreis aus dem ermittelten Kerze auslesen und dem Array SHighest hinzufügen SLowest[i] = PriceInformation[SLow].low; //Höchstpreis aus dem ermittelten Kerze auslesen und dem Array SHighest hinzufügen }; return(rates_total); }
So wie ich die jeweilige Funktion verstehe sollte es ja so funktionieren. Jedoch wird mir keine Linie gezeichnet.
Schau Dir mein Beispiel genau an!
Was passiert in OnInit? Manches, was dort hin gehört, machst Du in OnCalculate()!
Lies mal:
Quickstart for newbies: https://www.mql5.com/de/articles/496
und: https://www.mql5.com/de/articles/100

- www.mql5.com
Schau Dir mein Beispiel genau an!
Was passiert in OnInit? Manches, was dort hin gehört, machst Du in OnCalculate()!
Lies mal:
Quickstart for newbies: https://www.mql5.com/de/articles/496
und: https://www.mql5.com/de/articles/100
Ich hab mal alles, was keine Berechnung ist, in die OnInit Funktion gepackt:
#property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 2 #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 MqlRates PriceInformation[]; double High[], Low[], SHighest[],SLowest[]; int SHigh, SLow; int OnInit() { SetIndexBuffer(0,SHighest, INDICATOR_DATA); SetIndexBuffer(1,SLowest,INDICATOR_DATA); /*SetIndexBuffer(2,MHigh,INDICATOR_DATA); SetIndexBuffer(3,MLow,INDICATOR_DATA); SetIndexBuffer(4,LHigh,INDICATOR_DATA); SetIndexBuffer(5,LLow,INDICATOR_DATA); //--- //*/ PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE); // der Typ der graphischen Konstruktion PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID); // der Stil der Linie auf die Zeichnung PlotIndexSetInteger(0,PLOT_LINE_WIDTH,2); PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE); // der Typ der graphischen Konstruktion PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_SOLID); // der Stil der Linie auf die Zeichnung PlotIndexSetInteger(1,PLOT_LINE_WIDTH,2); // die Dicke der Linie auf die Zeichnung ArraySetAsSeries(High,true);//Array soll von aktuellen zu den ältesten Daten sortiert werden. ArraySetAsSeries(Low,true);//Array soll von aktuellen zu den ältesten Daten sortiert werden. ArraySetAsSeries(PriceInformation, true); ArraySetAsSeries(SHighest, true); ArraySetAsSeries(SLowest, true); CopyHigh(_Symbol,_Period,0,2000,High); //Die Daten des maximalen Preises aus den Letzten 1000 Kerzen aus dem aktuellen Chart mit der aktuellen Periode in das Array High kopieren CopyLow(_Symbol,_Period,0,2000,Low); //Die Daten des aus den Letzten 1000 Kerzen aus dem aktuellen Chart mit der aktuellen Periode in das Array High kopieren CopyRates(_Symbol,_Period,0,500, PriceInformation);//Preisdaten der letzten 1000 Kerzen laden 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[]) { Comment("Vor der berechnung"); for(int i=0;i<180;i++) { SHigh = ArrayMaximum(High,i,10);//Höchste Kerze von Position i aus dem Array High zur 10ten Position im Array ermitteln SLow = ArrayMinimum(Low,i,10);//Niedrigste Kerze von Position i aus dem Array High zur 10ten Position im Array ermitteln SHighest[i] = PriceInformation[SHigh].high; //Höchstpreis aus dem ermittelten Kerze auslesen und dem Array SHighest hinzufügen SLowest[i] = PriceInformation[SLow].low; //Höchstpreis aus dem ermittelten Kerze auslesen und dem Array SHighest hinzufügen }; return(rates_total); }
jetzt wird auch etwas gezeichnet, aber nicht das was ich erwartet habe. Siehe Bild "Aktuell".
es sieht für mich so aus, als ob er es einfach versetzt zeichnet.
__________________________EDIT______________________________
Okay, ich habe mal den MT5 und den MQL5 neugestartet. Jetzt zeigt er es richtig an.

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Servus Zusammen,
ich möchte mir ein Indikator bauen, der mir die höchste Kerze (einmal höchste Kerze 10 Tage, 20 Tage, 30 Tage) anzeigen, und dieses nach hinten in der Zeitlinie weiterführen. Jedoch zeigen mir die Linien nur auf den höchsten und niedrigsten Wert jedes einzelnes Bar an.
Wie das Ergebniss aussieht (Bars Indikator) und wie es aussehen sollte(Bars Eigentlich, in Paint gezeichnet, und nur die 10 Tages Linie)