Cloq_v1





//+------------------------------------------------------------------+
//|                                                         Cloq.mq4 |
//|                                                      Derk Wehler |
//|                                             derkwehler@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Derk Wehler"
#property link      "derkwehler@gmail.com"
//=============================================================================
// Instructions
//   CloqCorner   - 0 = top left, 1 = top right, 2 = bottom left, 3 = bottom right
//   DispGMT      - Display GMT Time
//   DispLocal	   - Display Local Time
//   DispLondon	- Display London Time
//   DispTokyo	   - Display Tokyo Time
//   DispNY		   - Display New York Time
//   DispBroker	- Display Brokers Time
//   LabelColor	- Color of city label
//   ClockColor	- Color of clock
//==============================================================================
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//----
extern int         CloqCorner   =2;
extern bool         DispGMT     =true;
extern bool         DispLocal  =true;
extern bool         DispLondon  =false;
extern bool         DispTokyo  =false;
extern bool         DispNY     =false;
extern bool         DispBroker  =true;
extern color        LabelColor  =Black;
extern color        ClockColor  =Black;
//----
int   Offset=100;
//---- buffers
double ExtMapBuffer1[];
int LondonTZ  =-1;
int TokyoTZ  =8;
int NewYorkTZ   =-5;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted();
   if (IsDST())
      TokyoTZ+=0;
//----
   Print("TimeZoneLocal: ",TimeZoneLocal());
   Print("TimeZoneServer: ",TimeZoneServer());
   datetime brokerTime  =TimeCurrent();
   datetime GMT      =TimeGMT();
   datetime local      =TimeLocal();
   datetime london   =GMT + (LondonTZ  * 3600);
   datetime tokyo      =GMT + (TokyoTZ   * 3600);
   datetime newyork   =GMT + (NewYorkTZ * 3600);
//----
   string GMTs   =TimeToStr(GMT,          TIME_MINUTES);
   string locals   =TimeToStr(TimeLocal(),    TIME_MINUTES);
   string londons   =TimeToStr(london,       TIME_MINUTES);
   string tokyos   =TimeToStr(tokyo,          TIME_MINUTES);
   string newyorks=TimeToStr(newyork,       TIME_MINUTES);
   string brokers   =TimeToStr(TimeCurrent(),    TIME_MINUTES);
//----
   if (DispLocal)
     {
      ObjectSetText( "locl", "Local:", 10, "Arial", LabelColor );
      ObjectSetText( "loct", locals, 10, "Arial", ClockColor );
     }
   if (DispGMT)
     {
      ObjectSetText( "gmtl", "GMT", 10, "Arial", LabelColor );
      ObjectSetText( "gmtt", GMTs, 10, "Arial", ClockColor );
     }
   if (DispNY)
     {
      ObjectSetText( "nyl", "New York:", 10, "Arial", LabelColor );
      ObjectSetText( "nyt", newyorks, 10, "Arial", ClockColor );
     }
   if (DispLondon)
     {
      ObjectSetText( "lonl", "London:", 10, "Arial", LabelColor );
      ObjectSetText( "lont", londons, 10, "Arial", ClockColor );
     }
   if (DispTokyo)
     {
      ObjectSetText( "tokl", "Tokyo:", 10, "Arial", LabelColor );
      ObjectSetText( "tokt", tokyos, 10, "Arial", ClockColor );
     }
   if (DispBroker)
     {
      ObjectSetText( "brol", "Broker:", 10, "Arial", LabelColor );
      ObjectSetText( "brot", brokers, 10, "Arial", ClockColor );
     }

   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int ObjectMakeLabel(string n, int xoff, int yoff)
  {
   ObjectCreate(n, OBJ_LABEL, 0, 0, 0);
   ObjectSet(n, OBJPROP_CORNER, CloqCorner);
   ObjectSet(n, OBJPROP_XDISTANCE, xoff);
   ObjectSet(n, OBJPROP_YDISTANCE, yoff);
   ObjectSet(n, OBJPROP_BACK, true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   SetIndexStyle(0, DRAW_LINE);
   SetIndexBuffer(0, ExtMapBuffer1);
//----
   int top=Offset;
   if (DispLocal)
     {
      ObjectMakeLabel("locl", 90, top );
      ObjectMakeLabel("loct", 45, top );
      top-=15;
     }
   if (DispGMT)
     {
      ObjectMakeLabel("gmtl", 90, top );
      ObjectMakeLabel("gmtt", 45, top );
      top-=15;
     }
   if (DispNY)
     {
      ObjectMakeLabel("nyl", 90, top );
      ObjectMakeLabel("nyt", 45, top );
      top-=15;
     }
   if (DispLondon)
     {
      ObjectMakeLabel("lonl", 90, top );
      ObjectMakeLabel("lont", 45, top );
      top-=15;
     }
   if (DispTokyo)
     {
      ObjectMakeLabel("tokl", 90, top );
      ObjectMakeLabel("tokt", 45, top );
      top-=15;
     }
   if (DispBroker)
     {
      ObjectMakeLabel("brol", 90, top );
      ObjectMakeLabel("brot", 45, top );
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
  }
//=================================================================================================
//===================================   Timezone Functions   ======================================
//=================================================================================================
#import "kernel32.dll"
int  GetTimeZoneInformation(int& TZInfoArray[]);
#import
//----
#define TIME_ZONE_ID_UNKNOWN   0
#define TIME_ZONE_ID_STANDARD  1
#define TIME_ZONE_ID_DAYLIGHT  2
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsDST()   // DST is the one over the winter
  {
   int TZInfoArray[43];
   switch(GetTimeZoneInformation(TZInfoArray))
     {
      case TIME_ZONE_ID_UNKNOWN:
         Print("WARNING: TIMEZONE ID UNKNOWN, Cloq may give wrong time!  Returning FALSE");
         return(false);
      case TIME_ZONE_ID_STANDARD:
         Print("TZ ---> STANDARD");
         return(false);
      case TIME_ZONE_ID_DAYLIGHT:
         Print("TZ ---> DAYLIGHT SAVINGS");
         return(true);
      default:
         Print("Unkown return value from GetTimeZoneInformation in kernel32.dll. Returning FALSE");
         return(false);
     }
  }
// Local timezone in hours, adjusting for daylight saving
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double TimeZoneLocal()
  {
   int TZInfoArray[43];
   switch(GetTimeZoneInformation(TZInfoArray))
     {
      case TIME_ZONE_ID_UNKNOWN:
         Print("Error obtaining PC timezone from GetTimeZoneInformation in kernel32.dll. Returning 0");
         return(0);
      case TIME_ZONE_ID_STANDARD:
         //		Print("PC timezone is STANDARD");
         return(TZInfoArray[0]/(-60.0));
      case TIME_ZONE_ID_DAYLIGHT:
         //		Print("PC timezone is DAYLIGHT");
         return((TZInfoArray[0]+TZInfoArray[42])/(-60.0));
      default:
         Print("Unkown return value from GetTimeZoneInformation in kernel32.dll. Returning 0");
         return(0);
     }
  }
// Server timezone in hours
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double TimeZoneServer()
  {
   int ServerToLocalDiffMinutes=(TimeCurrent()-TimeLocal())/60;
   // round to nearest 30 minutes to allow for inaccurate PC clock
   int nHalfHourDiff=MathRound(ServerToLocalDiffMinutes/30.0);
   ServerToLocalDiffMinutes=nHalfHourDiff*30;
   return(TimeZoneLocal() + ServerToLocalDiffMinutes/60.0);
  }
// Uses local PC time, local PC timezone, and server time to calculate GMT time at arrival of last tick
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
datetime TimeGMT()
  {
   // two ways of calculating
   // 1. From PC time, which may not be accurate
   // 2. From server time. Most accurate except when server is down on weekend
   datetime dtGmtFromLocal=TimeLocal() - TimeZoneLocal()*3600;
   datetime dtGmtFromServer=TimeCurrent() - TimeZoneServer()*3600;
//----
   Print("TimeZoneLocal returned: ", TimeZoneLocal());
   // return local-derived value if server value is out by more than 5 minutes, eg during weekend
   if (dtGmtFromLocal > dtGmtFromServer + 300)
     {
      return(dtGmtFromLocal);
     }
   else
     {
      return(dtGmtFromServer);
     }
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:



Indicator Curves created:

Implements a curve of type DRAW_LINE


Indicators Used:



Custom Indicators Used:
kernel32

Order Management characteristics:

Other Features: