//+------------------------------------------------------------------+
//|                                               BID_VIEW.mq4       |
//|                                      Copyright © 2008, "OTCFX"   |
//|                                             Revision 1.6         |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008 OTCFX"
#property indicator_separate_window  

  
  extern bool   Bid_Colors = True; 
  extern string FontType=" Sans MS";
  extern color ColorHeading =  Gainsboro ;
  extern color ColorValue = CadetBlue ;  
  extern int  TimeFrame  = 1440;
  extern  int    Trend_Bars = 10;
  extern bool show.Trend = true ;
  extern int price.x.offset= 50;
  extern int price.y.offset= 10;     
  color  ColorPrice = CadetBlue; 
  int MAP =1;
  int Spread;
  int Local_Time;
  string   labelNames;
  string   shortName;
  int      corner;
  int      totalLabels;
  int      window;    
  int nDigits;
  int pZX;
  int PTL;
  double       O_P;
  double       O_P1;
  double       O_P2;
  int    F_Offset=0;

  
    
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+  
   
int init()
  {

   corner     = 0;
   shortName  = MakeUniqueName("BT ","");
   labelNames = shortName;
   IndicatorShortName(shortName);
    
   string S = Symbol();
     
   if(S=="GBPJPY" ||S=="EURJPY" || S=="USDJPY" || S=="GOLD" )nDigits = 2;   
   if(S=="GBPUSD" || S=="EURUSD" ||S=="NZDUSD" || S=="USDCHF"  ||
   S=="USDCAD" ||S=="AUDUSD" || S=="EURUSD" ||S=="EURCHF"  || S=="EURGBP"
   || S=="EURCAD" ||S=="EURAUD" || S=="AUDNZD")nDigits = 4;
      
  int result;

   if (TimeFrame == 0) 
      result = Period();   
   else
   {
  switch(TimeFrame) 
      {
         case 1    : result = PERIOD_M1;  break; 
         case 5    : result = PERIOD_M5;  break;
         case 15   : result = PERIOD_M15; break;
         case 30   : result = PERIOD_M30; break;
         case 60   : result = PERIOD_H1;  break;
         case 240  : result = PERIOD_H4;  break;
         case 1440 : result = PERIOD_D1;  break;
         case 7200 : result = PERIOD_W1;  break;
         case 28800: result = PERIOD_MN1; break;
         default  : result = Period(); break; 
      }
   }
   return(result);
}

int deinit() 
{ 
   while (totalLabels>0) { ObjectDelete(StringConcatenate(labelNames,totalLabels)); totalLabels--;}
   return(0);  
}  

        
 //+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+ 

int start()
  {
   
 window = WindowFind(shortName);   
  ObjectsDeleteAll( window, 21);
  ObjectsDeleteAll( window, 22);
  ObjectsDeleteAll( window, 23);
   
  int i=0;
  int R77=0,CD=0,AM=0;
  double HD,DL,BTX1,BTX1_1,BTX2,BTX2_2,BTX3,BTX3_3,BTX4,BTX4_4,BTX5,BTX5_5;
  double BTX6,BTX6_6,BTX7,BTX7_7,BTX8,BTX8_8,BTX9,BTX9_9,BTX10,BTX10_10,DC,DO;
  double PercentUp,Perc,Per;
  string FX_T="Verdana Bold";
  string T= TimeFrame;
  if (TimeFrame==0) TimeFrame=Period();
  int yPos = 24, xPos = 10;
  int xSpacer = 140;
  string SpacerText1 = "__________________________";
  string SpacerText2 = "__________________________________________________________________________________________________________";
  if(F_Offset>0) F_Offset=0;
  if(Trend_Bars>15) Trend_Bars=15;
  if(price.y.offset<10) price.y.offset=10;   
  if(price.y.offset>20) price.y.offset=20; 
  string S = Symbol();
   
  if(S=="GBPJPY" ||S=="EURJPY" || S=="USDJPY" || S=="GOLD" || S=="ES"|| S=="FGBL") {pZX = 100000;} else{pZX = 1000;} 
  if(S=="FTSE" ||S=="FDAX" || S=="FESX" || S=="YM"){PTL = 1;} else {PTL = 100;}
    
   R77 =(iClose(NULL,PERIOD_D1,0)-iOpen(NULL,PERIOD_D1,0))/Point;     
   DO  =  iOpen(NULL,PERIOD_D1,0);
   DC =iClose(NULL,PERIOD_D1,0);
   HD = iHigh(NULL,PERIOD_D1,0);
   DL = iLow(NULL,PERIOD_D1,0);
   //open0  =  iOpen(NULL,PERIOD_D1,0);
   PercentUp = ((R77)/(DC))/100;    
   Per = PercentUp*pZX; 
   Perc  = Per/1000;
   Spread=NormalizeDouble((Ask-Bid)/Point,0);   
   if(Spread<0) Spread=0;
    
   if (Bid_Colors == True)
   {
    if (Close[i] > O_P) ColorPrice = DodgerBlue;
    if (Close[i] < O_P) ColorPrice = LightGray;
    O_P = Close[i];
   }   
   color ColorCT709;
   if( Close[i]  < O_P2 ) { ColorCT709 =Red;} 
   O_P2 = Close[i];
    
   color ColorCT708;
   if( Close[i]  > O_P1  ) { ColorCT708 =Lime;} 
   O_P1 = Close[i]; 
     
   string Market_Price = DoubleToStr(Close[i], Digits);
   
   color ColorCH704 ;  
   if(R77 >= 0 ) { ColorCH704 =LimeGreen ; } 
    color ColorCH705 ;  
   if(R77 < 0 ) { ColorCH705 =Red ; }
   
 
 
///////ARROWS>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  
   setObject(next(),"^",115+price.x.offset, 2+price.y.offset,ColorCT708 ,"Arial Bold",20+F_Offset,0);
   setObject(next(),"^",127+price.x.offset, 32+price.y.offset,ColorCT709 ,"Arial Bold",20+F_Offset,180);
   setObject(next(),"^",227+price.x.offset, 2+price.y.offset,ColorCH704 ,"Arial Bold",18+F_Offset,0);//
   setObject(next(),"^",240+price.x.offset, 32+price.y.offset,ColorCH705 ,"Arial Bold",18+F_Offset,180);//
   
//////// Value inputs>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  
   setObject(next(),Market_Price ,140+price.x.offset, 5+price.y.offset,ColorPrice ,FX_T,16+F_Offset);  
   setObject(next(),StringSubstr(Symbol(),0),22+price.x.offset, 5+price.y.offset,ColorValue ,FX_T,13+F_Offset);
   setObject(next(),DoubleToStr(DO ,Digits),383+price.x.offset, 5+price.y.offset,ColorValue ,FX_T,13+F_Offset);
   setObject(next(),DoubleToStr(HD ,Digits),472+price.x.offset, 5+price.y.offset,ColorValue ,FX_T,13+F_Offset);
   setObject(next(),DoubleToStr(DL ,Digits),555+price.x.offset, 5+price.y.offset,ColorValue ,FX_T,13+F_Offset);
   setObject(next(),DoubleToStr(R77 ,0),247+price.x.offset, 5+price.y.offset,ColorValue ,FX_T,13+F_Offset);
   setObject(next(),TimeToStr(CurTime(),TIME_SECONDS),777+price.x.offset, 5+price.y.offset,ColorValue ,FX_T,13+F_Offset);
   setObject(next(),TimeToStr(LocalTime(),TIME_MINUTES),880+price.x.offset, 5+price.y.offset,ColorValue ,FX_T,13+F_Offset);
   setObject(next(),DoubleToStr(Spread ,Digits-3),970+price.x.offset, 5+price.y.offset,ColorValue ,FX_T,13+F_Offset);
   setObject(next(),DoubleToStr(Perc ,nDigits),300+price.x.offset, 5+price.y.offset,ColorValue ,FX_T,13+F_Offset);
   
   
///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   
      
   //HEADINGS>>>>>
   
  setObject(next(),"Name",45+price.x.offset, -10+price.y.offset,ColorHeading ,FX_T,9+F_Offset);
  setObject(next(),"Last",157+price.x.offset, -10+price.y.offset,ColorHeading ,FX_T,9+F_Offset);
  setObject(next(),"Change",237+price.x.offset, -10+price.y.offset,ColorHeading ,FX_T,9+F_Offset);  
  setObject(next(),"%CH",317+price.x.offset, -10+price.y.offset,ColorHeading ,FX_T,9+F_Offset);  
  setObject(next(),"Open",398+price.x.offset, -10+price.y.offset,ColorHeading ,FX_T,9+F_Offset);  
  setObject(next(),"High",484+price.x.offset, -10+price.y.offset,ColorHeading ,FX_T,9+F_Offset);  
  setObject(next(),"Low",571+price.x.offset, -10+price.y.offset,ColorHeading ,FX_T,9+F_Offset);
  setObject(next(),"BidTime",795+price.x.offset, -10+price.y.offset,ColorHeading ,FX_T,9+F_Offset);
  setObject(next(),"LocalTime",880+price.x.offset, -10+price.y.offset,ColorHeading ,FX_T,9+F_Offset);
  setObject(next(),"Spread",970+price.x.offset, -10+price.y.offset,ColorHeading ,FX_T,9+F_Offset);
  setObject(next(),"1",630+price.x.offset, -10+price.y.offset,ColorHeading ,"Verdana",8+F_Offset);
  setObject(next(),DoubleToStr(Trend_Bars ,0),755+price.x.offset, -10+price.y.offset,ColorHeading ,"Verdana",8+F_Offset);
  
  setObject(next(),"Trend",695+price.x.offset, -10+price.y.offset,ColorHeading ,FX_T,9+F_Offset);
  setObject(next(),StringSubstr((T),0),655+price.x.offset, -10+price.y.offset,ColorHeading ,FX_T,9+F_Offset);
  
/////BORDERS>>>>>>>>>>>>>>>>>>>>

  setObject(next(),SpacerText1,88+price.x.offset, 30+price.y.offset,DarkGray ,FX_T,17+F_Offset,90);  
  setObject(next(),SpacerText1,199+price.x.offset, 30+price.y.offset,DarkGray ,FX_T,17+F_Offset,90);
  setObject(next(),SpacerText1,270+price.x.offset, 30+price.y.offset,DarkGray ,FX_T,17+F_Offset,90);
  setObject(next(),SpacerText1,350+price.x.offset, 30+price.y.offset,DarkGray ,FX_T,17+F_Offset,90);
  setObject(next(),SpacerText1,430+price.x.offset, 30+price.y.offset,DarkGray ,FX_T,17+F_Offset,90);
  setObject(next(),SpacerText1,520+price.x.offset, 30+price.y.offset,DarkGray ,FX_T,17+F_Offset,90);
  setObject(next(),SpacerText1,600+price.x.offset, 30+price.y.offset,DarkGray ,FX_T,17+F_Offset,90);
  setObject(next(),SpacerText1,745+price.x.offset, 30+price.y.offset,DarkGray ,FX_T,17+F_Offset,90);
  setObject(next(),SpacerText1,840+price.x.offset, 30+price.y.offset,DarkGray ,FX_T,17+F_Offset,90);
  setObject(next(),SpacerText1,930+price.x.offset, 30+price.y.offset,DarkGray ,FX_T,17+F_Offset,90);
  setObject(next(),SpacerText1,1002+price.x.offset, 30+price.y.offset,DarkGray ,FX_T,17+F_Offset,90);
  setObject(next(),SpacerText1,-25+price.x.offset, 30+price.y.offset,DarkGray ,FX_T,17+F_Offset,90);
  
 /////////LINES>>>>>>>>>>>>>>>> 
  
  setObject(next(),SpacerText2,0+price.x.offset,   -5+price.y.offset,  DarkGray ,FX_T,6+F_Offset);
  setObject(next(),SpacerText2,250+price.x.offset, -5+price.y.offset,DarkGray ,FX_T,6+F_Offset);
  setObject(next(),SpacerText2,450+price.x.offset, -5+price.y.offset,DarkGray ,FX_T,6+F_Offset);
  setObject(next(),SpacerText2,650+price.x.offset, -5+price.y.offset,DarkGray ,FX_T,6+F_Offset);
  
  setObject(next(),SpacerText2,650+price.x.offset, 21+price.y.offset,DarkGray ,FX_T,6+F_Offset);
  setObject(next(),SpacerText2,380+price.x.offset, 21+price.y.offset,DarkGray ,FX_T,6+F_Offset);
  setObject(next(),SpacerText2,100+price.x.offset, 21+price.y.offset,DarkGray ,FX_T,6+F_Offset);
  setObject(next(),SpacerText1,0+price.x.offset, 21+price.y.offset,DarkGray ,FX_T,6+F_Offset);
  
 ////BIDTREND>>>>>>>>>>>>>>>>>>>>>>>>>
 
   //if(show.Trend){
   color LabelColor;     
   int SpX = 615, SpX2=7;
   for(i=0;i<=Trend_Bars;i++)
   {
      BTX1 =iMA(S, TimeFrame,MAP,0,1,1,i);
      BTX1_1 =iMA(S, TimeFrame,MAP,0,0,0,i);       
       
      LabelColor =Red;
      if(BTX1_1 > BTX1) LabelColor =Lime;
      SpX = SpX+ SpX2;
      if(show.Trend){
      setObject(next(),"-",SpX+price.x.offset, 25+price.y.offset,LabelColor ,FX_T,30,90);}
   }   
      
   
  return(0);
  }


string next() { totalLabels++; return(totalLabels); }  

string MakeUniqueName(string first, string rest)
{
   string result = first+(MathRand()%1001)+rest;

   while (WindowFind(result)> 0)
          result = first+(MathRand()%1001)+rest;
   return(result);
}

void setObject(string name,string text,int x,int y,color theColor, string font = "Arial",int size=10,int angle=0)
{
   string labelName = StringConcatenate(labelNames,name);

      if (ObjectFind(labelName) == -1)
          {
             ObjectCreate(labelName,OBJ_LABEL,window,0,0);
             ObjectSet(labelName,OBJPROP_CORNER,corner);
             if (angle != 0)
                  ObjectSet(labelName,OBJPROP_ANGLE,angle);
          }               
       ObjectSet(labelName,OBJPROP_XDISTANCE,x);
       ObjectSet(labelName,OBJPROP_YDISTANCE,y);
       ObjectSetText(labelName,text,size,font,theColor);

          
    //}        
//---- done
   return(0);
  }
   
   
  