#Bid_View1.5





//+------------------------------------------------------------------+
//|                                               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);
  }
   
   
  



Sample





Analysis



Market Information Used:

Series array that contains open prices of each bar
Series array that contains close prices for each bar
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:

Moving average indicator


Custom Indicators Used:

Order Management characteristics:

Other Features: