//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
// 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)
{
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 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
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