_Amplitude_NBarsAvg





//+------------------------------------------------------------------+
//|                                              		 Amplitude.mq4 |
//|                                                        komposter |
//|                                      mailto:komposterius@mail.ru |
//+------------------------------------------------------------------+
#property copyright "komposter"
#property link      "mailto:komposterius@mail.ru"

#property indicator_separate_window
#property indicator_minimum 0
#property  indicator_buffers 5
#property  indicator_color1  Chartreuse
#property  indicator_color2  Green
#property  indicator_color3  Blue
#property  indicator_color4  Red
#property  indicator_color5  SlateGray
#property indicator_width2 2
#property indicator_style5 2

double buf0[]; //High-Low Average
double buf1[]; //Body Average
double buf2[]; //Up_Shadow Average
double buf3[]; //Down_Shadow Average
double buf4[]; //Summ_Shadow Average

extern int AveragePeriod = 960;
extern int DrawBars		 = 500;

//---- EASY TO READ indicator parameters  

extern bool  show.info       = true;
extern int   win             = 1;
extern int price.x.offset    = 250;  //250
extern int price.y.offset    = -160; //-190
//+------------------------------------------------------------------+ 



int init()
{
	IndicatorShortName( "Ampltd( "+AveragePeriod+" barsAvg)HL,OC,(Hwg,Lwg)H+Lwg" );
//	IndicatorShortName( "Amplitude (" + AveragePeriod + " bars average)   -   " );
	IndicatorDigits ( 2 );

	SetIndexBuffer ( 0 , buf0 );
	SetIndexStyle ( 0 , DRAW_LINE );
	SetIndexDrawBegin ( 0 , AveragePeriod );
	SetIndexLabel( 0 , "High-Low");

	SetIndexBuffer ( 1 , buf1 );
	SetIndexStyle ( 1 , DRAW_LINE );
	SetIndexDrawBegin ( 1 , AveragePeriod );
	SetIndexLabel( 1 , "Open-Close");

	SetIndexBuffer ( 2 , buf2 );
	SetIndexStyle ( 2 , DRAW_LINE );
	SetIndexDrawBegin ( 2 , AveragePeriod );
	SetIndexLabel( 2 , "Up_Shadow");

	SetIndexBuffer ( 3 , buf3 );
	SetIndexStyle ( 3 , DRAW_LINE);
	SetIndexDrawBegin ( 3 , AveragePeriod );
	SetIndexLabel( 3 , "Down_Shadow");

	SetIndexBuffer ( 4 , buf4 );
	SetIndexStyle ( 3 , DRAW_LINE);
	SetIndexDrawBegin ( 4 , AveragePeriod );
	SetIndexLabel( 4 , "Summ_Shadow");

return(0);
}


int deinit() 
{ 
   ObjectDelete("NBA");
   ObjectDelete("NBA_TL");
   ObjectDelete("NBA_BL");
   ObjectDelete("NBA_MN");
   ObjectDelete("NBA_TR");
   ObjectDelete("NBA_BR");  
   ObjectDelete("NBA_LB");      
} 



int start()
{
	int counted_bars=IndicatorCounted();
	if ( counted_bars < 0 ) { Print( "Indicator Error (Counted bars < 0)!" ); return(-1); }
	if ( Bars < 100 ) { Print( "Indicator Error (Bars < 100)!" ); return(-1); }
	if ( AveragePeriod > Bars - 1 ) { IndicatorShortName( "Indicator Error (Bars < AveragePeriod)!" ); Print( "Indicator Error (BARS < AveragePeriod)!" ); return(-1); }
	if ( DrawBars > Bars - 1 || DrawBars <= 0 ) { DrawBars = Bars - 1; }
	if ( DrawBars <= AveragePeriod ) { DrawBars = AveragePeriod + 1; }

	for ( int i = DrawBars; i >= 0; i -- )
	{
		double buf_tmp = 0, buf_tmp1 = 0, buf_tmp2 = 0, buf_tmp3 = 0, buf_tmp4 = 0;
		int z = 0, z1 = 0, z2 = 0, z3 = 0, z4 = 0;
		double high, low, close, open, point = Point;

		for ( int u = i + AveragePeriod; u >= i; u -- )
		{
			high = High[u]; low = Low[u]; close = Close[u]; open = Open[u];
			
			buf_tmp += ( high - low ) / point;
			if ( ( high - low ) / point == 0 ) z --;

			buf_tmp1 += MathAbs( ( close - open ) ) / point;
			if ( MathAbs( ( close - open ) ) / point  == 0 ) z1 --;

			if ( close - open >= 0 )
			{
				buf_tmp2 += ( high - close ) / point;
				if ( ( high - close ) / point  == 0 ) z2 --;

				buf_tmp3 += ( open - low ) / point;
				if ( ( open - low ) / point  == 0 ) z3 --;
			}
			else
			{
				buf_tmp2 += ( high - open ) / point;
				if ( ( high - open ) / point  == 0 ) z2 --;

				buf_tmp3 += ( close - low ) / point;
				if ( ( close - low ) / point  == 0 ) z3 --;
			}
		}
		buf0[i] = buf_tmp  / ( AveragePeriod + z  );
		buf1[i] = buf_tmp1 / ( AveragePeriod + z1 );
		buf2[i] = buf_tmp2 / ( AveragePeriod + z2 );
		buf3[i] = buf_tmp3 / ( AveragePeriod + z3 );
		buf4[i] = buf2[i] + buf3[i];
		
	}



//+------------------------------------------------------------------+ 
if (show.info) {    

//int win  = WindowFind("_Amplitude_NBarsAvt"); 
   
int tDig = Digits ;
   
string tLabl = "NBA" ;

string tMain =  DoubleToStr( buf0[0] , tDig ) ;  
string tTopL =  DoubleToStr( buf2[0] , tDig ) ; 
string tBotL =  DoubleToStr( buf3[0] , tDig ) ; 
string tTopR =  DoubleToStr( buf1[0] , tDig ) ; 
string tBotR =  DoubleToStr( buf4[0] , tDig ) ; 

color cLabl =  Gray ;
color cMain =  White ;   
color cTopL =  Lime ; 
color cBotL =  Crimson  ; 
color cTopR =  Orange ; 
color cBotR =  Silver ;


   ObjectCreate("NBA_LB", OBJ_LABEL, win, 0, 0);// main LABEL
   ObjectSetText("NBA_LB", tLabl , 30, "Arial Bold", cLabl );
   ObjectSet("NBA_LB", OBJPROP_CORNER, 0);
   ObjectSet("NBA_LB", OBJPROP_XDISTANCE, 760+price.x.offset);
   ObjectSet("NBA_LB", OBJPROP_YDISTANCE, 160+price.y.offset);
 
   ObjectCreate("NBA_TL", OBJ_LABEL, win, 0, 0);// top left LABEL
   ObjectSetText("NBA_TL", tTopL , 15, "Arial Bold", cTopL );
   ObjectSet("NBA_TL", OBJPROP_CORNER, 0);
   ObjectSet("NBA_TL", OBJPROP_XDISTANCE, 770+price.x.offset);
   ObjectSet("NBA_TL", OBJPROP_YDISTANCE, 197+price.y.offset);
   
   ObjectCreate("NBA_BL", OBJ_LABEL, win, 0, 0);//HiLow LABEL
   ObjectSetText("NBA_BL", tBotL , 15, "Arial Bold", cBotL );
   ObjectSet("NBA_BL", OBJPROP_CORNER, 0);
   ObjectSet("NBA_BL", OBJPROP_XDISTANCE, 770+price.x.offset);
   ObjectSet("NBA_BL", OBJPROP_YDISTANCE, 260+price.y.offset);                 
                     
   ObjectCreate("NBA_MN", OBJ_LABEL, win, 0, 0);//HiLow LABEL
   ObjectSetText("NBA_MN", tMain , 40, "Arial Bold", cMain );
   ObjectSet("NBA_MN", OBJPROP_CORNER, 0);
   ObjectSet("NBA_MN", OBJPROP_XDISTANCE, 800+price.x.offset); // 765
   ObjectSet("NBA_MN", OBJPROP_YDISTANCE, 210+price.y.offset); 
           
 
   ObjectCreate("NBA_TR", OBJ_LABEL, win, 0, 0);
   ObjectSetText("NBA_TR", tTopR , 15, "Arial Bold", cTopR );
   ObjectSet("NBA_TR", OBJPROP_CORNER, 0);
   ObjectSet("NBA_TR", OBJPROP_XDISTANCE, 860+price.x.offset);
   ObjectSet("NBA_TR", OBJPROP_YDISTANCE, 197+price.y.offset);
                 
   ObjectCreate("NBA_BR", OBJ_LABEL, win, 0, 0);
   ObjectSetText("NBA_BR", tBotR , 15, "Arial Bold", cBotR );
   ObjectSet("NBA_BR", OBJPROP_CORNER, 0);
   ObjectSet("NBA_BR", OBJPROP_XDISTANCE, 860+price.x.offset);
   ObjectSet("NBA_BR", OBJPROP_YDISTANCE, 260+price.y.offset);    
    
 
//+------------------------------------------------------------------+  
   WindowRedraw();    
} 

return(0);
}





Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains open prices of each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: