Indicator with multiple multi-colored plots

 

Hi all,

I'm relatively new to metatradted. I'm trying to create an indicator in MQL5 with 5 multicolored plots but only one is showing up when I run it. Can anyone show me how to do this or share an indicator that has multiple multi-colored plots? Thanks! 

//+------------------------------------------------------------------+
//|                                                     EMA_Dots.mq5 |
//|                                                   |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
#property version   "1.01"
#property indicator_separate_window
#property indicator_buffers 10
#property indicator_plots   5
//--- plot Current
#property indicator_label1  "Current"
#property indicator_type1   DRAW_COLOR_ARROW
#property indicator_color1  clrRed,clrLimeGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3

#property indicator_label2  "H1"
#property indicator_type12  DRAW_COLOR_ARROW
#property indicator_color2  clrRed,clrLimeGreen
#property indicator_style2  STYLE_SOLID
#property indicator_width2  3

#property indicator_label3  "H2"
#property indicator_type3   DRAW_COLOR_ARROW
#property indicator_color3  clrRed,clrLimeGreen
#property indicator_style3  STYLE_SOLID
#property indicator_width3  3

#property indicator_label4  "H3"
#property indicator_type4   DRAW_COLOR_ARROW
#property indicator_color4  clrRed,clrLimeGreen
#property indicator_style4  STYLE_SOLID
#property indicator_width4  3

#property indicator_label5  "H4"
#property indicator_type5   DRAW_COLOR_ARROW
#property indicator_color5  clrRed,clrLimeGreen
#property indicator_style5  STYLE_SOLID
#property indicator_width5  3

sinput int InpAlignEMAPeriod = 14;
//sinput ENUM_APPLIED_PRICE InpOpen = PRICE_OPEN;

//+------------------------------------------------------------------+
//| Global variables                                                 |
//+------------------------------------------------------------------+
ENUM_TIMEFRAMES TF[5];
int BarConv[5];
//--- indicator buffers
// EMA
double CurrentEMA_Buffer[]; //Data buffer for plot
double CurrentEMA_Colors[]; //Color buffer for plot
double CurrentEMA_Temp[];   // Temporary buffer for EMA copying
int handle_CurrentEMA = 0;  // Handle for Current EMA indicator

double H1EMA_Buffer[]; //Data buffer for plot
double H1EMA_Colors[]; //Color buffer for plot
double H1EMA_Temp[];   // Temporary buffer for EMA copying
int handle_H1EMA = 0;  // Handle for Current EMA indicator

double H2EMA_Buffer[]; //Data buffer for plot
double H2EMA_Colors[]; //Color buffer for plot
double H2EMA_Temp[];   // Temporary buffer for EMA copying
int handle_H2EMA = 0;  // Handle for Current EMA indicator

double H3EMA_Buffer[]; //Data buffer for plot
double H3EMA_Colors[]; //Color buffer for plot
double H3EMA_Temp[];   // Temporary buffer for EMA copying
int handle_H3EMA = 0;  // Handle for Current EMA indicator

double H4EMA_Buffer[]; //Data buffer for plot
double H4EMA_Colors[]; //Color buffer for plot
double H4EMA_Temp[];   // Temporary buffer for EMA copying
int handle_H4EMA = 0;  // Handle for Current EMA indicator
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   //logger.SetSetting("MTF Indicators","EMA_Dots","Errors",60);
   //logger.init();
  
   //ENUM_TIMEFRAMES period = Period();
   //ENUM_TIMEFRAMES test = PERIOD_M10;
   // Set TimeFrames
     switch(Period())
     {
      case PERIOD_M10:
         TF[0] = PERIOD_M10;
         TF[1] = PERIOD_H1;
         TF[2] = PERIOD_H4;
         TF[3] = PERIOD_D1;
         TF[4] = PERIOD_W1;
  
         BarConv[0] = 1;
         BarConv[1] = 6;
         BarConv[2] = 24;
         BarConv[3] = 144;
         BarConv[4] = 720;
         break;
        
      case PERIOD_M15:
         TF[0] = PERIOD_M15;
         TF[1] = PERIOD_H1;
         TF[2] = PERIOD_H4;
         TF[3] = PERIOD_D1;
         TF[4] = PERIOD_W1;
  
         BarConv[0] = 1;
         BarConv[1] = 4;
         BarConv[2] = 16;
         BarConv[3] = 96;
         BarConv[4] = 480;
         break;
        
      case PERIOD_M30:
         TF[0] = PERIOD_M30;
         TF[1] = PERIOD_H2;
         TF[2] = PERIOD_H8;
         TF[3] = PERIOD_D1;
         TF[4] = PERIOD_W1;
  
         BarConv[0] = 1;
         BarConv[1] = 4;
         BarConv[2] = 16;
         BarConv[3] = 48;
         BarConv[4] = 240;
         break;
        
      case PERIOD_H1:
         TF[0] = PERIOD_H1;
         TF[1] = PERIOD_H4;
         TF[2] = PERIOD_D1;
         TF[3] = PERIOD_W1;
         TF[4] = PERIOD_MN1;
  
         BarConv[0] = 1;
         BarConv[1] = 4;
         BarConv[2] = 24;
         BarConv[3] = 120;
         BarConv[4] = 528;
         break;
        
      case PERIOD_H4:
         TF[0] = PERIOD_H4;
         TF[1] = PERIOD_D1;
         TF[2] = PERIOD_W1;
         TF[3] = PERIOD_MN1;
         TF[4] = PERIOD_MN1;
  
         BarConv[0] = 1;
         BarConv[1] = 6;
         BarConv[2] = 30;
         BarConv[3] = 132;
         BarConv[4] = 132;
         break;
        
      case PERIOD_D1:
         TF[0] = PERIOD_D1;
         TF[1] = PERIOD_W1;
         TF[2] = PERIOD_MN1;
         TF[3] = PERIOD_MN1;
         TF[4] = PERIOD_MN1;
  
         BarConv[0] = 1;
         BarConv[1] = 5;
         BarConv[2] = 22;
         BarConv[3] = 22;
         BarConv[4] = 22;
         break;
        
      default:
         TF[0] = PERIOD_D1;
         TF[1] = PERIOD_W1;
         TF[2] = PERIOD_MN1;
         TF[3] = PERIOD_MN1;
         TF[4] = PERIOD_MN1;
        
         BarConv[0] = 1;
         BarConv[1] = 5;
         BarConv[2] = 22;
         BarConv[3] = 22;
         BarConv[4] = 22;
      break;
     }
    
   // CurrentEMA
   SetIndexBuffer(0,CurrentEMA_Buffer,INDICATOR_DATA);
   SetIndexBuffer(1,CurrentEMA_Colors,INDICATOR_COLOR_INDEX);  
   PlotIndexSetInteger(0, PLOT_COLOR_INDEXES, 2);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,LimeGreen);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,Red);
  
   // H1EMA
   SetIndexBuffer(2,H1EMA_Buffer,INDICATOR_DATA);
   SetIndexBuffer(3,H1EMA_Colors,INDICATOR_COLOR_INDEX);  
   PlotIndexSetInteger(2, PLOT_COLOR_INDEXES, 2);
   PlotIndexSetInteger(2,PLOT_LINE_COLOR,0,LimeGreen);
   PlotIndexSetInteger(2,PLOT_LINE_COLOR,1,Red);
  
   // H2EMA
   SetIndexBuffer(4,H2EMA_Buffer,INDICATOR_DATA);
   SetIndexBuffer(5,H2EMA_Colors,INDICATOR_COLOR_INDEX);  
   PlotIndexSetInteger(4, PLOT_COLOR_INDEXES, 2);
   PlotIndexSetInteger(4,PLOT_LINE_COLOR,0,LimeGreen);
   PlotIndexSetInteger(4,PLOT_LINE_COLOR,1,Red);
  
   // H3EMA
   SetIndexBuffer(6,H3EMA_Buffer,INDICATOR_DATA);
   SetIndexBuffer(7,H3EMA_Colors,INDICATOR_COLOR_INDEX);  
   PlotIndexSetInteger(6, PLOT_COLOR_INDEXES, 2);
   PlotIndexSetInteger(6,PLOT_LINE_COLOR,0,LimeGreen);
   PlotIndexSetInteger(6,PLOT_LINE_COLOR,1,Red);
  
   // H4EMA
   SetIndexBuffer(8,H4EMA_Buffer,INDICATOR_DATA);
   SetIndexBuffer(9,H4EMA_Colors,INDICATOR_COLOR_INDEX);  
   PlotIndexSetInteger(8, PLOT_COLOR_INDEXES, 2);
   PlotIndexSetInteger(8,PLOT_LINE_COLOR,0,LimeGreen);
   PlotIndexSetInteger(8,PLOT_LINE_COLOR,1,Red);
  
  
   //Handles
   handle_CurrentEMA = iMA(_Symbol,TF[0], InpAlignEMAPeriod * BarConv[0],0,MODE_EMA,PRICE_CLOSE);
   handle_H1EMA = iMA(_Symbol,TF[0], InpAlignEMAPeriod * BarConv[1],0,MODE_EMA,PRICE_OPEN);
   handle_H2EMA = iMA(_Symbol,TF[0], InpAlignEMAPeriod * BarConv[2],0,MODE_EMA,PRICE_OPEN);
   handle_H3EMA = iMA(_Symbol,TF[0], InpAlignEMAPeriod * BarConv[3],0,MODE_EMA,PRICE_OPEN);
   handle_H4EMA = iMA(_Symbol,TF[0], InpAlignEMAPeriod * BarConv[4],0,MODE_EMA,PRICE_OPEN);
      
//---
   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[])
  {
  for(int i=prev_calculated;i<=rates_total-1;i++)
   { //CurrentEMA
     CurrentEMA_Buffer[i] = 5;
     CopyBuffer(handle_CurrentEMA,0,BarsCalculated(handle_CurrentEMA)-i-1,1,CurrentEMA_Temp);
     double currentEMAVal = CurrentEMA_Temp[0];
          
     if(open[i]>currentEMAVal)
         { CurrentEMA_Colors[i] = 0; }
     else
         { CurrentEMA_Colors[i] = 1;}
    
     H1EMA_Buffer[i] = 10;
     CopyBuffer(handle_H1EMA,2,BarsCalculated(handle_H1EMA)-i-1,1,H1EMA_Temp);
     double H1EMAVal = H1EMA_Temp[0];
          
     if(open[i]>H1EMAVal)
         { H1EMA_Colors[i] = 0; }
     else
         { H1EMA_Colors[i] = 1;}
    
     H2EMA_Buffer[i] = 15;
     CopyBuffer(handle_H2EMA,4,BarsCalculated(handle_H2EMA)-i-1,1,H2EMA_Temp);
     double H2EMAVal = H2EMA_Temp[0];
          
     if(open[i]>H2EMAVal)
         { H2EMA_Colors[i] = 0; }
     else
         { H2EMA_Colors[i] = 1;}
    
     H3EMA_Buffer[i] = 20;
     CopyBuffer(handle_H3EMA,6,BarsCalculated(handle_H3EMA)-i-1,1,H3EMA_Temp);
     double H3EMAVal = H3EMA_Temp[0];
          
     if(open[i]>H3EMAVal)
         { H3EMA_Colors[i] = 0; }
     else
         { H3EMA_Colors[i] = 1;}
        
     H4EMA_Buffer[i] = 25;
     CopyBuffer(handle_H4EMA,8,BarsCalculated(handle_H4EMA)-i-1,1,H4EMA_Temp);
     double H4EMAVal = H4EMA_Temp[0];
          
     if(open[i]>H4EMAVal)
         { H4EMA_Colors[i] = 0; }
     else
         { H4EMA_Colors[i] = 1;}
   }
  
//---
  
//--- return value of prev_calculated for next call
   return(rates_total-1);
  }
//+------------------------------------------------------------------+

Files:
EMA_Dots.mq5  11 kb
 

Forum on trading, automated trading systems and testing trading strategies



Hello,

Please use the SRC button when you post code. Thank you.


This time, I edited it for you.


 
arickett:

Hi all,

I'm relatively new to metatradted. I'm trying to create an indicator in MQL5 with 5 multicolored plots but only one is showing up when I run it. Can anyone show me how to do this or share an indicator that has multiple multi-colored plots? Thanks!


There is a bug in MT5/mql5. (and in your code too but that's an other matter ;-))

Replace your SetIndexBuffer/PlotIndexSetInteger by :

// CurrentEMA
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_COLOR_ARROW);
   SetIndexBuffer(0,CurrentEMA_Buffer,INDICATOR_DATA);
   SetIndexBuffer(1,CurrentEMA_Colors,INDICATOR_COLOR_INDEX);

// H1EMA
   PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_COLOR_ARROW);
   SetIndexBuffer(2,H1EMA_Buffer,INDICATOR_DATA);
   SetIndexBuffer(3,H1EMA_Colors,INDICATOR_COLOR_INDEX);

// H2EMA
   PlotIndexSetInteger(2,PLOT_DRAW_TYPE,DRAW_COLOR_ARROW);
   SetIndexBuffer(4,H2EMA_Buffer,INDICATOR_DATA);
   SetIndexBuffer(5,H2EMA_Colors,INDICATOR_COLOR_INDEX);

// H3EMA
   PlotIndexSetInteger(3,PLOT_DRAW_TYPE,DRAW_COLOR_ARROW);
   SetIndexBuffer(6,H3EMA_Buffer,INDICATOR_DATA);
   SetIndexBuffer(7,H3EMA_Colors,INDICATOR_COLOR_INDEX);

// H4EMA
   PlotIndexSetInteger(4,PLOT_DRAW_TYPE,DRAW_COLOR_ARROW);
   SetIndexBuffer(8,H4EMA_Buffer,INDICATOR_DATA);
   SetIndexBuffer(9,H4EMA_Colors,INDICATOR_COLOR_INDEX);
 

I was wrong in my previous post, this is not a MT5/mql5 bug, I should not work in such things in the night

The problem is in this line :

#property indicator_type12  DRAW_COLOR_ARROW

must be

#property indicator_type2  DRAW_COLOR_ARROW
Reason: