//+------------------------------------------------------------------+
//|                                                        Clock.mq4 |
//|                                                           Jerome |
//|                                               whitnell@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Jerome"
#property link      "whitnell@gmail.com"

//------------------------------------------------------------------
// Instructions
//    BrokerTZ  - Timezone of your Broker (in hours from GMT)
//    LocalTz   - Your timezone in hours from GMT
//    DST       - Is it daylight savings time?
//    ShowLocal - Set to tru to show your local time zone
//    corner    - 0 = top left, 1 = top right, 2 = bottom left, 3 = bottom right
//    topOff    - pixels from top to show the clock
//    labelColor- Color of label
//    clockColor- Color of clock
//
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red


//---- input parameters
extern double       BrokerTZ=3;
extern double       LocalTz=-4;
extern bool         DST=true;
extern bool         ShowLocal=false;
extern int          corner=0;
extern int          topOff=100;
extern color        labelColor=Gray;
extern color        clockColor=White;

//---- buffers
double ExtMapBuffer1[];
int LondonTZ = 1;
int TokyoTZ = 9;
int NewYorkTZ = -4;

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   int dstDelta=-1;
   if ( DST )
      dstDelta = 0;
   
   datetime brokerTime = CurTime();
   datetime GMT = brokerTime - (BrokerTZ+dstDelta)*3600;
   datetime local = GMT + (LocalTz + dstDelta) * 3600;
   datetime london = GMT + (LondonTZ + dstDelta) * 3600;
   datetime tokyo = GMT + (TokyoTZ + dstDelta) * 3600;
   datetime newyork = GMT + (NewYorkTZ + dstDelta) * 3600;
   
   //Print( brokerTime, " ", GMT, " ", local, " ", london, " ", tokyo, " ", newyork  );
   string GMTs = TimeToStr( GMT, TIME_MINUTES );
   string locals = TimeToStr( local, TIME_MINUTES  );
   string londons = TimeToStr( london, TIME_MINUTES  );
   string tokyos = TimeToStr( tokyo, TIME_MINUTES  );
   string newyorks = TimeToStr( newyork, TIME_MINUTES  );
   string brokers = TimeToStr( CurTime(), TIME_MINUTES );
   
   //string timeText = " Local: " + locals +  " GMT: " +GMTs +  " | London:" +londons + 
   //   " | New York: " +newyorks + " | Tokyo: " + tokyos ;
   
   //ObjectSetText( "times", timeText, 10, "Arial", clockColor );
   if ( ShowLocal ) {
      ObjectSetText( "locl", "Local:", 10, "Arial", labelColor );
      ObjectSetText( "loct", locals, 10, "Arial", clockColor );
   }
   ObjectSetText( "gmtl", "GMT", 10, "Arial", labelColor );
   ObjectSetText( "gmtt", GMTs, 10, "Arial", clockColor );
   ObjectSetText( "nyl", "New York:", 10, "Arial", labelColor );
   ObjectSetText( "nyt", newyorks, 10, "Arial", clockColor );
   ObjectSetText( "lonl", "London:", 10, "Arial", labelColor );
   ObjectSetText( "lont", londons, 10, "Arial", clockColor );
   ObjectSetText( "tokl", "Tokyo:", 10, "Arial", labelColor );
   ObjectSetText( "tokt", tokyos, 10, "Arial", clockColor );
   ObjectSetText( "brol", "Broker:", 10, "Arial", labelColor );
   ObjectSetText( "brot", brokers, 10, "Arial", clockColor );
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int ObjectMakeLabel( string n, int xoff, int yoff ) {
   ObjectCreate( n, OBJ_LABEL, 0, 0, 0 );
   ObjectSet( n, OBJPROP_CORNER, corner );
   ObjectSet( n, OBJPROP_XDISTANCE, xoff );
   ObjectSet( n, OBJPROP_YDISTANCE, yoff );
   ObjectSet( n, OBJPROP_BACK, true );
}

int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   
   int top=topOff;
   if ( ShowLocal ) {
      ObjectMakeLabel( "locl", 90, top );
      ObjectMakeLabel( "loct", 45, top );
   }
   ObjectMakeLabel( "gmtl", 90, top-15 );
   ObjectMakeLabel( "gmtt", 45, top-15 );
   ObjectMakeLabel( "nyl", 90, top-30 );
   ObjectMakeLabel( "nyt", 45, top-30 );
   ObjectMakeLabel( "lonl", 90, top-45 );
   ObjectMakeLabel( "lont", 45, top-45 );
   ObjectMakeLabel( "tokl", 90, top-60 );
   ObjectMakeLabel( "tokt", 45, top-60 );
   ObjectMakeLabel( "brol", 90, top-75 );
   ObjectMakeLabel( "brot", 45, top-75 );
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   ObjectDelete( "locl" );
   ObjectDelete( "loct" );
   ObjectDelete( "nyl" );
   ObjectDelete( "nyt" );
   ObjectDelete( "gmtl" );
   ObjectDelete( "gmtt" );
   ObjectDelete( "lonl" );
   ObjectDelete( "lont" );
   ObjectDelete( "tokl" );
   ObjectDelete( "tokt" );
   ObjectDelete( "brol" );
   ObjectDelete( "brot" );
//----
   return(0);
  }

