TheGreedyPig ADR v6

Author: Greedy Pig Trading
Price Data Components
Series array that contains open time of each barSeries array that contains the highest prices of each barSeries array that contains the lowest prices of each barSeries array that contains the highest prices of each barSeries array that contains open prices of each barSeries array that contains close prices for each bar
0 Views
0 Downloads
0 Favorites
TheGreedyPig ADR v6
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//                                          TheGreedyPig ADR v6.mq4 $
//                                   Copyright © 2012, TheGreedyPig $
//                            http://greedypigtrading.blogspot.com/ $
//                                                                  $
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
#property copyright "Greedy Pig Trading" 
#property indicator_chart_window
/*
If you need help developing Expert Advisor, Scripts, or Indicators 
send an eMail to: FREEMT4Consultation@sendfree.com
Visit/Follow us:
YouTube: http://www.youtube.com/user/GreedyPigTrading
Blog: http://greedypigtrading.blogspot.com/
eMail: GreedyPigTrading@Gmail.com
LinkedIn: http://www.linkedin.com/pub/thegreedy-pig/47/ba4/20b
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
                              Version Log
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
2012/03/04  TheGreedyPig
TheGreedyPig ADR v6
Added Input Options to display High/Low Prices on chart for ADR 20, ADR 10 ADR 5
Top Left of chart shows:
ADR(20) = XXX
ADR(10) = XXX
ADR(5)  = XXX
Today   = XXX
ADR5 Top = xxxx - xx Pips Away [This will turn Yellow if within 20 Pips]
(Pips from Open) = xx [this will change color >20 is Green, < -20 is RED Less than 20 is Yellow]
ADR5 Bottom = xxxx - xx Pips Away [This will turn Yellow if within 20 Pips]
*/
 extern  bool Show.ADR5  = true;
 extern  bool Show.ADR10 = true;
 extern  bool Show.ADR20 = true; 
 extern  bool ExcludeSundayData = true;  // set to "false" to INCLUDE Sunday bar in the calculation
 
 color      ADR_Color=Blue;
 
 int        Font_Size=10;
 int        DisplayCorner=0;               
 int        x=10;
 int        y=10;
 int        LastBars0=0;
 int        Todays.Range; // current days range High to Low 
 int        RmUp; // Pips from Bid to ADR5 High
 int        RmDn;// Pips from Bid to ADR5 Low
 int        n = 1; // $$$ Used to loop back x days 
 
 string     font1 = "Compact";
 string     font2 = "Arial Black";
 static int adr1,adr5,adr10,adr20; // stores ADR calcs
 string     text; // 
 
 double     PipValue = 0.0001;   

 double     DailyPips; // used to hold the daily move in pips  
 double     Daily.Range = 0.0;  // $$$ Used to Total up the Daily Ranges   
 
    

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
int init()
{
//$$$ Establish Pips for 4 or 5 digit/fractional pip calculations
   if (Digits == 2 || Digits == 3) PipValue = PipValue * 100; // $$$ For JPY pairs
   if (Digits == 4 || Digits == 5) PipValue = PipValue; 
// $$$ Branding 
  ObjectCreate("trademark", OBJ_LABEL, 0, 0, 0);          //$$$ Trademark
  ObjectSet("trademark", OBJPROP_CORNER, DisplayCorner);
  ObjectSet("trademark", OBJPROP_XDISTANCE, x);
  ObjectSet("trademark", OBJPROP_YDISTANCE, y+5);   
  ObjectSetText("trademark","TheGreedyPig",Font_Size-3, font2, Black);
  
  ObjectCreate("Watermark", OBJ_LABEL, 0, 0, 0);          //$$$ Watermark
  ObjectSet("Watermark", OBJPROP_CORNER, 3);
  ObjectSet("Watermark", OBJPROP_XDISTANCE, 5);
  ObjectSet("Watermark", OBJPROP_YDISTANCE, 5);   
  ObjectSetText("Watermark","http://greedypigtrading.blogspot.com",Font_Size, font2, DimGray);      
// $$$ TopLeft Dashboard/Display  
  ObjectCreate("xADR0", OBJ_LABEL, 0, 0, 0);          // Average Daily Range ("ADR20" Label)
  ObjectSet("xADR0", OBJPROP_CORNER, DisplayCorner);
  ObjectSet("xADR0", OBJPROP_XDISTANCE, x);
  ObjectSet("xADR0", OBJPROP_YDISTANCE, y+20);   
 
  ObjectCreate("xADR1", OBJ_LABEL, 0, 0, 0);          // Average Daily Range ("ADR10" Label)
  ObjectSet("xADR1", OBJPROP_CORNER, DisplayCorner);
  ObjectSet("xADR1", OBJPROP_XDISTANCE, x);
  ObjectSet("xADR1", OBJPROP_YDISTANCE, y+35);  
 
  ObjectCreate("xADR2", OBJ_LABEL, 0, 0, 0);          // Average Daily Range ("ADR5" Label)
  ObjectSet("xADR2", OBJPROP_CORNER, DisplayCorner);
  ObjectSet("xADR2", OBJPROP_XDISTANCE, x);
  ObjectSet("xADR2", OBJPROP_YDISTANCE, y+50);
 
  ObjectCreate("xADR3", OBJ_LABEL, 0, 0, 0);          // "Today's Range" Label
  ObjectSet("xADR3", OBJPROP_CORNER, DisplayCorner);
  ObjectSet("xADR3", OBJPROP_XDISTANCE, x);
  ObjectSet("xADR3", OBJPROP_YDISTANCE, y+65); 
   
  ObjectCreate("xADR4", OBJ_LABEL, 0, 0, 0);
  ObjectSet("xADR4", OBJPROP_CORNER, DisplayCorner);  // "ADR Top" Label
  ObjectSet("xADR4", OBJPROP_XDISTANCE, x);
  ObjectSet("xADR4", OBJPROP_YDISTANCE, y+80);
  
  ObjectCreate("DailyPipsObj2", OBJ_LABEL, 0, 0, 0);
  ObjectSet("DailyPipsObj2", OBJPROP_CORNER, DisplayCorner);  // Daily Pips
  ObjectSet("DailyPipsObj2", OBJPROP_XDISTANCE, x);
  ObjectSet("DailyPipsObj2", OBJPROP_YDISTANCE, y+97);
 
  ObjectCreate("xADR5", OBJ_LABEL, 0, 0, 0);          // "ADR Bottom" Label
  ObjectSet("xADR5", OBJPROP_CORNER, DisplayCorner);
  ObjectSet("xADR5", OBJPROP_XDISTANCE, x);
  ObjectSet("xADR5", OBJPROP_YDISTANCE, y+130);
// $$$ On Chart ADR Price Label Display     
  ObjectCreate("ADR5_High_obj" ,OBJ_ARROW,0,Time[0],0);  //Get this to calc price and plot 
  ObjectSet("ADR5_High_obj",OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); 
  ObjectSet("ADR5_High_obj" ,OBJPROP_COLOR,Red);
  ObjectSet("ADR5_High_obj" ,OBJPROP_WIDTH,3);	
   
  ObjectCreate("ADR5_Low_obj",OBJ_ARROW,0,Time[0],0);  //Get this to calc price and plot  
  ObjectSet("ADR5_Low_obj",OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); 
  ObjectSet("ADR5_Low_obj" ,OBJPROP_COLOR,Green);
  ObjectSet("ADR5_Low_obj" ,OBJPROP_WIDTH,3);	

  ObjectCreate("ADR10_High_obj" ,OBJ_ARROW,0,Time[1],0);  //Get this to calc price and plot 
  ObjectSet("ADR10_High_obj",OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); 
  ObjectSet("ADR10_High_obj" ,OBJPROP_COLOR,Red);
  ObjectSet("ADR10_High_obj" ,OBJPROP_WIDTH,2);	
   
  ObjectCreate("ADR10_Low_obj",OBJ_ARROW,0,Time[1],0);  //Get this to calc price and plot  
  ObjectSet("ADR10_Low_obj",OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); 
  ObjectSet("ADR10_Low_obj" ,OBJPROP_COLOR,Green);
  ObjectSet("ADR10_Low_obj" ,OBJPROP_WIDTH,2);	   
  
  ObjectCreate("ADR20_High_obj" ,OBJ_ARROW,0,Time[2],0);  //Get this to calc price and plot 
  ObjectSet("ADR20_High_obj",OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); 
  ObjectSet("ADR20_High_obj" ,OBJPROP_COLOR,Red);
  ObjectSet("ADR20_High_obj" ,OBJPROP_WIDTH,1);	
   
  ObjectCreate("ADR20_Low_obj",OBJ_ARROW,0,Time[2],0);  //Get this to calc price and plot  
  ObjectSet("ADR20_Low_obj",OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); 
  ObjectSet("ADR20_Low_obj" ,OBJPROP_COLOR,Green);
  ObjectSet("ADR20_Low_obj" ,OBJPROP_WIDTH,1);	   
  return(0);
} // End Initialize 

int deinit()
{
     if (ObjectFind("xADR0") == 0 )          ObjectDelete("xADR0");// only delete it if it exists
     if (ObjectFind("xADR1") == 0 )          ObjectDelete("xADR1");
     if (ObjectFind("xADR2") == 0 )          ObjectDelete("xADR2");   
     if (ObjectFind("xADR3") == 0 )          ObjectDelete("xADR3");
     if (ObjectFind("xADR4") == 0 )          ObjectDelete("xADR4"); 
     if (ObjectFind("xADR5") == 0 )          ObjectDelete("xADR5");                    
     if (ObjectFind("DailyPipsObj2") == 0 )  ObjectDelete("DailyPipsObj2");  
     if (ObjectFind("ADR5_High_obj") == 0 )  ObjectDelete("ADR5_High_obj");
     if (ObjectFind("ADR5_Low_obj") == 0 )   ObjectDelete("ADR5_Low_obj");
     if (ObjectFind("ADR10_High_obj") == 0 )  ObjectDelete("ADR10_High_obj");
     if (ObjectFind("ADR10_Low_obj") == 0 )   ObjectDelete("ADR10_Low_obj");
     if (ObjectFind("ADR20_High_obj") == 0 )  ObjectDelete("ADR20_High_obj");
     if (ObjectFind("ADR20_Low_obj") == 0 )   ObjectDelete("ADR20_Low_obj");               
     
       
  return(0);
} // End Deinitialize

int start()
{
  // Oink Oink
  string text; 
  string Color; 
  int Bars0=Bars;
  //$$$$$  ADR CALCULATION $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  
  if(Bars0>LastBars0)
  {
  
    int n=1;  // zoinks
    static int adr1,adr5,adr10,adr20,adr;
    double     Daily.Range =0.0;    
    double     ADR5_High =0;
    double     ADR5_Low=0;
    double     ADR10_High =0;
    double     ADR10_Low=0; 
    double     ADR20_High =0;
    double     ADR20_Low=0; 
      
    for(int i=1;i<=20;i++) // $$$ Loop Past 20 Daily Sessions
    {
      while(ExcludeSundayData && TimeDayOfWeek(iTime(Symbol(),PERIOD_D1,n))==0) n++; // If TimeDayOfWeek returns 0 add 1 to n to skip Sunday
      Daily.Range=Daily.Range + ( iHigh(Symbol(),PERIOD_D1,n) - iLow(Symbol(),PERIOD_D1,n) )/PipValue;
      if(i==1)  adr1 =MathRound(Daily.Range);
      if(i==5)  adr5 =MathRound(Daily.Range/5);
      if(i==10) adr10=MathRound(Daily.Range/10);
      if(i==20) adr20=MathRound(Daily.Range/20);
      n++;  
    }     
    text="ADR(20) = "+adr20;
    ObjectSetText("xADR0",text,Font_Size, font2, ADR_Color);      // $$$ "ADR20" Label       
    
    text="ADR(10) = "+adr10;
    ObjectSetText("xADR1",text,Font_Size, font2, ADR_Color);      // $$$ "ADR10" Label    
   
    text="ADR(5)   = "+adr5;
    ObjectSetText("xADR2",text,Font_Size, font2, ADR_Color);      // $$$ "ADR5" Label

    LastBars0=Bars0;      
  }      
  //$$$$$  END OF ADR CALCULATION $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$   
  
  //Today's Range and Limit Room $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  
  int t,RmUp,RmDn,RmLmt; // zoinks
  double Todays.Low  =  iLow (Symbol(),PERIOD_D1,0);
  double Todays.High =  iHigh(Symbol(),PERIOD_D1,0);
  Todays.Range =  MathRound((Todays.High - Todays.Low)    /PipValue );  
  RmUp         =  MathRound( adr5   - (Bid - Todays.Low)  /PipValue );
  RmDn         =  MathRound( adr5   - (Todays.High - Bid) /PipValue );
   
  ADR5_High     =  Todays.Low  + (adr5 * PipValue);
  ADR5_Low      =  Todays.High - (adr5 * PipValue);  
  
  ADR10_High     =  Todays.Low  + (adr10 * PipValue);
  ADR10_Low      =  Todays.High - (adr10 * PipValue); 
  
  ADR20_High     =  Todays.Low  + (adr20 * PipValue);
  ADR20_Low      =  Todays.High - (adr20 * PipValue);     
  
  text         ="Today    = " + Todays.Range;                       // "Today's Range" Label
  ObjectSetText("xADR3",text,Font_Size,font2, ADR_Color);  
      
  text         ="ADR(5) Top@" + DoubleToStr(ADR5_High,4)+" = "+ RmUp + " Pips Away";      // "ADR Top" Label
  if (RmUp<20)   ObjectSetText("xADR4",text,Font_Size, font1, Yellow);
   else   ObjectSetText("xADR4",text,Font_Size, font2, Green);
  
  text         ="ADR(5) Bottom@" + DoubleToStr(ADR5_Low,4)+" = "+ RmDn + " Pips Away";    // "ADR Bottom" Label
  if (RmDn<20)   ObjectSetText("xADR5",text,Font_Size, font2, Yellow); 
  else ObjectSetText("xADR5",text,Font_Size, font2, Green); 

if( iClose(Symbol(),PERIOD_D1,0 ) > iOpen(Symbol(),PERIOD_D1,0 )) DailyPips = (iClose(Symbol(),PERIOD_D1,0 ) - iOpen(Symbol(),PERIOD_D1,0 ) ) /PipValue;
else if( iOpen(Symbol(),PERIOD_D1,0 ) > iClose(Symbol(),PERIOD_D1,0 )) DailyPips = (iOpen(Symbol(),PERIOD_D1,0 ) - iClose(Symbol(),PERIOD_D1,0 ) ) /PipValue;

// $$$ Change Display of DailyPips by Daily Pip Range for the day.
// $$$ YELLOW
if (DailyPips < 20) 
ObjectSetText ("DailyPipsObj2",DoubleToStr( (iClose(Symbol(),PERIOD_D1,0 ) - iOpen(Symbol(),PERIOD_D1,0 ))/PipValue ,0),20,"Arial Black",Yellow);
// $$$ RED
else if (  
            (iOpen(Symbol(),PERIOD_D1,0 ) - iClose(Symbol(),PERIOD_D1,0 ))/PipValue >20 ) 
ObjectSetText ("DailyPipsObj2",DoubleToStr( (iClose(Symbol(),PERIOD_D1,0 ) - iOpen(Symbol(),PERIOD_D1,0 ))/PipValue ,0),20,"Arial Black",Red);
// $$$ GREEN 
else if (  
            (iClose(Symbol(),PERIOD_D1,0 ) - iOpen(Symbol(),PERIOD_D1,0 ))/PipValue >20 ) 	  

ObjectSetText ("DailyPipsObj2",DoubleToStr( (iClose(Symbol(),PERIOD_D1,0 ) - iOpen(Symbol(),PERIOD_D1,0 ))/PipValue ,0),20,"Arial Black",Green);
// $$$ DISPLAY OF PRICE LABELS ON THE CHART
if (Show.ADR5)
   {
   // $$$ Set ADR Price Label HIGH     
   ObjectSet("ADR5_High_obj"    ,OBJPROP_TIME1,Time[0]);  //Get this to calc price and plot 
   ObjectSet("ADR5_High_obj"    ,OBJPROP_PRICE1,ADR5_High);  //Get this to calc price and plot    
	ObjectSetText("ADR5_High_obj","ADR5 High=" + DoubleToStr(ADR5_High,4),10,font1,Red);
   // $$$ Set ADR Price Label LOW     
   ObjectSet("ADR5_Low_obj"    ,OBJPROP_TIME1,Time[0]);  //Get this to calc price and plot 
   ObjectSet("ADR5_Low_obj"    ,OBJPROP_PRICE1,ADR5_Low);  //Get this to calc price and plot    
	ObjectSetText("ADR5_Low_obj","ADR5 Low="+DoubleToStr(ADR5_Low,4),10,font1,Red);
   }
   else
   {
     if (ObjectFind("ADR5_High_obj") == 0 )  ObjectDelete("ADR5_High_obj");
     if (ObjectFind("ADR5_Low_obj")  == 0 )  ObjectDelete("ADR5_Low_obj");
   }
if (Show.ADR10)
   {
   // $$$ Set ADR Price Label HIGH     
   ObjectSet("ADR10_High_obj"    ,OBJPROP_TIME1,Time[1]);  //Get this to calc price and plot 
   ObjectSet("ADR10_High_obj"    ,OBJPROP_PRICE1,ADR10_High);  //Get this to calc price and plot    
	ObjectSetText("ADR10_High_obj","ADR10 High=" + DoubleToStr(ADR10_High,4),10,font1,Red);
   // $$$ Set ADR Price Label LOW     
   ObjectSet("ADR10_Low_obj"    ,OBJPROP_TIME1,Time[1]);  //Get this to calc price and plot 
   ObjectSet("ADR10_Low_obj"    ,OBJPROP_PRICE1,ADR10_Low);  //Get this to calc price and plot    
	ObjectSetText("ADR10_Low_obj","ADR10 Low="+DoubleToStr(ADR10_Low,4),10,font1,Red);
   }   
   else
   {
     if (ObjectFind("ADR10_High_obj") == 0 )  ObjectDelete("ADR10_High_obj");
     if (ObjectFind("ADR10_Low_obj")  == 0 )  ObjectDelete("ADR10_Low_obj"); 
   }
if (Show.ADR20)
   {
   // $$$ Set ADR Price Label HIGH     
   ObjectSet("ADR20_High_obj"    ,OBJPROP_TIME1,Time[2]);  //Get this to calc price and plot 
   ObjectSet("ADR20_High_obj"    ,OBJPROP_PRICE1,ADR20_High);  //Get this to calc price and plot    
	ObjectSetText("ADR20_High_obj","ADR20 High=" + DoubleToStr(ADR20_High,4),10,font1,Red);
   // $$$ Set ADR Price Label LOW     
   ObjectSet("ADR20_Low_obj"    ,OBJPROP_TIME1,Time[2]);  //Get this to calc price and plot 
   ObjectSet("ADR20_Low_obj"    ,OBJPROP_PRICE1,ADR20_Low);  //Get this to calc price and plot    
	ObjectSetText("ADR20_Low_obj","ADR20 Low="+DoubleToStr(ADR20_Low,4),10,font1,Red);
   }    
   else
   {
     if (ObjectFind("ADR20_High_obj") == 0 )  ObjectDelete("ADR20_High_obj");
     if (ObjectFind("ADR20_Low_obj")  == 0 )  ObjectDelete("ADR20_Low_obj");  
   }   
  return(0);
} // END Start
//+------------------------------------------------------------------+

Comments