MTF_BH_Ergodic_4TFBars





//+------------------------------------------------------------------+
//|MTF_BH_Ergodic_4TFBars            basedonMTF_Supertrend2_Bars.mq4 |
//|2007, Bruce Hellstrom             2006, MetaQuotes Software Corp. |
//|4TFBars Forex-TSD.com ki  2006 Elihayun http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Eli hayun."
#property link      "http://www.elihayun.com"

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 6
#property indicator_buffers 8
#property indicator_color1 MediumOrchid
#property indicator_color2 MediumPurple
#property indicator_color3 MediumOrchid
#property indicator_color4 MediumPurple
#property indicator_color5 Aqua
#property indicator_color6 DarkTurquoise
#property indicator_color7 Aqua
#property indicator_color8 DarkTurquoise
//   IndicatorDigits(2);

//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];


extern string  CustomIndicator = "BH-Ergodic";


extern int BarDiff = 1;     // calculations are taken between current bar and current bar + BarDiff
extern int r = 2;           // First moving average on mean values
extern int s = 10;          // Second moving average applied to first
extern int u = 5;           // Third moving average applied to division
extern int trigger = 3;     // Final moving average or smoothing
extern int PriceType = 0;   // 0=Close, 1=Open, 2=High, 3=Low, 4=Median, 5=Typical, 6=Weighted
extern string note____TF = "1,5,15,30,60H1,240H4,1440D1,10080W1,43200MN1";
extern string _Pprice_Type = "C0,O1,H2,L3,Mdn4,Tpcl5,WghtCl_6"; 
extern int Maxbars=1000;

//extern int NbPeriods = 10;
//extern int LSMA_Period = 5;

extern int    TF4  = PERIOD_H1;
extern int    TF3  = PERIOD_H4;
extern int    TF2  = PERIOD_D1;
extern int    TF1  = PERIOD_W1;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,110);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexEmptyValue(0,0.0);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,110);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexEmptyValue(1,0.0);
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexArrow(2,110);
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexEmptyValue(2,0.0);
   SetIndexStyle(3,DRAW_ARROW);
   SetIndexArrow(3,110);
   SetIndexBuffer(3,ExtMapBuffer4);
   SetIndexEmptyValue(3,0.0);
   SetIndexStyle(4,DRAW_ARROW);
   SetIndexArrow(4,110);
   SetIndexBuffer(4,ExtMapBuffer5);
   SetIndexEmptyValue(4,0.0);
   SetIndexStyle(5,DRAW_ARROW);
   SetIndexArrow(5,110);
   SetIndexBuffer(5,ExtMapBuffer6);
   SetIndexEmptyValue(5,0.0);
   SetIndexStyle(6,DRAW_ARROW);
   SetIndexArrow(6,110);
   SetIndexBuffer(6,ExtMapBuffer7);
   SetIndexEmptyValue(6,0.0);
   SetIndexStyle(7,DRAW_ARROW);
   SetIndexArrow(7,110);
   SetIndexBuffer(7,ExtMapBuffer8);
   SetIndexEmptyValue(7,0.0);
//----
   SetIndexLabel(0,"BH-Ergodic("+TF4+")");
   SetIndexLabel(1,"BH-Ergodic("+TF3+")");
   SetIndexLabel(2,"BH-Ergodic("+TF2+")");
   SetIndexLabel(3,"BH-Ergodic("+TF1+")");
   SetIndexLabel(4,"BH-Ergodic("+TF4+")");
   SetIndexLabel(5,"BH-Ergodic("+TF3+")");
   SetIndexLabel(6,"BH-Ergodic("+TF2+")");
   SetIndexLabel(7,"BH-Ergodic("+TF1+")");
   IndicatorDigits(1);



//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   int limit;
   int TF[] = {0,0,0,0};
   
   TF[0] = TF1;
   TF[1] = TF2;
   TF[2] = TF3;
   TF[3] = TF4;
   
//   limit = MathMin(counted_bars,Maxbars);
//   if (limit ==0)
//      limit = Maxbars;
limit=Bars-counted_bars;
limit=MathMax(limit,TF1/Period());
limit=MathMax(limit,TF2/Period());
limit=MathMax(limit,TF3/Period());
limit=MathMax(limit,TF4/Period());
limit=MathMin(limit,Maxbars);
   
   for (int ii=0; ii<limit; ii++)
   {
      ExtMapBuffer1[ii] = 0;
      ExtMapBuffer2[ii] = 0;
      ExtMapBuffer3[ii] = 0;
      ExtMapBuffer4[ii] = 0;
      ExtMapBuffer5[ii] = 0;
      ExtMapBuffer6[ii] = 0;
      ExtMapBuffer7[ii] = 0;
      ExtMapBuffer8[ii] = 0;
      for (int jj=0; jj<4; jj++)
      {
         int y = iBarShift(NULL, TF[jj], Time[ii]);
         SetIndicator(GetCustomBars(TF[jj], y), jj, ii);
      }
   } 
//----
   return(0);
  }
//+------------------------------------------------------------------+

bool GetCustomBars(int TF, int shift)
{

   double h = iCustom(Symbol(), TF, CustomIndicator, BarDiff,r,s,u,trigger,PriceType,1, shift);
   double l = iCustom(Symbol(), TF, CustomIndicator, BarDiff,r,s,u,trigger,PriceType,0, shift);
  
   
   return(h<l);
}

void SetIndicator(bool isUP, int ind, int shift)
{
   if (isUP)
   {
      switch (ind) 
      {
         case 3:  ExtMapBuffer1[shift] = ind+1; break;
         case 2:  ExtMapBuffer2[shift] = ind+1; break;
         case 1:  ExtMapBuffer3[shift] = ind+1; break;
         case 0:  ExtMapBuffer4[shift] = ind+1; break;
      }
   } else {
         switch (ind)
         { 
            case 3:  ExtMapBuffer5[shift] = ind+1; break;
            case 2:  ExtMapBuffer6[shift] = ind+1; break;
            case 1:  ExtMapBuffer7[shift] = ind+1; break;
            case 0:  ExtMapBuffer8[shift] = ind+1; break;
         }
   }

  //----  Refresh buffers ++++++++++++++++++++ upgrade by Raff  
 int TimeFrame,TimeArray[],i;   if (TimeFrame>Period()) {
     int PerINT=TimeFrame/Period()+1;
     datetime TimeArr[]; ArrayResize(TimeArr,PerINT);
     ArrayCopySeries(TimeArr,MODE_TIME,Symbol(),Period()); 
     for(i=0;i<PerINT+1;i++) {if (TimeArr[i]>=TimeArray[0]) {
//----
 /********************************************************  
    Refresh buffers:         buffer[i] = buffer[0];
 ********************************************************/  


      ExtMapBuffer1[i] = ExtMapBuffer1[0];
      ExtMapBuffer2[i] = ExtMapBuffer2[0];
      ExtMapBuffer3[i] = ExtMapBuffer3[0];
      ExtMapBuffer4[i] = ExtMapBuffer4[0];
      ExtMapBuffer5[i] = ExtMapBuffer5[0];
      ExtMapBuffer6[i] = ExtMapBuffer6[0];
      ExtMapBuffer7[i] = ExtMapBuffer7[0];
      ExtMapBuffer8[i] = ExtMapBuffer8[0];

//----
   } } }
//+++++++++++++++++++++++++++++++++++++++++++++++  Raff  
 


   return(0);
  }



Sample





Analysis



Market Information Used:

Series array that contains open time of each bar


Indicator Curves created:

Implements a curve of type DRAW_ARROW


Indicators Used:




Custom Indicators Used:
CustomIndicator

Order Management characteristics:

Other Features: