//+------------------------------------------------------------------+
//|                                                 Simone stuff.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+

extern string dummy99 = "Time difference between you and GMT, in minutes";
extern string dummy99a = "AUS=10hrs, 600 min";
extern string dummy99b = "UK=1 hr, 60 min";
extern int TRS_gmt_shift = 600;	// AUS

bool	firstTime= true;

void loadInitialParams()
{
	if (firstTime)
	{
		// Get info for this pair
		calcPairTradingHours(Symbol(), start_hourm, end_hourm, start_houre, end_houre, true);

		string globName = Symbol() + " Simone Magic";

		globName = Symbol() + " Simone Magic";
		loadVarDefaultFromGlobals(globName, MagicNumber);

		globName = Symbol() + " Simone start_hourm";
		loadVarDefaultFromGlobals(globName, start_hourm);

		globName = Symbol() + " Simone end_hourm";
		loadVarDefaultFromGlobals(globName, end_hourm);

		globName = Symbol() + " Simone start_houre";
		loadVarDefaultFromGlobals(globName, start_houre);

		globName = Symbol() + " Simone end_houre";
		loadVarDefaultFromGlobals(globName, end_houre);

		firstTime = false;
	}
}


void loadVarDefaultFromGlobals(string globName, int& v)
{
	if (v == -1)
	{
		string tmpStr = GlobalVariableGet(globName);
		if (tmpStr + "" != "")
		{
		 	int tmpInt = StrToInteger(tmpStr);
	 		v = tmpInt;
		}
	}

	GlobalVariableSet(globName, v);
}


int adjustHours(int hr, int diffFromGMT)
{

	hr += diffFromGMT;
	
//	if (hr > 24)
//	{
//		hr -= 24;
//	}

	return(hr);
}

// Calculate trading hours in GMT!!!
string calcPairTradingHours(string currencyPair
	, int& morningStart, int& morningEnd, int& eveningStart, int& eveningEnd
	, bool convertToLocalTime=false)
{
	string res = "";
	
	// Dummy loop that will execute only *once*. It allows for multiple exits to a single point in code
	for (int dummy = 0; dummy == 0; dummy++)
	{
		if (StringLen(currencyPair) != 6)
		{
			res = "Currency pair " + currencyPair + " is not 6 chars long";
			break;
		}
		
		string currency1 = StringSubstr(currencyPair, 0, 3);
		string currency2 = StringSubstr(currencyPair, 3, 3);
		
		morningStart = -2;
		morningEnd = -2;
		eveningStart = -2;
		eveningEnd = -2;
		
		calcCurrencyTradingHours(currency1, morningStart, morningEnd);
		calcCurrencyTradingHours(currency2, eveningStart, eveningEnd);
		if (morningStart == -2 || morningEnd == -2 || eveningStart == -2 || eveningEnd == -2)
		{
			res = "Could not calculate trading hours for " + currencyPair;
			break;
		}
		
//		OutputDebugStringA(currencyPair + ", " + morningStart + "   " + morningEnd + ", " + eveningStart + "    " + eveningEnd);
	} // single exit point...

	if (convertToLocalTime)
	{
		int diffFromGMT = TRS_gmt_shift /60;

		morningStart = adjustHours(morningStart, diffFromGMT);
		morningEnd = adjustHours(morningEnd, diffFromGMT);
		eveningStart =  adjustHours(eveningStart, diffFromGMT);
		eveningEnd =  adjustHours(eveningEnd, diffFromGMT);
	}

	return(res);
}

/*
from: http://forex.timezoneconverter.com/index.cgi?timezone=GMT;
Forex Market Center			Time Zone			Opens GMT					Closes GMT
=======================================================================================
Frankfurt, Germany	 		Europe/Berlin		06:00 AM, 11-June-2010		02:00 PM, 11-June-2010
London, Great Britain		Europe/London		07:00 AM, 11-June-2010		03:00 PM, 11-June-2010
New York, USA				America/New_York	12:00 PM, 10-June-2010		08:00 PM, 10-June-2010
Sydney, Australia	 		Australia/Sydney	10:00 PM, 10-June-2010		06:00 AM, 11-June-2010
Tokyo, Japan	 			Asia/Tokyo			11:00 PM, 10-June-2010		07:00 AM, 11-June-2010
*/

void calcCurrencyTradingHours(string currency, int& hourStart, int& hourEnd) 
{
	if (currency == "EUR" || currency == "CHF" || currency == "GBP")
	{
		hourStart = 06;
		hourEnd = 14;
	} else if (currency == "USD" || currency == "CAD")
	{
		hourStart = 12;
		hourEnd = 20;
	} else if (currency == "JPY")
	{
		hourStart = 23;
		hourEnd = 31;	// 7am next day
	} else if (currency == "AUD" || currency == "NZD")
	{
		hourStart = 22;
		hourEnd = 30;	// 6am next day
	}
}



