Vidya_zone_2

Author: mladen
Vidya_zone_2
0 Views
0 Downloads
0 Favorites
Vidya_zone_2
//+------------------------------------------------------------------+
//|                                                        Vidya.mq4 |
//|                                                                  |
//| Vidya developed by Tushar Chande                                 |
//+------------------------------------------------------------------+
#property copyright "mladen"
#property link      "mladenfx@gmail.com"

#property  indicator_chart_window
#property  indicator_buffers 3
#property  indicator_color1  clrDeepSkyBlue
#property  indicator_color2  clrDimGray
#property  indicator_color3  clrDarkOrange
#property  indicator_width1  2
#property  indicator_width3  2
#property  indicator_style2  STYLE_DOT
#property  strict

//
//
//
//
//

extern int  CmoPeriod      = 10;    // CMO period
extern int  SmoothPeriod   =  9;    // Smoothing period
extern bool ShowHighLine   = true;  // Show high line?
extern bool ShowMiddleLine = true;  // Show middle line?
extern bool ShowLowLine    = true;  // Show low line?

double vidya1[],vidya2[],vidya3[];

//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//

int init()
{
   SetIndexBuffer(0,vidya1);
   SetIndexBuffer(1,vidya2);
   SetIndexBuffer(2,vidya3);
   return(0);
}
int start()
{
   int counted_bars = IndicatorCounted();
      if(counted_bars < 0) return(-1);
      if(counted_bars > 0) counted_bars--;
           int limit = MathMin(Bars-counted_bars,Bars-1);
   
   for(int i=limit; i>=0; i--) 
   {
      double median = (High[i]+Low[i])/2;
      if (ShowHighLine)   vidya1[i] = iVidya(High[i],median,CmoPeriod,SmoothPeriod,i,0);
      if (ShowMiddleLine) vidya2[i] = iVidya(median ,median,CmoPeriod,SmoothPeriod,i,1);
      if (ShowLowLine)    vidya3[i] = iVidya(Low[i] ,median,CmoPeriod,SmoothPeriod,i,2);
   }
   return(0);
}

//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//

#define _vidyaInstances     3
#define _vidyaInstancesSize 3
double  vidya_work[][_vidyaInstances*_vidyaInstancesSize];
#define vidya_price 0
#define vidya_pricc 1
#define vidya_value 2

double iVidya(double price, double pricc, int cmoPeriods, int smoothPeriod, int r, int instanceNo=0)
{
   if (ArrayRange(vidya_work,0)!=Bars) ArrayResize(vidya_work,Bars); r = Bars-r-1; int s = instanceNo*_vidyaInstancesSize;
   
   //
   //
   //    using two prices prevents errors when zone indicator is calculated
   //
   //
   
   vidya_work[r][s+vidya_price] = price;
   vidya_work[r][s+vidya_pricc] = pricc;
          double sumUp = 0, sumDo = 0;
          for (int k=0; k<cmoPeriods && (r-k-1)>=0; k++)
          {
               double diff = vidya_work[r-k][s+vidya_pricc]-vidya_work[r-k-1][s+vidya_pricc];
                  if (diff > 0)
                        sumUp += diff;
                  else  sumDo -= diff;
          }      
          vidya_work[r][s+vidya_value] = (r>0) ? vidya_work[r-1][s+vidya_value]+((((sumUp+sumDo)!=0)?MathAbs((sumUp-sumDo)/(sumUp+sumDo)):1)*2.00/(1.00+MathMax(smoothPeriod,1)))*(vidya_work[r][s+vidya_price]-vidya_work[r-1][s+vidya_value]) : price;
   return(vidya_work[r][s+vidya_value]);
}

Comments