UpDown Bars

0
(0)
Name:
UpDownBars
Author: gery18 (2011.12.28 08:33)
Downloaded: 3066
Download:
UpDown Bars 1
 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 2

 

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 3

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 4

//+------------------------------------------------------------------+
//|                                                 !!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);
  }
//+------------------------------------------------------------------+

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?



Author: Forex Wiki Team
We are a team of highly experienced Forex Traders [2000-2023] who are dedicated to living life on our own terms. Our primary objective is to attain financial independence and freedom, and we have pursued self-education and gained extensive experience in the Forex market as our means to achieve a self-sustainable lifestyle.