#property copyright "Don Isbell"
#property link      "disbellj@gmail.com"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Yellow

//---- inputs

extern string BO = "Timezone your broker uses";
extern string ex = "Examples: ibfx = 0, fxdd = 2,mbt = -4";
extern int Broker_UTC_Offset = -4;//During Daylight Savings (Spring/Summer), MBT is GMT-4. When not on Daylight Savings (Fall/Winter), MBT is GMT-5.
                                  //If NFP begins when not on Daylight Savings, use -5. If NFP begins when on Daylight Savings, use -4. 

extern bool ShowComments = true;

int init()
{

return(0);
}

int deinit()
{

// all objects are removed from the chart.
ObjectsDeleteAll();             

//EMPTY COMMENTS
Comment("");
   
return(0);
}

int start()
{
   
int i, limit;
int counted_bars=IndicatorCounted();
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;

// NFP cooling off period begins the first Friday of the month at 8:30 AM EST when non-farm payroll is released (next release
// date can be obtained from http://www.bls.gov/ces/). We need to get the hour in UCT time, so converted 8:30 EST to 13:30 UTC at
// http://timeanddate.com/worldclock/converter.html. So we will put 13:30 (UTC) for hour in the StartTime below, plus Broker UTC Offset,
// and 30 for minute in StartTime below.
// UTC = Coordinated Universal Time - the international basis for other time zones. Same time as for GMT (Greenwich Mean Time)

   int OneSecond = 1;
   int OneMinute = 60*OneSecond;
   int OneHour = 60*OneMinute;
   int OneDay = 24*OneHour;
   int OneWeek = 7*OneDay;
   
   //This is not used in calculations, just for comments on chart
   string myServerTime = TimeToStr(TimeCurrent() ); // server time
   string myLocalTime   = TimeToStr(TimeLocal() );   // local computer time
   int ServerToLocal_HourDiff = (StrToTime(myServerTime)-StrToTime(myLocalTime))/60/60;
   
   //Define the year to use in NFP_StartTime
   int StartYear=TimeYear(TimeCurrent());
   
   //Define the month to use in NFP_StartTime
   int StartMonth=TimeMonth(TimeCurrent());
   
   //Define the Start Date to use in NFP_StartTime. Which Date, 1-7, is the first Friday of the month?
   datetime DayOfMonthIs1 = StrToTime(StartYear+"."+StartMonth+"."+1);
   datetime DayOfMonthIs2 = StrToTime(StartYear+"."+StartMonth+"."+2);
   datetime DayOfMonthIs3 = StrToTime(StartYear+"."+StartMonth+"."+3);
   datetime DayOfMonthIs4 = StrToTime(StartYear+"."+StartMonth+"."+4);
   datetime DayOfMonthIs5 = StrToTime(StartYear+"."+StartMonth+"."+5);
   datetime DayOfMonthIs6 = StrToTime(StartYear+"."+StartMonth+"."+6);
   datetime DayOfMonthIs7 = StrToTime(StartYear+"."+StartMonth+"."+7);
   
   int StartDate;
   if (TimeDay(DayOfMonthIs1) == 1 && TimeDayOfWeek(DayOfMonthIs1) == 5) StartDate = 1;
   if (TimeDay(DayOfMonthIs2) == 2 && TimeDayOfWeek(DayOfMonthIs2) == 5) StartDate = 2;
   if (TimeDay(DayOfMonthIs3) == 3 && TimeDayOfWeek(DayOfMonthIs3) == 5) StartDate = 3;
   if (TimeDay(DayOfMonthIs4) == 4 && TimeDayOfWeek(DayOfMonthIs4) == 5) StartDate = 4;
   if (TimeDay(DayOfMonthIs5) == 5 && TimeDayOfWeek(DayOfMonthIs5) == 5) StartDate = 5;
   if (TimeDay(DayOfMonthIs6) == 6 && TimeDayOfWeek(DayOfMonthIs6) == 5) StartDate = 6;
   if (TimeDay(DayOfMonthIs7) == 7 && TimeDayOfWeek(DayOfMonthIs7) == 5) StartDate = 7;
   
   int StartHour = 13+Broker_UTC_Offset;//Reminder: converted 8:30 EST to 13:30 UTC at http://timeanddate.com/worldclock/converter.html, so 13 here
      
   //Define the NFP_StartTime, using the StartYear, month, StartDate above, with predefined hours NFP is released
   datetime NFP_StartTime;
   NFP_StartTime=StrToTime(StartYear+"."+StartMonth+"."+StartDate+" "+StartHour+":"+30+":"+00);
            
      int NFPStartBar = iBarShift( NULL, 0, NFP_StartTime, false);//Get the bar, on the current chart, that MT4 gives, with the time given
      datetime NFPStartBar_OpenTime = iTime(NULL,0,NFPStartBar);//Go back and get the open time of that bar, on the current chart

      datetime CurrBarOpenTime = iTime(NULL,0,0);
      int CurrBar = iBarShift( NULL, 0, CurrBarOpenTime, true);
      double CurrBarClose = iClose(NULL,0,0);

      // strings below used for comments, concerning NFP Start Bar, NFP End Bar, Start Trading Bar, Previous Week Open Bar,
      // Previous Week Close Bar, Current Week Open Bar, Current Week Close Bar, and Current Bar characteritics
      string value1 = NFPStartBar;  
      string value2 = TimeToStr(NFPStartBar_OpenTime,TIME_DATE|TIME_MINUTES);
      string value3 = TimeToStr(TimeCurrent() );
      string value4 = TimeToStr(TimeCurrent()-(Broker_UTC_Offset*60*60));
      string value5 = DoubleToStr(MarketInfo(Symbol(),MODE_TICKSIZE),4);
      string value6 = DoubleToStr(MarketInfo(Symbol(),MODE_TICKVALUE),4);
      string value7 = DoubleToStr(MarketInfo(Symbol(),MODE_LOTSIZE),4);
      
      if (ShowComments == true) {
      Comment (
      "Server Time = " + value3 + " (GMT/UTC Time " + Broker_UTC_Offset + " Hours (user input))" + "\n" +
      "GMT/UTC Time is = " + value4 + "\n" +
      "Tick Size = " + value5 + "\n" +
      "Tick Value = " + value6 + "\n" +
      "Lot Size = " + value7
      //"NFP_StartTime (GMT/UTC) = " + TimeToStr(NFP_StartTime-(Broker_UTC_Offset*OneHour)) + "\n" +
      //"NFP_StartTime (Brokers Server Time) = " + TimeToStr(NFP_StartTime) + "\n" +
      //"OpenBar = " + "Bar " + value1 + ", (open) Time = " + value2   
      );
      }

return(0);
}
//+------------------------------------------------------------------+
//Custom Function
//void thisNFP(datetime NFP_StartTime , datetime NFP_Endtime , double NFP_Hi , double NFP_Lo , datetime StartTradingtime , double MainChart_MA, double Sentinel, double Sentinel_MA, datetime PrevWk_Starttime , datetime PrevWk_Endtime , double PrevWk_Hi , double PrevWk_Lo , datetime CurrWk_Starttime , datetime CurrWk_Endtime , double CurrWk_Hi , double CurrWk_Lo)
//{
//return;
//}