//+------------------------------------------------------------------+
//|                                           TimeZonesConverter.mq4 |
//|                                  Copyright © 2010, SASHASAN Inc. |
//|                                               www.MetaQoutes.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, SASHASAN Inc."
#property link      "www.metaqoutes.com"
#include <WinUser32.mqh>

/*
   Here is an example of the two functions, which create
   start hour value from:
   1) offset value
   2) broker's name
   
*/

#define                       StartTimeByGMT    23  
                              // this value should be declared as a constant, 
                              // because it will be never changed

extern string                 MyBrokerName      =  "MetaQoutes";
                              // broker's name from database
extern int                    offset_value      =  -8;
                              // manually inserted value

int ExpertStartHour;          // the "real" start hour after all calculations

string BrokersList[100,100];
string off;

//--------------------------------------------------------------------

int init()
  {
//----
   FillUpBrokersNames();
/*
   ExpertStartHour = TimeConvertFromDigits(offset_value, StartTimeByGMT)
   MessageBox(
   StringConcatenate("Offset value : ",offset_value,
                     "\nExpert start hour by GMT : ",StartTimeByGMT,":00",
                     "\nExpert start hour by brokers time : ",ExpertStartHour,":00"), 
                     "Time zone is converted!", MB_OK|MB_ICONINFORMATION);

*/

   if(TimeConvertFromBrokersName(MyBrokerName,StartTimeByGMT) >= 0)
      {
      ExpertStartHour = TimeConvertFromBrokersName(MyBrokerName,StartTimeByGMT); 
      MessageBox(
      StringConcatenate("Broker name : ",MyBrokerName,
                        "\nBrokers offset time to GMT : ",off,
                        "\nExpert start hour by GMT : ",StartTimeByGMT,":00",
                        "\nExpert start hour by brokers time : ",ExpertStartHour,":00"), 
                        "Time zone is converted!", MB_OK|MB_ICONINFORMATION);
      }
   if(TimeConvertFromBrokersName(MyBrokerName,StartTimeByGMT) < 0)            
      MessageBox(
      StringConcatenate("Broker name : ",MyBrokerName,
                        "\nCurrent broker is not in database \nand its servers time is unknown!"), 
                        "Unable to convert time zone!", MB_OK|MB_ICONERROR);

   return;   
//----
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+


int TimeConvertFromDigits(int offset, int starttime)
{
   int t[StartTimeByGMT];
   for(int i = 0; i < ArraySize(t); i++)  t[i] = i;
   
   if(offset == 0) int hour = starttime;
   if(offset < 0)
      {
      for(i = ArraySize(t); i > 0; i--)
         {
         if(i == ArraySize(t) - MathAbs(offset))
            {
            hour = t[i];
            break;
            }
         }
      }
   if(offset > 0)
      {
      for(i = 0; i < ArraySize(t); i++)
         {
         if(i == (offset-1))
            {  
            hour = t[i];
            break;
            }
         }
      }
   return(hour);
}
//----------------------------------------------------------------------


int TimeConvertFromBrokersName(string brokername, int starttime)
{
   for(int i = 0; i < ArraySize(BrokersList); i++)
      {
      if(StringLen(BrokersList[i,0]) != 0)
         {
         if(MyBrokerName == BrokersList[i,0]) // || MyBrokerName == InUpperLetters(BrokersList[i,0])
            {
            off = BrokersList[i,1];
            int hour = TimeConvertFromDigits(StrToInteger(BrokersList[i,1]),starttime);
            break;
            }
         else
            hour = -1;
         }
      }
      
   return(hour);
}
//----------------------------------------------------------------------------  

void FillUpBrokersNames()
{
   BrokersList[0,0] = "IBFX";             BrokersList[0,1] = "0";
   BrokersList[1,0] = "Ibfx";             BrokersList[1,1] = "0";
   BrokersList[2,0] = "Marketiva";        BrokersList[2,1] = "0";
   BrokersList[3,0] = "MARKETIVA";        BrokersList[3,1] = "0";
   BrokersList[4,0] = "FOREX.COM";        BrokersList[4,1] = "0";
   BrokersList[5,0] = "Forex.com";        BrokersList[5,1] = "0";
   BrokersList[6,0] = "forex.com";        BrokersList[6,1] = "0";
   
   BrokersList[7,0] = "Alpari";           BrokersList[7,1] = "+2";
   BrokersList[8,0] = "ALPARI";           BrokersList[8,1] = "+2";
   BrokersList[9,0] = "CFGTrader";        BrokersList[9,1] = "+2";
   BrokersList[10,0] = "CFGTRADER";       BrokersList[10,1] = "+2";
   BrokersList[11,0] = "Fibo Group";      BrokersList[11,1] = "+2";
   BrokersList[12,0] = "FIBO GROUP";      BrokersList[12,1] = "+2";
   BrokersList[13,0] = "Forex LTD";       BrokersList[13,1] = "+2";
   BrokersList[14,0] = "FOREX LTD";       BrokersList[14,1] = "+2";
   BrokersList[15,0] = "MetaQoutes";      BrokersList[15,1] = "+2";
   BrokersList[16,0] = "METAQOUTES";      BrokersList[16,1] = "+2";
   BrokersList[17,0] = "North Finance";   BrokersList[17,1] = "+2";
   BrokersList[18,0] = "NORTH FINANCE";   BrokersList[18,1] = "+2";
   BrokersList[19,0] = "Real Trade";      BrokersList[19,1] = "+2";
   BrokersList[20,0] = "REAL TRADE";      BrokersList[20,1] = "+2";
   
   BrokersList[21,0] = "CoesFX";          BrokersList[21,1] = "+3";
   BrokersList[22,0] = "COESFX";          BrokersList[22,1] = "+3";
   BrokersList[23,0] = "FXDD";            BrokersList[23,1] = "+3";
   BrokersList[24,0] = "MoneyTec";        BrokersList[24,1] = "+3";
   BrokersList[25,0] = "MONEYTEC";        BrokersList[25,1] = "+3";
   
   BrokersList[26,0] = "Orion";           BrokersList[26,1] = "+4";
   BrokersList[27,0] = "ORION";           BrokersList[27,1] = "+4";

   BrokersList[28,0] = "ACTBrokers";      BrokersList[28,1] = "-4";
   BrokersList[29,0] = "ACTBROKERS";      BrokersList[29,1] = "-4";
   BrokersList[30,0] = "FXCM GMT";        BrokersList[30,1] = "-4";

   BrokersList[31,0] = "Oanda";           BrokersList[31,1] = "-5";
   BrokersList[32,0] = "OANDA";           BrokersList[32,1] = "-5";

   BrokersList[33,0] = "Netdania Charts"; BrokersList[33,1] = "-8";
   BrokersList[34,0] = "NETDANIA CHARTS"; BrokersList[34,1] = "-8";
   
   // recently added by kellera6 
   BrokersList[35,0] = "FXCM Trader 4";   BrokersList[35,1] = "-4";
   BrokersList[36,0] = "FXCM TRADER 4";   BrokersList[36,1] = "-4";
   BrokersList[37,0] = "FXCM MT4";        BrokersList[37,1] = "+1";

   return;
}
//------------------------------------------------------------------------------


