Histo ranges_v0.10





//+------------------------------------------------------------------+
//|                                            Histo ranges_v001.mq4 |
//|                                                  Rafaell (okfar) |
//|                                                            http: |
//+------------------------------------------------------------------+
#property copyright "Rafaell (okfar)"
#property link      "http:"
#property show_inputs

extern int   agoYear=1, 
             agoMonth=0,  
             agoWeek=0, 
             agoDays=0,
             nrange=12;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----

    
    
   int sDataBar;
   int i,j, rangeMax, rangeMin;
   int typHist = 1;
   int OpenTime = 0;
   double range[];
   datetime    dateRangeMax,
               dateRangeMin,
               dateRangeS,
               dateRangeF;
   double dRange;
    
   double hrange[];           
   int n[];           
    
   int nBarD = iBars(Symbol(), PERIOD_D1); 
   ArrayResize(hrange, nrange+1);
   ArrayResize(n, nrange);
   

   sDataBar = iBarShift(NULL, PERIOD_D1, StartBar(agoYear, agoMonth, agoWeek, agoDays, typHist, OpenTime), False);
   dateRangeS = iTime(Symbol(), PERIOD_D1, sDataBar);
   dateRangeF =  iTime(Symbol(), PERIOD_D1, 1);

   ArrayResize(range, sDataBar);
   for (i=sDataBar; i>0; i--) {
      range[i-1] = iHigh(Symbol(), PERIOD_D1, i) - iLow(Symbol(), PERIOD_D1, i);
      if (range[i-1] == 0)
          if (iHigh(Symbol(), PERIOD_D1, i) == 0) {
            Alert ("Pleas check your input parameters. History data missing!");
            return(0);
          }
   }
   rangeMax = ArrayMaximum(range);
double   rangeMaxA = range[rangeMax];
   dateRangeMax = iTime(Symbol(), PERIOD_D1, rangeMax+1);
   
   rangeMin = ArrayMinimum(range);
double   rangeMinA = range[rangeMin];
   dateRangeMin = iTime(Symbol(), PERIOD_D1, rangeMin+1);
  // ArraySort(range, WHOLE_ARRAY, 0, MODE_ASCEND); 
         
         
   dRange = (MathLog(rangeMaxA) - MathLog(rangeMinA/*-1*Point*/))/((nrange-1)*1.0);
   hrange[0] = rangeMinA-1*Point;
   
   //hrange[0] = range[0]-1*Point;
   double sumRange = 0;
   for (i=0; i<nrange; i++) 
      hrange[i+1] = MathLog(hrange[0]) + (i+1)*dRange;
   for (i=1; i<=nrange; i++) 
      hrange[i] = NormalizeDouble(MathExp(hrange[i]), Digits);
         
   int nsum = 0;
   for (i=sDataBar-1; i>=0; i--) {
      nsum ++;
      sumRange += range[i];
      for (j=nrange; j>0 ; j--)  { 
         if (range[i] < hrange[j] && range[i] >= hrange[j-1]) {
            n[j-1] ++;
           // break;
         }
      }
   }
        
   
   
   string text = StringConcatenate("  <",hrange[1],"\t\t", n[0], "\n");
   for (i=1; i<nrange-1;i++) { 
      text = StringConcatenate(text, hrange[i] ," - (", hrange[i+1],")\t\t", n[i],"\n");
   }   
      text = StringConcatenate(text, " > " ,hrange[nrange-1] ,"\t\t", n[nrange-1],"\n");
   
   

      string msg =   "  Pair: (from - to)\t\t" + Symbol() + " ("+TimeToStr(dateRangeS, TIME_DATE) + " - " +TimeToStr(dateRangeF, TIME_DATE) + ")\n" + 
                  "  Min:\t\t" + DoubleToStr(rangeMinA,Digits) + "\t(" + TimeToStr(dateRangeMin, TIME_DATE) + ")\n" +
                  "  Max:\t\t" + DoubleToStr(rangeMaxA,Digits) + "\t(" + TimeToStr(dateRangeMax, TIME_DATE) + ")\n" +                   
                  "  Avg:\t\t" + DoubleToStr(sumRange/nsum, Digits) + "\tn= "+ nsum +"\n\n" +
                  "  Range\t\t No. \n" +  
                    text + "\n" ;
 
   MessageBox(msg, "Daily range statistics", 0);
//----
   return(0);
  }
//+------------------------------------------------------------------+


datetime StartBar(int dye, int dmo, int dwe, int dda, int typ, int ot)
{
   int ye,mo,da,ho;
   datetime ct;
     
      
   ct=TimeCurrent();
   switch (typ) {
      case 0: {
         ct -= 60*60*(24)*(dda-1);
         ct -= 60*60*24*(7)*(dwe);
         
         ye = TimeYear(ct);
         mo = TimeMonth(ct);
         da = TimeDay(ct);
         ho = TimeHour(ct);

         if (dda > 0)
            ho=0;
         if (dwe > 0) {
            da -= (TimeDayOfWeek(TimeCurrent())-1);
            ho=0;
            //da -= DayOfWeek();      
         }
         if (dmo > 0) {
           da=1;
           ho=0;
           mo -= (dmo-1);
           while (mo < 0) {
               mo +=12;
               ye -= 1;
            }
         }
         if (dye > 0) {
           da=1;
           mo=1;
           // da  -= DayOfYear()+1 ;
           ho=0;
           ye -= (dye-1);
         
         }
       if (ot != 0) {
           ct = StrToTime(da+"."+mo+"."+ye+" "+ho);
           if (ot > TimeHour(TimeCurrent()))
               ct = ct + (ot-24)*3600;     
           else 
             ct += (ot)*3600;    
           //cd -=  (ot)*3600
           ye = TimeYear(ct);
           mo = TimeMonth(ct);
           da = TimeDay(ct);
           ho = TimeHour(ct);
        }
        
      } break;
      
      case 1: {      
         ct = TimeCurrent()+3600;
         if (dda > 0) 
            ct -= 60*60*(24)*dda;
         if (dwe > 0)
            ct -= 60*60*24*(7)*dwe;   
      
         ye = TimeYear(ct);
         mo = TimeMonth(ct);
         da = TimeDay(ct);
         ho = TimeHour(ct);
      
         if (dmo > 0) {
            mo -= dmo;
            while (mo < 0) {
               mo +=12;
               ye -= 1;
            }
         }
         if (dye > 0) {
            ye -= dye;
         }
     } break;
     
     default: {
         ye = Year();
          mo = Month();
          da = Day();
         ho = Hour();   
     } break;
  }   
 // return (StrToTime(StringConcatenate(/*"D'",*/da,".",mo,".",ye," ",ho/*,"'"*/)));
  return (StrToTime(da+"."+mo+"."+ye+" "+ho));   
} 





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:

It opens Message Boxes to the user