Excelente Tutorial, Samuel! Parabéns e obrigado!!!
Ausgezeichnete one.... mein Gedanke Kerze Stick ist auch eine gerade, die jemand verstehen, wenig über den Handel Begriff, ich glaube, rot ist zu verkaufen, während die grüne ist zu kaufen, aber sie samething, wenn grün geht nach oben zu kaufen, während rot nach unten zu verkaufen, aber am Ende des Punktes von dort Linie, grün muss einen Rückwärtsgang und rot muss bewegen sich auf als gut, während gelb ist jughing dort Preis. also in der Umsetzung dieser auf die mql5, jeder wird wissen, meine Abfrage Sprache (meine ql).
Hallo Samuel,
Nette Idee, aber ich kann diese Arbeit nicht machen. Kannst du dieses Beispiel in diesem Artikel veröffentlichen?
Mit freundlichen Grüßen,
wie man Tick-Candlesticks in beliebiger Höhe für den Futures-Handel erstellt
scalp-91 #:
wie man Tick-Candlesticks in beliebiger Höhe für den Futures-Handel erstellt
wie man Tick-Candlesticks in beliebiger Höhe für den Futures-Handel erstellt
Creación de indicadores de tick en MQL5
- www.mql5.com
En este artículo vamos a ver la creación de dos indicadores: el indicador de tick, que representa el gráfico de tick del precio, y el indicador de vela de tick, que representa las velas con el número de ticks especificados. Cada uno de los indicadores escribe los precios de llegada en un archivo y utiliza los datos guardados tras el reinicio del indicador (estos datos pueden ser usados también por los demás programas).
Vielen Dank für diesen didaktischen Hinweis.
cf23EA1l #:
Hallo Samuel,
Nette Idee, aber ich kann diese Arbeit nicht machen. Können Sie dieses Beispiel auf diesen Artikel einreichen?
Mit besten Grüßen,
//+------------------------------------------------------------------+ //|Farbkerzen.mq5 | //|Urheberrecht 2020, Samuel Manoel de Souza | //| https://www.mql5.com/pt/users/samuelmnl | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, Samuel Manoel de Souza" #property link "https://www.mql5.com/pt/users/samuelmnl" #property version "1.00" #property indicator_chart_window #property indicator_buffers 12 #property indicator_plots 3 //--- plot bull #property indicator_label1 "bull" #property indicator_type1 DRAW_CANDLES #property indicator_color1 clrGreen,clrBlack,clrGreen #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- plot bear #property indicator_label2 "bear" #property indicator_type2 DRAW_CANDLES #property indicator_color2 clrRed,clrBlack,clrRed #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- Plotbereich #property indicator_label3 "wait" #property indicator_type3 DRAW_CANDLES #property indicator_color3 clrGold,clrBlack,clrGold #property indicator_style3 STYLE_SOLID #property indicator_width3 1 //--- Indikatorpuffer double bullBuffer1[]; double bullBuffer2[]; double bullBuffer3[]; double bullBuffer4[]; double bearBuffer1[]; double bearBuffer2[]; double bearBuffer3[]; double bearBuffer4[]; double rangeBuffer1[]; double rangeBuffer2[]; double rangeBuffer3[]; double rangeBuffer4[]; input int inpShift = 0; //Indikator Verschiebung input int inpBlue = 10;//Blue Shift input int inpRed = 20; //Red Shift //+------------------------------------------------------------------+ //| Benutzerdefinierte Initialisierungsfunktion für Indikatoren | //+------------------------------------------------------------------+ int OnInit() { if(inpBlue <= 0) { Alert("Blue Shift must be greater then 0!"); return INIT_PARAMETERS_INCORRECT; } if(inpRed <= inpBlue) { Alert("Red Shift must be greater then Blue Shift!"); return INIT_PARAMETERS_INCORRECT; } //--- Zuordnung von Indikatorpuffern SetIndexBuffer(0, bullBuffer1, INDICATOR_DATA); SetIndexBuffer(1, bullBuffer2, INDICATOR_DATA); SetIndexBuffer(2, bullBuffer3, INDICATOR_DATA); SetIndexBuffer(3, bullBuffer4, INDICATOR_DATA); SetIndexBuffer(4, bearBuffer1, INDICATOR_DATA); SetIndexBuffer(5, bearBuffer2, INDICATOR_DATA); SetIndexBuffer(6, bearBuffer3, INDICATOR_DATA); SetIndexBuffer(7, bearBuffer4, INDICATOR_DATA); SetIndexBuffer(8, rangeBuffer1, INDICATOR_DATA); SetIndexBuffer(9, rangeBuffer2, INDICATOR_DATA); SetIndexBuffer(10, rangeBuffer3, INDICATOR_DATA); SetIndexBuffer(11, rangeBuffer4, INDICATOR_DATA); //---Einstellung, welcher Wert die Balken unsichtbar macht PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0); PlotIndexSetDouble(1, PLOT_EMPTY_VALUE, 0); PlotIndexSetDouble(2, PLOT_EMPTY_VALUE, 0); //---Einstellung der Verschiebungswerte für jeden Takt PlotIndexSetInteger(0, PLOT_SHIFT, inpShift); PlotIndexSetInteger(1, PLOT_SHIFT, inpShift); PlotIndexSetInteger(2, PLOT_SHIFT, inpShift); //---Einstellung, von wo aus die Balken gezeichnet werden müssen PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, inpRed - 1); PlotIndexSetInteger(1, PLOT_DRAW_BEGIN, inpRed - 1); PlotIndexSetInteger(2, PLOT_DRAW_BEGIN, inpRed - 1); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Benutzerdefinierte Indikator-Iterationsfunktion| //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- //---Wenn keine ausreichenden Balken vorhanden sind, wird nicht berechnet if(rates_total < inpRed) { return rates_total; } //---Bestimmen, von wo aus die Berechnung beginnen soll int limit; if(prev_calculated < inpRed) limit = inpRed; else limit = prev_calculated - 1; //---Hauptberechnungsschleife for(int i = limit; i < rates_total; i++) { int shift = BarIndex2shift(i); double open = iOpen(_Symbol, _Period, shift); double high = iHigh(_Symbol, _Period, shift); double low = iLow(_Symbol, _Period, shift); double close = iClose(_Symbol, _Period, shift); double red = price[i - (inpRed)]; //Ermittlung des Wertes der roten Linie double blue = price[i - inpBlue]; //Ermittlung des Wertes der blauen Linie double yellow = price[i]; //Ermittlung des Wertes der gelben Linie //Es gibt drei Flags für diesen Filter //0 = verkaufen, 1= warten, 1 = kaufen // wir können kaufen, wenn 2 Linien über der roten Linie liegen // wir können verkaufen, wenn 2 Linien unterhalb der roten Linie liegen int direction = 0; direction += (yellow > red) ? 1 : 0; // Wenn Gelb über Rot liegt, 1 hinzufügen red = blue; blue = yellow; direction += (blue > red) ? 1 : 0; // Wenn Blau über Rot liegt, 1 hinzufügen. //Für Standardbalken ist nicht sichtbar bullBuffer1[i] = 0; bullBuffer2[i] = 0; bullBuffer3[i] = 0; bullBuffer4[i] = 0; bearBuffer1[i] = 0; bearBuffer2[i] = 0; bearBuffer3[i] = 0; bearBuffer4[i] = 0; rangeBuffer1[i] = 0; rangeBuffer2[i] = 0; rangeBuffer3[i] = 0; rangeBuffer4[i] = 0; //Wir weisen jedem Balken einen Wert zu, der dem Richtungsflag entspricht switch(direction) { case 0: // Ist Bärenmarkt { bearBuffer1[i] = open; bearBuffer2[i] = high; bearBuffer3[i] = low; bearBuffer4[i] = close; break; } case 1: // Ist Bullenmarkt { rangeBuffer1[i] = open; rangeBuffer2[i] = high; rangeBuffer3[i] = low; rangeBuffer4[i] = close; break; } case 2: // Ist Bereich Markt { bullBuffer1[i] = open; bullBuffer2[i] = high; bullBuffer3[i] = low; bullBuffer4[i] = close; break; } } } //--- Rückgabewert von prev_calculated für den nächsten Aufruf return(rates_total); } int BarIndex2shift(int bar) {return Bars(_Symbol, _Period) - bar - 1;} //+------------------------------------------------------------------+
//+------------------------------------------------------------------+ //|Farbkerzen.mq5 | //| Copyright 2020, Samuel Manoel de Souza | //| https://www.mql5.com/de/users/samuelmnl | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, Samuel Manoel de Souza" #property link "https://www.mql5.com/de/users/samuelmnl" #property version "1.00" #property indicator_chart_window #property indicator_buffers 12 #property indicator_plots 3 //--- plot bull #property indicator_label1 "bull" #property indicator_type1 DRAW_CANDLES #property indicator_color1 clrGreen,clrBlack,clrGreen #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- plot bear #property indicator_label2 "bear" #property indicator_type2 DRAW_CANDLES #property indicator_color2 clrRed,clrBlack,clrRed #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- Plotbereich #property indicator_label3 "wait" #property indicator_type3 DRAW_CANDLES #property indicator_color3 clrGold,clrBlack,clrGold #property indicator_style3 STYLE_SOLID #property indicator_width3 1 //--- Indikatorpuffer double bullBuffer1[]; double bullBuffer2[]; double bullBuffer3[]; double bullBuffer4[]; double bearBuffer1[]; double bearBuffer2[]; double bearBuffer3[]; double bearBuffer4[]; double rangeBuffer1[]; double rangeBuffer2[]; double rangeBuffer3[]; double rangeBuffer4[]; input int inpShift = 0; //Indikator Verschiebung input int inpBlue = 10;//Blue Shift input int inpRed = 20; //Red Shift //+------------------------------------------------------------------+ //| Benutzerdefinierte Initialisierungsfunktion für Indikatoren | //+------------------------------------------------------------------+ int OnInit() { if(inpBlue <= 0) { Alert("Blue Shift must be greater then 0!"); return INIT_PARAMETERS_INCORRECT; } if(inpRed <= inpBlue) { Alert("Red Shift must be greater then Blue Shift!"); return INIT_PARAMETERS_INCORRECT; } //--- Zuordnung von Indikatorpuffern SetIndexBuffer(0, bullBuffer1, INDICATOR_DATA); SetIndexBuffer(1, bullBuffer2, INDICATOR_DATA); SetIndexBuffer(2, bullBuffer3, INDICATOR_DATA); SetIndexBuffer(3, bullBuffer4, INDICATOR_DATA); SetIndexBuffer(4, bearBuffer1, INDICATOR_DATA); SetIndexBuffer(5, bearBuffer2, INDICATOR_DATA); SetIndexBuffer(6, bearBuffer3, INDICATOR_DATA); SetIndexBuffer(7, bearBuffer4, INDICATOR_DATA); SetIndexBuffer(8, rangeBuffer1, INDICATOR_DATA); SetIndexBuffer(9, rangeBuffer2, INDICATOR_DATA); SetIndexBuffer(10, rangeBuffer3, INDICATOR_DATA); SetIndexBuffer(11, rangeBuffer4, INDICATOR_DATA); //---Einstellung, welcher Wert die Balken unsichtbar macht PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0); PlotIndexSetDouble(1, PLOT_EMPTY_VALUE, 0); PlotIndexSetDouble(2, PLOT_EMPTY_VALUE, 0); //---Einstellung der Verschiebungswerte für jeden Takt PlotIndexSetInteger(0, PLOT_SHIFT, inpShift); PlotIndexSetInteger(1, PLOT_SHIFT, inpShift); PlotIndexSetInteger(2, PLOT_SHIFT, inpShift); //---Einstellung, von wo aus die Balken gezeichnet werden müssen PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, inpRed - 1); PlotIndexSetInteger(1, PLOT_DRAW_BEGIN, inpRed - 1); PlotIndexSetInteger(2, PLOT_DRAW_BEGIN, inpRed - 1); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Benutzerdefinierte Indikator-Iterationsfunktion | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- //---Wenn keine ausreichenden Balken vorhanden sind, wird nicht berechnet if(rates_total < inpRed) { return rates_total; } //---Festlegen, wo die Berechnung beginnen soll int limit; if(prev_calculated < inpRed) limit = inpRed; else limit = prev_calculated - 1; //---Hauptberechnungsschleife for(int i = limit; i < rates_total; i++) { int shift = BarIndex2shift(i); double open = iOpen(_Symbol, _Period, shift); double high = iHigh(_Symbol, _Period, shift); double low = iLow(_Symbol, _Period, shift); double close = iClose(_Symbol, _Period, shift); double red = price[i - (inpRed)]; //Ermittlung des Wertes der roten Linie double blue = price[i - inpBlue]; //Ermittlung des Wertes der blauen Linie double yellow = price[i]; //Ermittlung des Wertes der gelben Linie //Es gibt drei Flags für diesen Filter //0 = verkaufen, 1= warten, 1 = kaufen // wir können kaufen, wenn 2 Linien über der roten Linie liegen // wir können verkaufen, wenn 2 Linien unterhalb der roten Linie liegen int direction = 0; direction += (yellow > red) ? 1 : 0; // Wenn Gelb über Rot liegt, 1 hinzufügen red = blue; blue = yellow; direction += (blue > red) ? 1 : 0; // Wenn Blau über Rot liegt, 1 hinzufügen. //Für Standardbalken ist nicht sichtbar bullBuffer1[i] = 0; bullBuffer2[i] = 0; bullBuffer3[i] = 0; bullBuffer4[i] = 0; bearBuffer1[i] = 0; bearBuffer2[i] = 0; bearBuffer3[i] = 0; bearBuffer4[i] = 0; rangeBuffer1[i] = 0; rangeBuffer2[i] = 0; rangeBuffer3[i] = 0; rangeBuffer4[i] = 0; //Wir weisen jedem Balken einen Wert zu, der dem Richtungsflag entspricht switch(direction) { case 0: // Ist Bärenmarkt { bearBuffer1[i] = open; bearBuffer2[i] = high; bearBuffer3[i] = low; bearBuffer4[i] = close; break; } case 1: // Ist Bullenmarkt { rangeBuffer1[i] = open; rangeBuffer2[i] = high; rangeBuffer3[i] = low; rangeBuffer4[i] = close; break; } case 2: // Ist Bereich Markt { bullBuffer1[i] = open; bullBuffer2[i] = high; bullBuffer3[i] = low; bullBuffer4[i] = close; break; } } } //--- Rückgabewert von prev_calculated für den nächsten Aufruf return(rates_total); } int BarIndex2shift(int bar) {return Bars(_Symbol, _Period) - bar - 1;} //+------------------------------------------------------------------+
Vielen Dank für diesen Artikel. Ich konnte ihm folgen und ihn auf meine Charts anwenden. Meine Frage ist, ob Sie irgendwelche Artikel geschrieben haben, die erklären, wie man diesen Indikator in einem EA aufruft, um ihn für den automatischen Handel sowie als Strategietester mit Visualisierung zu verwenden?
PanteraNoire Strategietester mit Visualisierung zu verwenden?
Nein.
Sie müssen iCustom verwenden. Und Sie können die Puffernummern im Indikator sehen, um mehr über Farben und Werte zu erfahren.
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
Neuer Artikel Erkunden der Möglichkeiten mehrfarbige Kerzen zu erstellen :
In diesem Artikel gehe ich auf die Möglichkeiten der Erstellung von individuellen Indikatoren mit Kerzen ein und zeige deren Vor- und Nachteile auf.
Der große Vorteil dieser letzten Methode besteht darin, dass wir eine informativere Nutzeroberfläche erhalten, obwohl die Anzahl der benötigten Puffer erheblich steigt. Wir können diesen Vorteil jedoch noch weiter ausbauen, indem wir dafür sorgen, dass unsere Färbungsregel nicht nur Informationen über Geschäftsregeln, sondern auch über die Unterscheidung zwischen bullischen und bearischen Kerzen liefert. Dies ist einfach möglich, indem wir mit den Randfarben und Füllungen der zuvor betrachteten Kerzen arbeiten. Für jedes Design wollen wir, dass die Ränder und die Füllung der niedrigen Kerzen dieselbe Farbe haben, während wir für die Füllung der hohen Kerzen die Farbe Weiß verwenden, um in einem Chart mit weißem Hintergrund die Illusion von ungefüllten Kerzen zu erzeugen. Dieses Farbmuster ist in der folgenden Tabelle vereinfacht dargestellt.
Damit sind wir beim Ziel dieses Artikels angelangt, nämlich der Demonstration der Erstellung von Färbungsregeln gemäß einer Geschäftsregel, die auf einen Kerzenchart mit und ohne Füllung angewendet wird. Das Endergebnis unserer Arbeit ist in der folgenden Abbildung zu sehen.
Autor: Samuel Manoel De Souza