Author: Copyright � 2008, Ulterior (FF)
0 Views
0 Downloads
0 Favorites
SR_TLB
//+------------------------------------------------------------------+
//|                                                       SR_TLB.mq5 |
//|                                  Copyright © 2008, Ulterior (FF) |
//+------------------------------------------------------------------+
//---- The author of the indicator
#property copyright "Copyright © 2008, Ulterior (FF)"
//---- A ink to the author's site 
#property link      "http://localhost"
//---- the nummber of the indicator version
#property version   "1.00"
#property description "Support and Resistance MTF Trend Line Breaks"
//---- The indicator is drawn in the main window
#property indicator_chart_window 
//---- the number of indicator buffers is 42
#property indicator_buffers 42
//---- 0 graphical constructions used
#property indicator_plots   0
//+----------------------------------------------+
//| Input parameters of the indicator            |
//+----------------------------------------------+
input int LB=3;
input int maxBarsForPeriod=1000;
input bool showM01 = true;
input bool showM02 = true;
input bool showM03 = true;
input bool showM04 = true;
input bool showM05 = true;
input bool showM06 = true;
input bool showM10 = true;
input bool showM12 = true;
input bool showM15 = true;
input bool showM20 = true;
input bool showM30 = true;
input bool showH01 = true;
input bool showH02 = true;
input bool showH03 = true;
input bool showH04 = true;
input bool showH06 = true;
input bool showH08 = true;
input bool showH12 = true;
input bool showD01 = true;
input bool showW01 = true;
input bool showMN1 = true;
//+----------------------------------------------+
//---- Declaring dynamic arrays that
// will further be used as indicator bufers
double TLBMax_M01[];
double TLBMax_M02[];
double TLBMax_M03[];
double TLBMax_M04[];
double TLBMax_M05[];
double TLBMax_M06[];
double TLBMax_M10[];
double TLBMax_M12[];
double TLBMax_M15[];
double TLBMax_M20[];
double TLBMax_M30[];
double TLBMax_H01[];
double TLBMax_H02[];
double TLBMax_H03[];
double TLBMax_H04[];
double TLBMax_H06[];
double TLBMax_H08[];
double TLBMax_H12[];
double TLBMax_D01[];
double TLBMax_W01[];
double TLBMax_MN1[];

double TLBMin_M01[];
double TLBMin_M02[];
double TLBMin_M03[];
double TLBMin_M04[];
double TLBMin_M05[];
double TLBMin_M06[];
double TLBMin_M10[];
double TLBMin_M12[];
double TLBMin_M15[];
double TLBMin_M20[];
double TLBMin_M30[];
double TLBMin_H01[];
double TLBMin_H02[];
double TLBMin_H03[];
double TLBMin_H04[];
double TLBMin_H06[];
double TLBMin_H08[];
double TLBMin_H12[];
double TLBMin_D01[];
double TLBMin_W01[];
double TLBMin_MN1[];
//---- Declaring integer variables of data calculation start
int min_rates_total;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+  
void OnInit()
  {
//---- Initialization of variables of the start of data calculation
   min_rates_total=int(1);

   set_prevBarTime(PERIOD_M1,NULL);
   set_prevBarTime(PERIOD_M2,NULL);
   set_prevBarTime(PERIOD_M3,NULL);
   set_prevBarTime(PERIOD_M4,NULL);
   set_prevBarTime(PERIOD_M5,NULL);
   set_prevBarTime(PERIOD_M6,NULL);
   set_prevBarTime(PERIOD_M10,NULL);
   set_prevBarTime(PERIOD_M12,NULL);
   set_prevBarTime(PERIOD_M15,NULL);
   set_prevBarTime(PERIOD_M20,NULL);
   set_prevBarTime(PERIOD_M30,NULL);
   set_prevBarTime(PERIOD_H1,NULL);
   set_prevBarTime(PERIOD_H2,NULL);
   set_prevBarTime(PERIOD_H3,NULL);
   set_prevBarTime(PERIOD_H4,NULL);
   set_prevBarTime(PERIOD_H6,NULL);
   set_prevBarTime(PERIOD_H8,NULL);
   set_prevBarTime(PERIOD_H12,NULL);
   set_prevBarTime(PERIOD_D1,NULL);
   set_prevBarTime(PERIOD_W1,NULL);
   set_prevBarTime(PERIOD_MN1,NULL);

//---- Set dynamic arrays as buffers for storing data
   Init(0,TLBMax_M01);
   Init(1,TLBMax_M02);
   Init(2,TLBMax_M03);
   Init(3,TLBMax_M04);
   Init(4,TLBMax_M05);
   Init(5,TLBMax_M06);
   Init(6,TLBMax_M10);
   Init(7,TLBMax_M12);
   Init(8,TLBMax_M15);
   Init(9,TLBMax_M20);
   Init(10,TLBMax_M30);
   Init(11,TLBMax_H01);
   Init(12,TLBMax_H02);
   Init(13,TLBMax_H03);
   Init(14,TLBMax_H04);
   Init(15,TLBMax_H06);
   Init(16,TLBMax_H08);
   Init(17,TLBMax_H12);
   Init(18,TLBMax_D01);
   Init(19,TLBMax_W01);
   Init(20,TLBMax_MN1);

   Init(21,TLBMin_M01);
   Init(22,TLBMin_M02);
   Init(23,TLBMin_M03);
   Init(24,TLBMin_M04);
   Init(25,TLBMin_M05);
   Init(26,TLBMin_M06);
   Init(27,TLBMin_M10);
   Init(28,TLBMin_M12);
   Init(29,TLBMin_M15);
   Init(30,TLBMin_M20);
   Init(31,TLBMin_M30);
   Init(32,TLBMin_H01);
   Init(33,TLBMin_H02);
   Init(34,TLBMin_H03);
   Init(35,TLBMin_H04);
   Init(36,TLBMin_H06);
   Init(37,TLBMin_H08);
   Init(38,TLBMin_H12);
   Init(39,TLBMin_D01);
   Init(40,TLBMin_W01);
   Init(41,TLBMin_MN1);

//---- Set accuracy of displaying for the indicator values
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);

//---- Creating labels for displaying in DataWindow and the name for displaying in a separate sub-window and in a tooltip
   IndicatorSetString(INDICATOR_SHORTNAME,"3 Line Break On Chart +levels");
//----
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Init(int Number,double  &IndArray[])
  {
//---- Set a dynamic array as an indicator buffer
   SetIndexBuffer(Number,IndArray,INDICATOR_CALCULATIONS);
//----  Indexing elements in the buffer as in timeseries
   ArraySetAsSeries(IndArray,true);
//----
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+    
void OnDeinit(const int reason)
  {
//----
   DeleteHLineObject(getPeriodAsString(PERIOD_M1)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_M1)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_M1)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_M1)+" Res C");

   DeleteHLineObject(getPeriodAsString(PERIOD_M2)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_M2)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_M2)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_M2)+" Res C");

   DeleteHLineObject(getPeriodAsString(PERIOD_M3)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_M3)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_M3)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_M3)+" Res C");

   DeleteHLineObject(getPeriodAsString(PERIOD_M4)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_M4)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_M4)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_M4)+" Res C");

   DeleteHLineObject(getPeriodAsString(PERIOD_M5)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_M5)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_M5)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_M5)+" Res C");

   DeleteHLineObject(getPeriodAsString(PERIOD_M6)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_M6)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_M6)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_M6)+" Res C");

   DeleteHLineObject(getPeriodAsString(PERIOD_M10)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_M10)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_M10)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_M10)+" Res C");

   DeleteHLineObject(getPeriodAsString(PERIOD_M12)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_M12)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_M12)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_M12)+" Res C");

   DeleteHLineObject(getPeriodAsString(PERIOD_M15)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_M15)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_M15)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_M15)+" Res C");

   DeleteHLineObject(getPeriodAsString(PERIOD_M20)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_M20)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_M20)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_M20)+" Res C");

   DeleteHLineObject(getPeriodAsString(PERIOD_M30)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_M30)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_M30)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_M30)+" Res C");

   DeleteHLineObject(getPeriodAsString(PERIOD_H1)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_H1)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_H1)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_H1)+" Res C");

   DeleteHLineObject(getPeriodAsString(PERIOD_H2)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_H2)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_H2)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_H2)+" Res C");

   DeleteHLineObject(getPeriodAsString(PERIOD_H3)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_H3)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_H3)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_H3)+" Res C");

   DeleteHLineObject(getPeriodAsString(PERIOD_H4)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_H4)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_H4)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_H4)+" Res C");

   DeleteHLineObject(getPeriodAsString(PERIOD_H6)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_H6)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_H6)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_H6)+" Res C");

   DeleteHLineObject(getPeriodAsString(PERIOD_H8)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_H8)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_H8)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_H8)+" Res C");

   DeleteHLineObject(getPeriodAsString(PERIOD_H12)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_H12)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_H12)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_H12)+" Res C");

   DeleteHLineObject(getPeriodAsString(PERIOD_D1)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_D1)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_D1)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_D1)+" Res C");

   DeleteHLineObject(getPeriodAsString(PERIOD_W1)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_W1)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_W1)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_W1)+" Res C");

   DeleteHLineObject(getPeriodAsString(PERIOD_MN1)+" Sup");
   DeleteHLineObject(getPeriodAsString(PERIOD_MN1)+" Res");
   DeleteHLineObject(getPeriodAsString(PERIOD_MN1)+" Sup C");
   DeleteHLineObject(getPeriodAsString(PERIOD_MN1)+" Res C");
//----
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(
                const int rates_total,    // amount of history in bars at the current tick
                const int prev_calculated,// amount of history in bars at the previous tick
                const datetime &Time[],
                const double &Open[],
                const double& high[],     // A price array of price maximums for the calculation of the indicator
                const double& Low[],      // A price array of price minimums for the calculation of the indicator
                const double &Close[],
                const long &Tick_volume[],
                const long &Volume[],
                const int &Spread[]
                )
  {
//---- Indexing elements in arrays as in timeseries  
   ArraySetAsSeries(Time,true);

   if( Period() <= PERIOD_M1 && showM01 ) displayPeriod( PERIOD_M1,Time );
   if( Period() <= PERIOD_M2 && showM02 ) displayPeriod( PERIOD_M2,Time );
   if( Period() <= PERIOD_M3 && showM03 ) displayPeriod( PERIOD_M3,Time );
   if( Period() <= PERIOD_M4 && showM04 ) displayPeriod( PERIOD_M4,Time );
   if( Period() <= PERIOD_M5 && showM05 ) displayPeriod( PERIOD_M5,Time );
   if( Period() <= PERIOD_M6 && showM05 ) displayPeriod( PERIOD_M6,Time );
   if( Period() <= PERIOD_M10 && showM10 ) displayPeriod( PERIOD_M10,Time );
   if( Period() <= PERIOD_M12 && showM12 ) displayPeriod( PERIOD_M12,Time );
   if( Period() <= PERIOD_M15 && showM15 ) displayPeriod( PERIOD_M15,Time );
   if( Period() <= PERIOD_M20 && showM20 ) displayPeriod( PERIOD_M20,Time );
   if( Period() <= PERIOD_M30 && showM30 ) displayPeriod( PERIOD_M30,Time );
   if( Period() <= PERIOD_H1 && showH01 ) displayPeriod( PERIOD_H1,Time );
   if( Period() <= PERIOD_H2 && showH02 ) displayPeriod( PERIOD_H2,Time );
   if( Period() <= PERIOD_H3 && showH03 ) displayPeriod( PERIOD_H3,Time );
   if( Period() <= PERIOD_H4 && showH04 ) displayPeriod( PERIOD_H4,Time );
   if( Period() <= PERIOD_H6 && showH06 ) displayPeriod( PERIOD_H6,Time );
   if( Period() <= PERIOD_H8 && showH08 ) displayPeriod( PERIOD_H8,Time );
   if( Period() <= PERIOD_H12 && showH12 ) displayPeriod( PERIOD_H12,Time );
   if( Period() <= PERIOD_D1 && showD01 ) displayPeriod( PERIOD_D1,Time );
   if( Period() <= PERIOD_W1 && showW01 ) displayPeriod( PERIOD_W1,Time );
   if( Period() <= PERIOD_MN1 && showMN1 ) displayPeriod( PERIOD_MN1,Time );
//----     
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Diap(ENUM_TIMEFRAMES mtPeriod,bool up,int C,int index)
  {
//----
   int i;
   double MM=0.0;
   if(up)
     {
      MM=get_max(mtPeriod,index);
      for(i=1; i<C; i++)
         if(get_max(mtPeriod,index-i)>MM)
            MM=get_max(mtPeriod,index-i);
     }
   if(!up)
     {
      MM=get_min(mtPeriod,index);
      for(i=1; i<C; i++)
         if(get_min(mtPeriod,index-i)<MM)
            MM=get_min(mtPeriod,index-i);
     }
//----
   return(MM);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DeleteHLineObject(string name)
  {
//----
   ObjectDelete(0,name);
   ObjectDelete(0,name+"_Label");
//----
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ShowHLineObject(string name,color clr,int style,double dValue,int index,const datetime  &Time[])
  {
//----
   if(ObjectFind(0,name))
     {
      CreateHLineObject(name,clr,style,dValue,index,Time);
     }

//if(ShowLineLabels)
     {
      ObjectMove(0,name+"_Label",0,Time[0]+_Period*index,dValue);
      ObjectSetInteger(0,name+"_Label",OBJPROP_STYLE,style);
     }

   ObjectMove(0,name,0,0,dValue);
//----
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CreateHLineObject(string name,color clr,int style,double dValue,int index,const datetime  &Time[])
  {
//----
//if(ShowLineLabels)
     {
      ObjectCreate(0,name+"_Label",OBJ_TEXT,0,Time[0]+_Period*index,dValue);
      ObjectSetString(0,name+"_Label",OBJPROP_FONT,"Verdana");
      ObjectSetInteger(0,name+"_Label",OBJPROP_FONTSIZE,7);
      ObjectSetInteger(0,name+"_Label",OBJPROP_COLOR,clr);
      ObjectSetInteger(0,name+"_Label",OBJPROP_BACK,false);
      ObjectSetInteger(0,name+"_Label",OBJPROP_ANCHOR,ANCHOR_LOWER);
      ObjectSetString(0,name+"_Label",OBJPROP_TEXT,name);
     }

   ObjectCreate(0,name,OBJ_HLINE,0,Time[0],dValue);
   ObjectSetInteger(0,name,OBJPROP_STYLE,style);
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
   ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
   ObjectSetInteger(0,name,OBJPROP_BACK,false);
//----
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string getPeriodAsString(ENUM_TIMEFRAMES mtPeriod)
  {
//----
   string periodname=NULL;
   switch(mtPeriod)
     {
      case PERIOD_M1:  { periodname = "M1"; break; }
      case PERIOD_M2:  { periodname = "M2"; break; }
      case PERIOD_M3:  { periodname = "M3"; break; }
      case PERIOD_M4:  { periodname = "M4"; break; }
      case PERIOD_M5:  { periodname = "M5"; break; }
      case PERIOD_M6:  { periodname = "M6"; break; }
      case PERIOD_M10: { periodname = "M10"; break; }
      case PERIOD_M12: { periodname = "M12"; break; }
      case PERIOD_M15: { periodname = "M15"; break; }
      case PERIOD_M20: { periodname = "M20"; break; }
      case PERIOD_M30: { periodname = "M30"; break; }
      case PERIOD_H1:  { periodname = "H1"; break; }
      case PERIOD_H2:  { periodname = "H2"; break; }
      case PERIOD_H3:  { periodname = "H3"; break; }
      case PERIOD_H4:  { periodname = "H4"; break; }
      case PERIOD_H6:  { periodname = "H6"; break; }
      case PERIOD_H8:  { periodname = "H8"; break; }
      case PERIOD_H12: { periodname = "H12"; break; }
      case PERIOD_D1:  { periodname = "D1"; break; }
      case PERIOD_W1:  { periodname = "W1"; break; }
      case PERIOD_MN1: { periodname = "MN1"; break; }
     }
//----
   return(periodname);
  }

datetime prevBarTime_M01 = NULL;
datetime prevBarTime_M02 = NULL;
datetime prevBarTime_M03 = NULL;
datetime prevBarTime_M04 = NULL;
datetime prevBarTime_M05 = NULL;
datetime prevBarTime_M06 = NULL;
datetime prevBarTime_M10 = NULL;
datetime prevBarTime_M12 = NULL;
datetime prevBarTime_M15 = NULL;
datetime prevBarTime_M20 = NULL;
datetime prevBarTime_M30 = NULL;
datetime prevBarTime_H01 = NULL;
datetime prevBarTime_H02 = NULL;
datetime prevBarTime_H03 = NULL;
datetime prevBarTime_H04 = NULL;
datetime prevBarTime_H06 = NULL;
datetime prevBarTime_H08 = NULL;
datetime prevBarTime_H12 = NULL;
datetime prevBarTime_D01 = NULL;
datetime prevBarTime_W01 = NULL;
datetime prevBarTime_MN1 = NULL;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void set_prevBarTime(ENUM_TIMEFRAMES mtPeriod_,datetime value)
  {
//----
   switch(mtPeriod_)
     {
      case PERIOD_M1:  { prevBarTime_M01 = value; break; }
      case PERIOD_M2:  { prevBarTime_M02 = value; break; }
      case PERIOD_M3:  { prevBarTime_M03 = value; break; }
      case PERIOD_M4:  { prevBarTime_M04 = value; break; }
      case PERIOD_M5:  { prevBarTime_M05 = value; break; }
      case PERIOD_M6:  { prevBarTime_M06 = value; break; }
      case PERIOD_M10: { prevBarTime_M10 = value; break; }
      case PERIOD_M15: { prevBarTime_M15 = value; break; }
      case PERIOD_M12: { prevBarTime_M12 = value; break; }
      case PERIOD_M20: { prevBarTime_M20 = value; break; }
      case PERIOD_M30: { prevBarTime_M30 = value; break; }
      case PERIOD_H1:  { prevBarTime_H01 = value; break; }
      case PERIOD_H2:  { prevBarTime_H02 = value; break; }
      case PERIOD_H3:  { prevBarTime_H03 = value; break; }
      case PERIOD_H4:  { prevBarTime_H04 = value; break; }
      case PERIOD_H6:  { prevBarTime_H06 = value; break; }
      case PERIOD_H8:  { prevBarTime_H08 = value; break; }
      case PERIOD_H12: { prevBarTime_H12 = value; break; }
      case PERIOD_D1:  { prevBarTime_D01 = value; break; }
      case PERIOD_W1:  { prevBarTime_W01 = value; break; }
      case PERIOD_MN1: { prevBarTime_MN1 = value; break; }
     }
//----
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
datetime get_prevBarTime(ENUM_TIMEFRAMES mtPeriod)
  {
//----
   switch(mtPeriod)
     {
      case PERIOD_M1:  { return(prevBarTime_M01); break; }
      case PERIOD_M2:  { return(prevBarTime_M02); break; }
      case PERIOD_M3:  { return(prevBarTime_M03); break; }
      case PERIOD_M4:  { return(prevBarTime_M04); break; }
      case PERIOD_M5:  { return(prevBarTime_M05); break; }
      case PERIOD_M6:  { return(prevBarTime_M06); break; }
      case PERIOD_M10: { return(prevBarTime_M10); break; }
      case PERIOD_M12: { return(prevBarTime_M12); break; }
      case PERIOD_M15: { return(prevBarTime_M15); break; }
      case PERIOD_M20: { return(prevBarTime_M20); break; }
      case PERIOD_M30: { return(prevBarTime_M30); break; }
      case PERIOD_H1:  { return(prevBarTime_H01); break; }
      case PERIOD_H2:  { return(prevBarTime_H02); break; }
      case PERIOD_H3:  { return(prevBarTime_H03); break; }
      case PERIOD_H4:  { return(prevBarTime_H04); break; }
      case PERIOD_H6:  { return(prevBarTime_H06); break; }
      case PERIOD_H8:  { return(prevBarTime_H08); break; }
      case PERIOD_H12: { return(prevBarTime_H12); break; }
      case PERIOD_D1:  { return(prevBarTime_D01); break; }
      case PERIOD_W1:  { return(prevBarTime_W01); break; }
      case PERIOD_MN1: { return(prevBarTime_MN1); break; }
     }
//----
   return(NULL);
  }

datetime prevBarCount_M01 = NULL;
datetime prevBarCount_M02 = NULL;
datetime prevBarCount_M03 = NULL;
datetime prevBarCount_M04 = NULL;
datetime prevBarCount_M05 = NULL;
datetime prevBarCount_M06 = NULL;
datetime prevBarCount_M10 = NULL;
datetime prevBarCount_M12 = NULL;
datetime prevBarCount_M15 = NULL;
datetime prevBarCount_M20 = NULL;
datetime prevBarCount_M30 = NULL;
datetime prevBarCount_H01 = NULL;
datetime prevBarCount_H02 = NULL;
datetime prevBarCount_H03 = NULL;
datetime prevBarCount_H04 = NULL;
datetime prevBarCount_H06 = NULL;
datetime prevBarCount_H08 = NULL;
datetime prevBarCount_H12 = NULL;
datetime prevBarCount_D01 = NULL;
datetime prevBarCount_W01 = NULL;
datetime prevBarCount_MN1 = NULL;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void set_prevBarCount(ENUM_TIMEFRAMES mtPeriod,int value)
  {
//----
   switch(mtPeriod)
     {
      case PERIOD_M1:  { prevBarCount_M01 = value; break; }
      case PERIOD_M2:  { prevBarCount_M02 = value; break; }
      case PERIOD_M3:  { prevBarCount_M03 = value; break; }
      case PERIOD_M4:  { prevBarCount_M04 = value; break; }
      case PERIOD_M5:  { prevBarCount_M05 = value; break; }
      case PERIOD_M6:  { prevBarCount_M06 = value; break; }
      case PERIOD_M10: { prevBarCount_M10 = value; break; }
      case PERIOD_M12: { prevBarCount_M12 = value; break; }
      case PERIOD_M15: { prevBarCount_M15 = value; break; }
      case PERIOD_M20: { prevBarCount_M20 = value; break; }
      case PERIOD_M30: { prevBarCount_M30 = value; break; }
      case PERIOD_H1:  { prevBarCount_H01 = value; break; }
      case PERIOD_H2:  { prevBarCount_H02 = value; break; }
      case PERIOD_H3:  { prevBarCount_H03 = value; break; }
      case PERIOD_H4:  { prevBarCount_H04 = value; break; }
      case PERIOD_H6:  { prevBarCount_H06 = value; break; }
      case PERIOD_H8:  { prevBarCount_H08 = value; break; }
      case PERIOD_H12: { prevBarCount_H12 = value; break; }
      case PERIOD_D1:  { prevBarCount_D01 = value; break; }
      case PERIOD_W1:  { prevBarCount_W01 = value; break; }
      case PERIOD_MN1: { prevBarCount_MN1 = value; break; }
     }
//----
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
datetime get_prevBarCount(ENUM_TIMEFRAMES mtPeriod)
  {
//----
   switch(mtPeriod)
     {
      case PERIOD_M1:  { return(prevBarCount_M01); break; }
      case PERIOD_M2:  { return(prevBarCount_M02); break; }
      case PERIOD_M3:  { return(prevBarCount_M03); break; }
      case PERIOD_M4:  { return(prevBarCount_M04); break; }
      case PERIOD_M5:  { return(prevBarCount_M05); break; }
      case PERIOD_M6:  { return(prevBarCount_M06); break; }
      case PERIOD_M10: { return(prevBarCount_M10); break; }
      case PERIOD_M12: { return(prevBarCount_M12); break; }
      case PERIOD_M15: { return(prevBarCount_M15); break; }
      case PERIOD_M20: { return(prevBarCount_M20); break; }
      case PERIOD_M30: { return(prevBarCount_M30); break; }
      case PERIOD_H1:  { return(prevBarCount_H01); break; }
      case PERIOD_H2:  { return(prevBarCount_H02); break; }
      case PERIOD_H3:  { return(prevBarCount_H03); break; }
      case PERIOD_H4:  { return(prevBarCount_H04); break; }
      case PERIOD_H6:  { return(prevBarCount_H06); break; }
      case PERIOD_H8:  { return(prevBarCount_H08); break; }
      case PERIOD_H12: { return(prevBarCount_H12); break; }
      case PERIOD_D1:  { return(prevBarCount_D01); break; }
      case PERIOD_W1:  { return(prevBarCount_W01); break; }
      case PERIOD_MN1: { return(prevBarCount_MN1); break; }
     }
//----
   return(NULL);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void set_max(ENUM_TIMEFRAMES mtPeriod,int index,double value)
  {
//----
   switch(mtPeriod)
     {
      case PERIOD_M1:  { TLBMax_M01[ index ] = value; break; }
      case PERIOD_M2:  { TLBMax_M02[ index ] = value; break; }
      case PERIOD_M3:  { TLBMax_M03[ index ] = value; break; }
      case PERIOD_M4:  { TLBMax_M04[ index ] = value; break; }
      case PERIOD_M5:  { TLBMax_M05[ index ] = value; break; }
      case PERIOD_M6:  { TLBMax_M06[ index ] = value; break; }
      case PERIOD_M10: { TLBMax_M10[ index ] = value; break; }
      case PERIOD_M12: { TLBMax_M12[ index ] = value; break; }
      case PERIOD_M15: { TLBMax_M15[ index ] = value; break; }
      case PERIOD_M20: { TLBMax_M20[ index ] = value; break; }
      case PERIOD_M30: { TLBMax_M30[ index ] = value; break; }
      case PERIOD_H1:  { TLBMax_H01[ index ] = value; break; }
      case PERIOD_H2:  { TLBMax_H02[ index ] = value; break; }
      case PERIOD_H3:  { TLBMax_H03[ index ] = value; break; }
      case PERIOD_H4:  { TLBMax_H04[ index ] = value; break; }
      case PERIOD_H6:  { TLBMax_H06[ index ] = value; break; }
      case PERIOD_H8:  { TLBMax_H08[ index ] = value; break; }
      case PERIOD_H12: { TLBMax_H12[ index ] = value; break; }
      case PERIOD_D1:  { TLBMax_D01[ index ] = value; break; }
      case PERIOD_W1:  { TLBMax_W01[ index ] = value; break; }
      case PERIOD_MN1: { TLBMax_MN1[ index ] = value; break; }
     }
//----
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double get_max(ENUM_TIMEFRAMES mtPeriod,int index)
  {
//----
   switch(mtPeriod)
     {
      case PERIOD_M1:  { return(TLBMax_M01[ index ]); break; }
      case PERIOD_M2:  { return(TLBMax_M02[ index ]); break; }
      case PERIOD_M3:  { return(TLBMax_M03[ index ]); break; }
      case PERIOD_M4:  { return(TLBMax_M04[ index ]); break; }
      case PERIOD_M5:  { return(TLBMax_M05[ index ]); break; }
      case PERIOD_M6:  { return(TLBMax_M06[ index ]); break; }
      case PERIOD_M10: { return(TLBMax_M10[ index ]); break; }
      case PERIOD_M12: { return(TLBMax_M12[ index ]); break; }
      case PERIOD_M15: { return(TLBMax_M15[ index ]); break; }
      case PERIOD_M20: { return(TLBMax_M20[ index ]); break; }
      case PERIOD_M30: { return(TLBMax_M30[ index ]); break; }
      case PERIOD_H1:  { return(TLBMax_H01[ index ]); break; }
      case PERIOD_H2:  { return(TLBMax_H02[ index ]); break; }
      case PERIOD_H3:  { return(TLBMax_H03[ index ]); break; }
      case PERIOD_H4:  { return(TLBMax_H04[ index ]); break; }
      case PERIOD_H6:  { return(TLBMax_H06[ index ]); break; }
      case PERIOD_H8:  { return(TLBMax_H08[ index ]); break; }
      case PERIOD_H12: { return(TLBMax_H12[ index ]); break; }
      case PERIOD_D1:  { return(TLBMax_D01[ index ]); break; }
      case PERIOD_W1:  { return(TLBMax_W01[ index ]); break; }
      case PERIOD_MN1: { return(TLBMax_MN1[ index ]); break; }
     }
//----
   return(NULL);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void set_min(ENUM_TIMEFRAMES mtPeriod,int index,double value)
  {
//----
   switch(mtPeriod)
     {
      case PERIOD_M1:  { TLBMin_M01[ index ] = value; break; }
      case PERIOD_M2:  { TLBMin_M02[ index ] = value; break; }
      case PERIOD_M3:  { TLBMin_M03[ index ] = value; break; }
      case PERIOD_M4:  { TLBMin_M04[ index ] = value; break; }
      case PERIOD_M5:  { TLBMin_M05[ index ] = value; break; }
      case PERIOD_M6:  { TLBMin_M06[ index ] = value; break; }
      case PERIOD_M10: { TLBMin_M10[ index ] = value; break; }
      case PERIOD_M12: { TLBMin_M12[ index ] = value; break; }
      case PERIOD_M15: { TLBMin_M15[ index ] = value; break; }
      case PERIOD_M20: { TLBMin_M20[ index ] = value; break; }
      case PERIOD_M30: { TLBMin_M30[ index ] = value; break; }
      case PERIOD_H1:  { TLBMin_H01[ index ] = value; break; }
      case PERIOD_H2:  { TLBMin_H02[ index ] = value; break; }
      case PERIOD_H3:  { TLBMin_H03[ index ] = value; break; }
      case PERIOD_H4:  { TLBMin_H04[ index ] = value; break; }
      case PERIOD_H6:  { TLBMin_H06[ index ] = value; break; }
      case PERIOD_H8:  { TLBMin_H08[ index ] = value; break; }
      case PERIOD_H12: { TLBMin_H12[ index ] = value; break; }
      case PERIOD_D1:  { TLBMin_D01[ index ] = value; break; }
      case PERIOD_W1:  { TLBMin_W01[ index ] = value; break; }
      case PERIOD_MN1: { TLBMin_MN1[ index ] = value; break; }
     }
//----
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double get_min(ENUM_TIMEFRAMES mtPeriod,int index)
  {
//----
   switch(mtPeriod)
     {
      case PERIOD_M1:  { return(TLBMin_M01[ index ]); break; }
      case PERIOD_M2:  { return(TLBMin_M02[ index ]); break; }
      case PERIOD_M3:  { return(TLBMin_M03[ index ]); break; }
      case PERIOD_M4:  { return(TLBMin_M04[ index ]); break; }
      case PERIOD_M5:  { return(TLBMin_M05[ index ]); break; }
      case PERIOD_M6:  { return(TLBMin_M06[ index ]); break; }
      case PERIOD_M10: { return(TLBMin_M10[ index ]); break; }
      case PERIOD_M12: { return(TLBMin_M12[ index ]); break; }
      case PERIOD_M15: { return(TLBMin_M15[ index ]); break; }
      case PERIOD_M20: { return(TLBMin_M20[ index ]); break; }
      case PERIOD_M30: { return(TLBMin_M30[ index ]); break; }
      case PERIOD_H1:  { return(TLBMin_H01[ index ]); break; }
      case PERIOD_H2:  { return(TLBMin_H02[ index ]); break; }
      case PERIOD_H3:  { return(TLBMin_H03[ index ]); break; }
      case PERIOD_H4:  { return(TLBMin_H04[ index ]); break; }
      case PERIOD_H6:  { return(TLBMin_H06[ index ]); break; }
      case PERIOD_H8:  { return(TLBMin_H08[ index ]); break; }
      case PERIOD_H12: { return(TLBMin_H12[ index ]); break; }
      case PERIOD_D1:  { return(TLBMin_D01[ index ]); break; }
      case PERIOD_W1:  { return(TLBMin_W01[ index ]); break; }
      case PERIOD_MN1: { return(TLBMin_MN1[ index ]); break; }
     }
//----
   return(NULL);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool displayPeriod(ENUM_TIMEFRAMES mtPeriod_,const datetime & time[])
  {

   datetime iTime[1];
   int numBars=Bars(Symbol(),mtPeriod_);
//---- Copy the new data to the arrays
   if(CopyTime(Symbol(),mtPeriod_,0,1,iTime)<=0) return(false);

   if(get_prevBarTime(mtPeriod_)==NULL || get_prevBarTime(mtPeriod_)!=iTime[0] || 
      get_prevBarCount(mtPeriod_)==NULL || get_prevBarCount(mtPeriod_)!=numBars)
     {
      set_prevBarTime(mtPeriod_,iTime[0]);
      set_prevBarCount(mtPeriod_,numBars);
     }
   else return(true);

   if(maxBarsForPeriod>0 && numBars>maxBarsForPeriod) numBars=maxBarsForPeriod;
   int TLBBuffShift=0;
   int limit=numBars;

   double iClose[];
//---- Copy the new data to the arrays
   if(CopyClose(Symbol(),mtPeriod_,0,limit+1,iClose)<=0) return(false);
//---- Indexing elements in arrays as in timeseries  
   ArraySetAsSeries(iClose,true);

   int i,j;
   j=1;
   while(iClose[limit-1]==iClose[limit-1-j])
     {
      j++;
      if(j>limit-1)
         break;
     }

   if(iClose[limit-1]>iClose[limit-1-j])
     {
      set_max(mtPeriod_,0,iClose[limit-1]);
      set_min(mtPeriod_,0,iClose[limit-1-j]);
     }
   if(iClose[limit-1]<iClose[limit-1-j])
     {
      set_max(mtPeriod_,0,iClose[limit-1-j]);
      set_min(mtPeriod_,0,iClose[limit-1]);
     }

   for(i=1; i<LB; i++)
     {
      while(iClose[limit-j]<=Diap(mtPeriod_,true,i,TLBBuffShift) && iClose[limit-j]>=Diap(mtPeriod_,false,i,TLBBuffShift))
        {
         j++;

         if(j>limit-1)
            break;
        }
      if(j>limit-1)
         break;

      if(iClose[limit-j]>get_max(mtPeriod_,i-1))
        {
         set_max(mtPeriod_,i,iClose[limit-j]);
         set_min(mtPeriod_,i,get_max(mtPeriod_,i-1));
         TLBBuffShift++;
        }
      if(iClose[limit-j]<get_min(mtPeriod_,i-1))
        {
         set_min(mtPeriod_,i,iClose[limit-j]);
         set_max(mtPeriod_,i,get_min(mtPeriod_,i-1));
         TLBBuffShift++;
        }
     }

   for(i=LB; i<limit; i++)
     {
      while(iClose[limit-j]<=Diap(mtPeriod_,true,LB,TLBBuffShift) && iClose[limit-j]>=Diap(mtPeriod_,false,LB,TLBBuffShift))
        {
         j++;
         if(j>limit-1)
            break;
        }
      if(j>limit-1)
         break;

      if(iClose[limit-j]>get_max(mtPeriod_,i-1))
        {
         set_max(mtPeriod_,i,iClose[limit-j]);
         set_min(mtPeriod_,i,get_max(mtPeriod_,i-1));
         TLBBuffShift++;
        }
      if(iClose[limit-j]<get_min(mtPeriod_,i-1))
        {
         set_min(mtPeriod_,i,iClose[limit-j]);
         set_max(mtPeriod_,i,get_min(mtPeriod_,i-1));
         TLBBuffShift++;
        }
     }

   double sup= 0,res = 0,supc = 0,resc = 0;
   int redCnt=0,blueCnt=0;
   int numObj= 0;
   for(i=1; i<=TLBBuffShift; i++)
     {
      if(get_max(mtPeriod_,i)>get_max(mtPeriod_,i-1))
        {
         if(blueCnt>=LB)
            sup=get_max(mtPeriod_,i-LB);
         else
            sup=get_min(mtPeriod_,i-blueCnt-1);

         resc = get_max( mtPeriod_, i );
         supc = 0;
         res=0;

         blueCnt++;
         redCnt=0;
        }
      if(get_max(mtPeriod_,i)<get_max(mtPeriod_,i-1))
        {
         if(redCnt>=LB)
            res=get_min(mtPeriod_,i-LB);
         else
            res=get_max(mtPeriod_,i-redCnt-1);

         supc= get_min(mtPeriod_,i);
         sup = 0;
         resc= 0;

         blueCnt=0;
         redCnt++;
        }

     }
   
   if(sup>0.0) ShowHLineObject(getPeriodAsString(mtPeriod_)+" Sup",clrBlue,STYLE_SOLID,sup,500,time);
   else DeleteHLineObject(getPeriodAsString(mtPeriod_)+" Sup");

   if(res>0.0) ShowHLineObject(getPeriodAsString(mtPeriod_)+" Res",clrRed,STYLE_SOLID,res,500,time);
   else DeleteHLineObject(getPeriodAsString(mtPeriod_)+" Res");

   if(supc>0.0) ShowHLineObject(getPeriodAsString(mtPeriod_)+" Sup C",clrBlue,STYLE_DASHDOTDOT,supc,1200,time);
   else DeleteHLineObject(getPeriodAsString(mtPeriod_)+" Sup C");

   if(resc>0.0) ShowHLineObject(getPeriodAsString(mtPeriod_)+" Res C",clrRed,STYLE_DASHDOTDOT,resc,1200,time);
   else DeleteHLineObject(getPeriodAsString(mtPeriod_)+" Res C");
//----
   return(true);
  }
//+------------------------------------------------------------------+

Comments