NormalizedVolumeOscillator_v2





//+------------------------------------------------------------------+
//|                              Normalized Volume Oscillator v2.mq4 |
//|                                                  Vadim Shumiloff |
//|                                                shumiloff@mail.ru |
//|                                                     ICQ 84796634 |
//+------------------------------------------------------------------+
#property copyright "Vadim Shumiloff"
#property link      "shumiloff@mail.ru"

#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 Blue        // Çàêðàñêà îòðèöàòåëüíûõ áàðîâ
#property indicator_color2 Green       // Çàêðàñêà áàðîâ 0 - 38.2
#property indicator_color3 Lime        // Çàêðàñêà áàðîâ 38.2 - 61.8
#property indicator_color4 Yellow      // Çàêðàñêà áàðîâ 61.8 - 100
#property indicator_color5 Red         // Çàêðàñêà áàðîâ ñâûøå 100

#property indicator_width1 2  
#property indicator_width2 2  
#property indicator_width3 2  
#property indicator_width4 2  
#property indicator_width5 2  

/*
Method: 
0 - MODE_SMA
1 - MODE_EMA 
2 - MODE_SMMA
3 - MODE_LWMA
4 - MODE_LRMA
*/
extern int Method = 0;
extern int VolumePeriod = 21;
extern int Shift = 1;

double VolBufferH1[];
double VolBufferH2[];
double VolBufferH3[];
double VolBufferH4[];
double VolBufferH5[];
double Buffer[];

int init()
{
   string short_name;

   IndicatorBuffers(5);
   
   SetIndexBuffer(1, VolBufferH1);
   SetIndexStyle(0, DRAW_HISTOGRAM);
   SetIndexBuffer(0, VolBufferH1);
   SetIndexDrawBegin(0, VolBufferH1);

   SetIndexBuffer(2, VolBufferH2);
   SetIndexStyle(1, DRAW_HISTOGRAM);
   SetIndexBuffer(1, VolBufferH2);
   SetIndexDrawBegin(1, VolBufferH2);
  
   SetIndexBuffer(3, VolBufferH3);
   SetIndexStyle(2, DRAW_HISTOGRAM);
   SetIndexBuffer(2, VolBufferH3);
   SetIndexDrawBegin(2, VolBufferH3);

   SetIndexBuffer(4, VolBufferH4);
   SetIndexStyle(3, DRAW_HISTOGRAM);
   SetIndexBuffer(3, VolBufferH4);
   SetIndexDrawBegin(3, VolBufferH4);

   SetIndexBuffer(5, VolBufferH5);
   SetIndexStyle(4, DRAW_HISTOGRAM);
   SetIndexBuffer(4, VolBufferH5);
   SetIndexDrawBegin(4, VolBufferH5);

   short_name="NVO (" + VolumePeriod + ")";
   IndicatorShortName(short_name);
   SetIndexLabel(0, short_name);

   ArrayResize(Buffer, Bars);      ArrayInitialize(Buffer, 0);
   ArrayResize(VolBufferH1, Bars); ArrayInitialize(VolBufferH1, 0);
   ArrayResize(VolBufferH2, Bars); ArrayInitialize(VolBufferH2, 0);
   ArrayResize(VolBufferH3, Bars); ArrayInitialize(VolBufferH3, 0);
   ArrayResize(VolBufferH4, Bars); ArrayInitialize(VolBufferH4, 0);
   ArrayResize(VolBufferH5, Bars); ArrayInitialize(VolBufferH5, 0);

   return(0);
}

int start()
{
   int i, limit;
   double nvo;
   int counted_bars = IndicatorCounted();
   if (counted_bars > 0) counted_bars--;
   limit = Bars - counted_bars;
   
   ArraySetAsSeries(Buffer, true);
   for(i = 0; i < limit; i++) Buffer[i] = Volume[i];
   
   for(i = 0; i < limit; i++)
   {
      if (Method < 4)
        nvo = NormalizeDouble(Buffer[i] / iMAOnArray(Buffer, 0, VolumePeriod, 0, Method, i+Shift), 4)*100 - 100;
      else
        nvo = NormalizeDouble(Buffer[i] / (3*iMAOnArray(Buffer, 0, VolumePeriod, 0, MODE_LWMA, i+Shift) - 2*iMAOnArray(Buffer, 0, VolumePeriod, 0, MODE_SMA, i+Shift)), 4)*100 - 100;

      if (nvo < 0)
         VolBufferH1[i] = nvo;
      else
      {
         if (nvo < 38.2)
            VolBufferH2[i] = nvo;
         else
         {
            if (nvo < 61.8)
               VolBufferH3[i] = nvo;
            else
            {
               if (nvo < 100)
               {
                  VolBufferH4[i] = nvo;
               }
               else VolBufferH5[i] = nvo;
            }
         }
      }
   }
   
   return(0);
}



Sample





Analysis



Market Information Used:

Series array that contains tick volumes of each bar


Indicator Curves created:


Implements a curve of type DRAW_HISTOGRAM

Indicators Used:

Moving average indicator


Custom Indicators Used:

Order Management characteristics:

Other Features: