Diskussion zum Artikel "Erkunden der Möglichkeiten mehrfarbige Kerzen zu erstellen"

 

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

 
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

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

Creación de indicadores de tick en MQL5
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.