"

UpDown Bars

by Dr.Hamdi Boukamcha
Name:
UpDownBars
Author: gery18 (2011.12.28 08:33)
Downloaded: 3066
Download:
UpDown Bars   UpDownBars.mq4 (2.5 Kb) View

Description:

The indicator counts the Up bars (Close-Open) and Down bars (Open-Close).

Calculation:

n = Up bars (Close>Open, first bar=1, last bar=n)

m = Down bars (Close<Open)

UpDown Bars

 

Oscillator indicator, my opinion – use it for filtering of entry, when UpDownBars is above 0 go only short and when UpDownBars is below 0 go only long.

Image:

UpDown Bars

rplust:

rockyhoangdn:

rplust:
“rockyhoangdn”…. the chart with your code does not draw a new bar automatically… has to be refreshed manually… It also repaints a number of bars.

find:

ArrayResize(UpDown,limit);

and replace with

ArrayResize(UpDown,Bars);

thanks, but this chart works fine… limit or Bars.. both work… I was referring to the other chart ” Grossperiod 60″ it does not auto refresh and also repaints. I’m not a coder but I guess it is possible to code it so it does not repaint history bars.

It will auto refresh with “Bars”, but if use “Grossperiod 60” its allway repaint.

30.12.2011 05:58 rockyhoangdn

rockyhoangdn:

rplust:
“rockyhoangdn”…. the chart with your code does not draw a new bar automatically… has to be refreshed manually… It also repaints a number of bars.

find:

ArrayResize(UpDown,limit);

and replace with

ArrayResize(UpDown,Bars);

thanks, but this chart works fine… limit or Bars.. both work… I was referring to the other chart ” Grossperiod 60″ it does not auto refresh and also repaints. I’m not a coder but I guess it is possible to code it so it does not repaint history bars.

30.12.2011 02:59 rplust

rplust:
“rockyhoangdn”…. the chart with your code does not draw a new bar automatically… has to be refreshed manually… It also repaints a number of bars.

find:

ArrayResize(UpDown,limit);

and replace with

ArrayResize(UpDown,Bars);
29.12.2011 15:27 rockyhoangdn

“rockyhoangdn”…. the chart with your code does not draw a new bar automatically… has to be refreshed manually… It also repaints a number of bars.
29.12.2011 09:04 rplust

//+------------------------------------------------------------------+
//|                                                   UpDownBars.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window

#property indicator_buffers 4               // Number of buffers
#property indicator_color1 Aqua
#property indicator_color2 Red
#property indicator_color3 Blue
#property indicator_color4 Blue
#property indicator_width1 4
#property indicator_width2 4
#property indicator_width3 1
#property indicator_width4 1

extern int period = 20;

double UpDown[];
double SignalUpDown[];
double Up[];
double Down[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
    SetIndexBuffer(0,Up);
    SetIndexLabel(0,"Up");
    SetIndexStyle (0,DRAW_HISTOGRAM);
    SetIndexBuffer(1,Down);
    SetIndexLabel(1,"Down");
    SetIndexStyle (1,DRAW_HISTOGRAM);
    SetIndexBuffer(2,UpDown);
    SetIndexLabel(2,"UpDown");
    SetIndexStyle (2,DRAW_NONE);

    SetIndexBuffer(3,SignalUpDown);
    SetIndexLabel(3,"SignalUpDown");
    SetIndexStyle (3,DRAW_LINE);
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   if(Bars<=period) return(0);

   int i;
   int    counted_bars=IndicatorCounted();

   double bar, ups, downs, upsDivide, downsDivide;
   int upsCount, downsCount;

   int limit=Bars-counted_bars;
      ArrayResize(UpDown,limit); 
   ArraySetAsSeries(UpDown,true);

//---- macd counted in the 1-st buffer
   for(i=0; i<limit; i++)
   {
      ups = 0;
      downs = 0;
      bar = 0;
      upsCount = 0;
      downsCount = 0;
      upsDivide=0;
      downsDivide=0;
      for(int j=period;j>=0;j--)
      {
         bar=(Close[i+j]-Open[i+j])*100000;
         if(bar>0)
         {
            ups+=(MathSqrt(bar)*((period+1-j)));
            upsCount++;
         }
         if(bar<0)
         {
            downs+=(MathSqrt(-bar)*((period+1-j)));
            downsCount++;
         }
      }
      if(upsCount!=0)
         upsDivide = ups/upsCount;

      if(downsCount!=0)
         downsDivide = downs/downsCount;
         UpDown[i]=NormalizeDouble(((upsDivide)-(downsDivide)),3);
      if (NormalizeDouble(((upsDivide)-(downsDivide)),3) > 0) Up[i]=NormalizeDouble(((upsDivide)-(downsDivide)),3); else Up[i]=0;
      if (NormalizeDouble(((upsDivide)-(downsDivide)),3) < 0) Down[i]=NormalizeDouble(((upsDivide)-(downsDivide)),3);else Down[i]=0;
   }
   for(int ii=0; ii<limit; ii++) 
      {
      SignalUpDown[ii]=iMAOnArray(UpDown,Bars,5,0,MODE_LWMA,ii); 
      }
   ObjectsRedraw();
   return(0);
}
//+------------------------------------------------------------------+

I code follow you!UpDown Bars

//+------------------------------------------------------------------+
//|                                                 !!UpDownBars.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1  Aqua
#property indicator_color2  Red
#property indicator_color3  DeepPink
#property indicator_color4  Blue

#property indicator_width1 4
#property indicator_width2 4
#property indicator_width3 1
#property indicator_width4 1

//---- input parameters
extern int GrossPeriod=60; 
extern int Barss=500; 
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
datetime daytimes[]; 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexArrow(0,241);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexEmptyValue(0,0.0);
   SetIndexLabel(0,"upline");

   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexArrow(1,242);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexEmptyValue(1,0.0);
   SetIndexLabel(1,"downline");

   SetIndexStyle(2,DRAW_NONE);
   SetIndexArrow(2,159);
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexEmptyValue(2,0.0);
   SetIndexLabel(2,"upstopline");

   SetIndexStyle(3,DRAW_LINE);
   SetIndexArrow(3,159);
   SetIndexBuffer(3,ExtMapBuffer4);
   SetIndexEmptyValue(3,0.0);
   SetIndexLabel(3,"signalline");

   IndicatorShortName("!!UpDownBars-"+GrossPeriod);
//----
//---- 
   if (Period()>GrossPeriod) {GrossPeriod=Period();} 

   ArrayCopySeries(daytimes,MODE_TIME,Symbol(),GrossPeriod); 
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int    limit,bigshift;
   double value1,value2,value3,value4;
   if (counted_bars<0) return(-1); 

   if (counted_bars>0) counted_bars--; 
   if (Barss>0) limit=Barss-counted_bars; else limit=Bars-counted_bars;
//---- 
   for (int i=0; i<limit; i++) 
   { 
   if(Time[i]>=daytimes[0]) bigshift=0; 
   else 
     { 
      bigshift = ArrayBsearch(daytimes,Time[i-1],WHOLE_ARRAY,0,MODE_DESCEND); 
      if(Period()<=GrossPeriod) bigshift++; 
     } 
      for (int cnt=bigshift; cnt<(1+bigshift); cnt++)
      {
         value1=iCustom(NULL,GrossPeriod,"UpDownBars",0,cnt);
         value2=iCustom(NULL,GrossPeriod,"UpDownBars",1,cnt);
         value3=iCustom(NULL,GrossPeriod,"UpDownBars",2,cnt);
         value4=iCustom(NULL,GrossPeriod,"UpDownBars",3,cnt);
      }

   ExtMapBuffer1[i]=value1; 
   ExtMapBuffer2[i]=value2; 
   ExtMapBuffer3[i]=value3; 
   ExtMapBuffer4[i]=value4; 

   ObjectsRedraw();

   }

//----
   return(0);
  }
//+------------------------------------------------------------------+

Share this article

Leave a comment