pTradingRange





//+------------------------------------------------------------------+
//|   pTradingRange.mq4
//|   Displays trading range for 1) previous day, 
//+------------------------------------------------------------------+
#property indicator_chart_window

extern bool    Show.All =        true;
extern string  Comment.0 =       "-------------------------------------";
extern string  Comment.1 =       "Time.Frame in minutes:";
extern string  Comment.2 =       "1, 5, 15, 30, 60(1H), 240(4H),";
extern string  Comment.3 =       "1440(Daily),10080(Weekly),";
extern string  Comment.4 =       "43200(Monthly), 0(Chart timeframe)";
extern string  Comment.5 =       "-------------------------------------";
extern int     Time.Frame =      0;

extern string  Comment.6 =       "-------------------------------------";
extern string  Comment.7 =       "0=Top Left, 1=Top Right";
extern string  Comment.8 =       "2=Bottom Left, 3=Bottom Right";
extern string  Comment.9 =       "-------------------------------------";
extern int     Corner.Of.Chart = 2;
extern color   Color.Bar.Label =    LightSteelBlue;

int   Adjust_Side_to_side=0,Shift_UP_DN=0,Multiplier=10000;
bool  Legal.Time=false;
//+------------------------------------------------------------------+
int init()
   {
   if(Time.Frame==0||Time.Frame==1||Time.Frame==5||Time.Frame==15||Time.Frame==30||Time.Frame==60||Time.Frame==240||Time.Frame==1440||Time.Frame==10080||Time.Frame==43200) Legal.Time=true;
   return(0);
   }
//+------------------------------------------------------------------+
int GetMultiplier(string tSymbol)
   {
   if(StringFind(tSymbol,"JP",0)>0) return(100);
      else return(10000);
   }
//+------------------------------------------------------------------+   
int deinit()
   {
   ObjectsDeleteAll(0,OBJ_LABEL);
   return(0);
   }
//+------------------------------------------------------------------+
int start()
   {
   string   tLine;
   if(!Legal.Time) tLine="Illegal Time.Frame.  No further processing.  Time.Frame="+Time.Frame;
   else
      {
      Multiplier=GetMultiplier(Symbol());
      int i;
      int Range.Current=0,Range.1=0,Range.5=0,Range.10=0,Range.20=0,Range.Avg=0;
      int Range.Day = (iHigh(NULL,PERIOD_D1,0)-iLow(NULL,PERIOD_D1,0))*Multiplier;
      int Range.Yesterday = (iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1))*Multiplier;
      Range.Current = (iHigh(NULL,Time.Frame,0)-iLow(NULL,Time.Frame,0))*Multiplier;
      Range.1 = (iHigh(NULL,Time.Frame,1)-iLow(NULL,Time.Frame,1))*Multiplier;
      for(i=1;i<=5;i++) Range.5 = Range.5 + (iHigh(NULL,Time.Frame,i)-iLow(NULL,Time.Frame,i))*Multiplier;
      for(i=1;i<=10;i++) Range.10 = Range.10 + (iHigh(NULL,Time.Frame,i)-iLow(NULL,Time.Frame,i))*Multiplier;
      for(i=1;i<=20;i++) Range.20 = Range.20 + (iHigh(NULL,Time.Frame,i)-iLow(NULL,Time.Frame,i))*Multiplier;
      //Comment("Range.Current="+Range.Current+" Range.1="+Range.1+" Range.5="+Range.5+" Range.10="+Range.10+" Range.20="+Range.20);
      Range.5 = Range.5/5;
      Range.10 = Range.10/10;
      Range.20 = Range.20/20;
      Range.Avg = (Range.1+Range.5+Range.10+Range.20)/4;    //Since Current bar is still ranging, just average previous ranges
      tLine="Range Today="+Range.Day+", Yesterday="+Range.Yesterday;
      string tLine2="Current="+Range.Current+", Prev="+Range.1+ ", Averages: 5-bar="+Range.5+", 10-bar="+Range.10+", 20-bar="+Range.20;
      //string tLine3="10-bar="+Range.10+     ", 20-bar="+Range.20+", Average="+Range.Avg;
      }
   ObjectCreate("TradingRange1",OBJ_LABEL,0,0,0);
   ObjectSetText("TradingRange1",tLine,8,"Courier",Color.Bar.Label);
   ObjectSet("TradingRange1",OBJPROP_CORNER,Corner.Of.Chart);
   ObjectSet("TradingRange1",OBJPROP_XDISTANCE,5);
   ObjectSet("TradingRange1",OBJPROP_YDISTANCE,75);
   if(Legal.Time)
      {
      ObjectCreate("TradingRange2",OBJ_LABEL,0,0,0);
      ObjectSetText("TradingRange2",tLine2,8,"Courier",Color.Bar.Label);
      ObjectSet("TradingRange2",OBJPROP_CORNER,Corner.Of.Chart);
      ObjectSet("TradingRange2",OBJPROP_XDISTANCE,5);
      ObjectSet("TradingRange2",OBJPROP_YDISTANCE,60);
      }
   if(Show.All)      //UC,GU,UJ,AU,UC,EG,EJ,GJ
      {
      string tLine3,tLine4;
      tLine3="EU "+DoubleToStr(((iHigh("EURUSD",PERIOD_D1,0)-iLow("EURUSD",PERIOD_D1,0))*GetMultiplier("EURUSD")),0)+"/"+DoubleToStr(((iHigh("EURUSD",PERIOD_D1,1)-iLow("EURUSD",PERIOD_D1,1))*GetMultiplier("EURUSD")),0)+
         " GU "+ DoubleToStr(((iHigh("GBPUSD",PERIOD_D1,0)-iLow("GBPUSD",PERIOD_D1,0))*GetMultiplier("GBPUSD")),0) + "/" + DoubleToStr(((iHigh("GBPUSD",PERIOD_D1,1)-iLow("GBPUSD",PERIOD_D1,1))*GetMultiplier("GBPUSD")),0)+
         " UC "+ DoubleToStr(((iHigh("USDCHF",PERIOD_D1,0)-iLow("USDCHF",PERIOD_D1,0))*GetMultiplier("USDCHF")),0) + "/" + DoubleToStr(((iHigh("USDCHF",PERIOD_D1,1)-iLow("USDCHF",PERIOD_D1,1))*GetMultiplier("USDCHF")),0)+
         " UJ "+ DoubleToStr(((iHigh("USDJPY",PERIOD_D1,0)-iLow("USDJPY",PERIOD_D1,0))*GetMultiplier("USDJPY")),0) + "/" + DoubleToStr(((iHigh("USDJPY",PERIOD_D1,1)-iLow("USDJPY",PERIOD_D1,1))*GetMultiplier("USDJPY")),0)+
         " AU "+ DoubleToStr(((iHigh("AUDUSD",PERIOD_D1,0)-iLow("AUDUSD",PERIOD_D1,0))*GetMultiplier("AUDUSD")),0) + "/" + DoubleToStr(((iHigh("AUDUSD",PERIOD_D1,1)-iLow("AUDUSD",PERIOD_D1,1))*GetMultiplier("AUDUSD")),0)+
         " UCd "+ DoubleToStr(((iHigh("USDCAD",PERIOD_D1,0)-iLow("USDCAD",PERIOD_D1,0))*GetMultiplier("USDCAD")),0) + "/" + DoubleToStr(((iHigh("USDCAD",PERIOD_D1,1)-iLow("USDCAD",PERIOD_D1,1))*GetMultiplier("USDCAD")),0);
      tLine4="EG "+ DoubleToStr(((iHigh("EURGBP",PERIOD_D1,0)-iLow("EURGBP",PERIOD_D1,0))*GetMultiplier("EURGBP")),0) + "/" + DoubleToStr(((iHigh("EURGBP",PERIOD_D1,1)-iLow("EURGBP",PERIOD_D1,1))*GetMultiplier("EURGBP")),0)+
         " EJ "+ DoubleToStr(((iHigh("EURJPY",PERIOD_D1,0)-iLow("EURJPY",PERIOD_D1,0))*GetMultiplier("EURJPY")),0) + "/" + DoubleToStr(((iHigh("EURJPY",PERIOD_D1,1)-iLow("EURJPY",PERIOD_D1,1))*GetMultiplier("EURJPY")),0)+
         " GJ "+ DoubleToStr(((iHigh("GBPJPY",PERIOD_D1,0)-iLow("GBPJPY",PERIOD_D1,0))*GetMultiplier("GBPJPY")),0) + "/" + DoubleToStr(((iHigh("GBPJPY",PERIOD_D1,1)-iLow("GBPJPY",PERIOD_D1,1))*GetMultiplier("GBPJPY")),0);
      ObjectCreate("TradingRange3",OBJ_LABEL,0,0,0);
      ObjectSetText("TradingRange3",tLine3,8,"Courier",Color.Bar.Label);
      ObjectSet("TradingRange3",OBJPROP_CORNER,Corner.Of.Chart);
      ObjectSet("TradingRange3",OBJPROP_XDISTANCE,5);
      ObjectSet("TradingRange3",OBJPROP_YDISTANCE,45);
      ObjectCreate("TradingRange4",OBJ_LABEL,0,0,0);
      ObjectSetText("TradingRange4",tLine4,8,"Courier",Color.Bar.Label);
      ObjectSet("TradingRange4",OBJPROP_CORNER,Corner.Of.Chart);
      ObjectSet("TradingRange4",OBJPROP_XDISTANCE,5);
      ObjectSet("TradingRange4",OBJPROP_YDISTANCE,30);    
      }
   return(0);
   }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: