Draw_Filling1

 
Guten Tag die Damen und Herren, ich bin langsam etwas am verzweifeln. Ich schaffe es nicht, das nur der Bereich zwischen 2 EMAs dynamisch gefärbt wird. 
Aktuell färbt der Indikator z.B. ausgehend von der EMA20 alles bis nach unten. Aber dieser Puffer sollte eigentlich nur den Bereich zwischen der EMA10 und EMA20 färben. 

Wie sollte ich dies im Allgemeinen als Code formulieren? 

Gruß
//+------------------------------------------------------------------+
//| Indicator properties                                             |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 40
#property indicator_plots   40
#property indicator_type19   DRAW_LINE 
#property indicator_color19  clrBlue
#property indicator_width19 3
#property indicator_type3   DRAW_LINE   
#property indicator_color3 clrBlack
#property indicator_width3 3

//Bandfärbungseigenschaften

#property indicator_type2   DRAW_FILLING
#property indicator_color2  clrGreen,clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

#property indicator_type5   DRAW_FILLING
#property indicator_color5  clrBlue,clrOrange
#property indicator_style5  STYLE_SOLID
#property indicator_width5  1

#property indicator_type8   DRAW_FILLING
#property indicator_color8  clrPurple,clrYellow
#property indicator_style8  STYLE_SOLID
#property indicator_width8  1

#property indicator_type11   DRAW_FILLING
#property indicator_color11  clrBlue,clrOrange
#property indicator_style11 STYLE_SOLID
#property indicator_width11  1


//+------------------------------------------------------------------+
//| Indicator input                                                |
//+------------------------------------------------------------------+
input int    EMA10_Period=10;
input int    EMA20_Period=20;
      int    EMA150_Period=150;
input int    EMA200_Period=200;
      double EMA_Price=PRICE_CLOSE;

//+------------------------------------------------------------------+
//| Indicator buffers                                                |
//+------------------------------------------------------------------+
double EMA10_Buffer[];
double EMA20_Buffer[];
double EMA150_Buffer[];
double EMA200_Buffer[];
double CustomEMA_Buffer[];
double CustomEMA2_Buffer[];
double CustomEMA3_Buffer[];
double CustomEMA_Band1_Buffer[];
double CustomEMA_Band2_Buffer[];
double CustomEMA_Band3_Buffer[];
double CustomEMA_Band4_Buffer[];
double CustomEMA_Band5_Buffer[];
double CustomEMA_Band6_Buffer[];

//CopyBuffer
double CustomEMA_B1_Buffer[];
double CustomEMA_B2_Buffer[];
double C2_Buffer[];
double CustomEMA_B3_Buffer[];
double CustomEMA_B4_Buffer[];
double E200_Buffer[];
double CustomEMA_B5_Buffer[];
double CustomEMA_B6_Buffer[];
double C1_Buffer[];

//Filling Buffer
double Filling_Buffer1[];
double Filling_Buffer2[];
double Filling_Buffer3[];
double Filling_Buffer4[];
double Filling_Buffer5[];
double Filling_Buffer6[];
double Filling_Buffer7[];
double Filling_Buffer8[];
double Filling_Buffer9[];
double Filling_Buffer10[];


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
    IndicatorSetString(INDICATOR_SHORTNAME, "Optimierter Custom EMA");
    
    SetIndexBuffer(0, EMA10_Buffer);
    SetIndexBuffer(1, EMA20_Buffer);
    SetIndexBuffer(2, Filling_Buffer1);
    SetIndexBuffer(3, CustomEMA_Buffer);
    SetIndexBuffer(4, CustomEMA_Band1_Buffer);
    SetIndexBuffer(5, Filling_Buffer2);
    SetIndexBuffer(6, CustomEMA_B1_Buffer);
    SetIndexBuffer(7, CustomEMA_Band2_Buffer);
    SetIndexBuffer(8, Filling_Buffer3);
    SetIndexBuffer(9, CustomEMA_B2_Buffer);
    SetIndexBuffer(10, CustomEMA2_Buffer);
    SetIndexBuffer(11, Filling_Buffer4);
    SetIndexBuffer(12, C2_Buffer);
    SetIndexBuffer(13, CustomEMA_Band3_Buffer);
    SetIndexBuffer(14, Filling_Buffer5);
    SetIndexBuffer(15, CustomEMA_B3_Buffer);
    SetIndexBuffer(16, CustomEMA_Band4_Buffer);
    SetIndexBuffer(17, Filling_Buffer6);
    SetIndexBuffer(18, CustomEMA_B4_Buffer);
    SetIndexBuffer(19, EMA200_Buffer);
    SetIndexBuffer(20, Filling_Buffer7);
    SetIndexBuffer(21, E200_Buffer);
    SetIndexBuffer(22, CustomEMA_Band5_Buffer);
    SetIndexBuffer(23, Filling_Buffer8);
    SetIndexBuffer(24, CustomEMA_B5_Buffer);
    SetIndexBuffer(25, CustomEMA_Band6_Buffer);
    SetIndexBuffer(26, Filling_Buffer9);
    SetIndexBuffer(27, CustomEMA_B6_Buffer);
    SetIndexBuffer(28, CustomEMA3_Buffer);
    SetIndexBuffer(29, Filling_Buffer10);
    SetIndexBuffer(30, C1_Buffer);
    
    
    //Arrays Filling_Buffer
    ArraySetAsSeries(Filling_Buffer1, true);
    ArraySetAsSeries(Filling_Buffer2, true);
    ArraySetAsSeries(Filling_Buffer3, true);
    ArraySetAsSeries(Filling_Buffer4, true);
    ArraySetAsSeries(Filling_Buffer5, true);
    ArraySetAsSeries(Filling_Buffer6, true);
    ArraySetAsSeries(Filling_Buffer7, true);
    ArraySetAsSeries(Filling_Buffer8, true);
    ArraySetAsSeries(Filling_Buffer9, true);
    ArraySetAsSeries(Filling_Buffer10, true);
    

    return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
{
    int EMA10_Handle = iMA(NULL, 0, EMA10_Period, 0, MODE_EMA, PRICE_CLOSE);
    int EMA20_Handle = iMA(NULL, 0, EMA20_Period, 0, MODE_EMA, PRICE_CLOSE);
    int EMA150_Handle = iMA(NULL, 0, EMA150_Period, 0, MODE_EMA, PRICE_CLOSE);
    int EMA200_Handle = iMA(NULL, 0, EMA200_Period, 0, MODE_EMA, PRICE_CLOSE);

    CopyBuffer(EMA10_Handle, 0, 0, rates_total, EMA10_Buffer);
    CopyBuffer(EMA20_Handle, 0, 0, rates_total, EMA20_Buffer);
    CopyBuffer(EMA150_Handle, 0, 0, rates_total, EMA150_Buffer);
    CopyBuffer(EMA200_Handle, 0, 0, rates_total, EMA200_Buffer);
    
for (int i = 0; i < rates_total; i++) 
{
    // Custom_EMAs
    CustomEMA_Buffer[i] = (EMA20_Buffer[i] + EMA150_Buffer[i]) / 2.0;
    CustomEMA2_Buffer[i] = (CustomEMA_Buffer[i] + EMA200_Buffer[i]) / 2.0;
    CustomEMA3_Buffer[i] = (2.0 * EMA200_Buffer[i]) - CustomEMA_Buffer[i];
    
    //Buffer_Copys
    CustomEMA_B1_Buffer[i] = CustomEMA_Band1_Buffer[i];
    CustomEMA_B2_Buffer[i] = CustomEMA_Band2_Buffer[i];
    C2_Buffer[i] = CustomEMA2_Buffer[i];
    CustomEMA_B3_Buffer[i] = CustomEMA3_Buffer[i];
    CustomEMA_B4_Buffer[i] = CustomEMA_Band4_Buffer[i];
    E200_Buffer[i] = EMA200_Buffer[i];
    CustomEMA_B5_Buffer[i] = CustomEMA_Band5_Buffer[i];
    CustomEMA_B6_Buffer[i] = CustomEMA_Band6_Buffer[i];
    C1_Buffer[i] = CustomEMA_Buffer[i];
    
// CustomEMA to CustomEMA2
double EMA_diff1 = CustomEMA2_Buffer[i] - CustomEMA_Buffer[i];
double a1_up = CustomEMA_Buffer[i] + 0.33 * EMA_diff1;
double a1_down = CustomEMA_Buffer[i] + 0.67 * EMA_diff1;

CustomEMA_Band1_Buffer[i] = a1_up;
CustomEMA_Band2_Buffer[i] = a1_down;

// CustomEMA2 to EMA200
double EMA_diff2 = EMA200_Buffer[i] - CustomEMA2_Buffer[i];
double a2_up = CustomEMA2_Buffer[i] + 0.33 * EMA_diff2;
double a2_down = CustomEMA2_Buffer[i] + 0.67 * EMA_diff2;

CustomEMA_Band3_Buffer[i] = a2_up;
CustomEMA_Band4_Buffer[i] = a2_down;

// EMA200 to CustomEMA3
double EMA_diff3 = CustomEMA3_Buffer[i] - EMA200_Buffer[i];
double a3_up = EMA200_Buffer[i] + 0.33 * EMA_diff3;
double a3_down = EMA200_Buffer[i] + 0.67 * EMA_diff3;

CustomEMA_Band5_Buffer[i] = a3_up;
CustomEMA_Band6_Buffer[i] = a3_down;


 Filling_Buffer1[i] = EMA10_Buffer[i] - EMA20_Buffer[i];
 Filling_Buffer2[i] = C1_Buffer[i] - CustomEMA_Band1_Buffer[i];
 Filling_Buffer3[i] = CustomEMA_B1_Buffer[i] - CustomEMA_Band2_Buffer[i];
 Filling_Buffer4[i] = CustomEMA_B2_Buffer[i] - CustomEMA2_Buffer[i];
}

return rates_total;
}
//+------------------------------------------------------------------+

 
Schau Dir den Ichimoku-Indikator (auf Deinem PC unter \MQL5\Indicators\Examples\Ichimoku.mq5) an, der verwendet auch farbige Flächen.
 
Vielen Dank für diesen entscheidenden Hinweis. Er funktioniert nur wie es soll.

Vielen Dank dafür