//+------------------------------------------------------------------+
//|                                            Spread Monitor II.mq4 |
//|                                           Copyright © 2008 Wolfe |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008 Wolfe"
#property link      ""

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Cornsilk
#property indicator_color2 Red
#property indicator_color3 Blue

extern string Pair = "EURUSD";
extern bool   ShowBidAsk = true;
extern bool   ShowSpread = false;


int Widen_Count;

//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffers[];
double ExtMapBuffer3[];
int tik,t;
   double buf[],buf2[],buf3[],MaxB,MinB=10000;
int period=10000;
int point;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
  if(Digits==2 || Digits==3)point=0.01;
  if(Digits==4 || Digits==5)point=0.0001;
//---- indicators
   IndicatorBuffers(4);
   IndicatorDigits(5);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexLabel(0,"BID");
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexLabel(1,"ASK");
   SetIndexBuffer(2,ExtMapBuffers);
   SetIndexBuffer(3,ExtMapBuffer3);
   

   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
  
  double CurrentSpread = MarketInfo(Pair,MODE_SPREAD);
  
  IndicatorShortName("SPREAD MONITOR II Current Spread =" );

  
 
    
   int i,b;
//---- 
t++;
b=period;
ArrayResize(buf,b);
ArrayResize(buf2,b);
ArrayResize(buf3,b);

if(tik==0)
   {
   for(i=0;i<b;i++)
      {
      buf[i]=Bid;
      buf2[i]=Ask;
      buf3[i]=Ask-Bid;
      }
   ExtMapBuffer3[0]=Bid+100*point;   
   ExtMapBuffer3[1]=Bid-100*point;   
   tik=1;
   }
   MaxB=0;MinB=10000;
   for(i=b-1;i>0;i--)
      {
      buf[i]=buf[i-1];
      if(MaxB<buf[i])MaxB=buf[i];
      if(MinB>buf[i])MinB=buf[i];
      } 
    for(i=b-1;i>0;i--)
      {
      buf2[i]=buf2[i-1];
      if(MaxB<buf2[i])MaxB=buf2[i];
      if(MinB>buf2[i])MinB=buf2[i];
      } 
    for(i=b-1;i>0;i--)
      {
      buf3[i]=buf3[i-1];
      } 
buf[0]=Bid;
if (ShowBidAsk)
for(i=0;i<b;i++)
   {
   ExtMapBuffer1[i]=buf[i];
   }
buf2[0]=Ask;
if (ShowBidAsk)
for(i=0;i<b;i++)
   {
   ExtMapBuffer2[i]=buf2[i];
   }
buf3[0]=Ask-Bid;
if (ShowSpread)
for(i=0;i<b;i++)
   {
   ExtMapBuffers[i]=buf3[i];
   }
if(MathCeil(t/10)*100==t)
   {
   for(i=b;i<Bars;i++)
      {
      ExtMapBuffer1[i]=Bid;
      ExtMapBuffer2[i]=Ask;
      }
      ArrayInitialize(ExtMapBuffer3,Bid); 
      if(MaxB-Bid<5*point)ExtMapBuffer3[0]=Bid+100*point;
      if(Bid-MinB<5*point)ExtMapBuffer3[1]=Bid-100*point;
      //Print(MaxB,"+",Bid,"+",MinB);
   }
   
      
  
//----
   return(0);
  }
//+------------------------------------------------------------------+