//+------------------------------------------------------------------+
//|                                                   Alert_News.mq4 |
//|                                                   David Louisson |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "David Louisson"
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

extern  int   AlertMins = 5;
extern  int   NumTimes  = 1;

string   FileName     = "news.csv";
int      handle;

int      eCount;              // Event counter
datetime eTime[9999];         // Event date/time, format = yyyy.mm.dd<space>hh:mm
int      eNumber[9999];       // Event seq# (same date/time use ascending seq#s)
int      eWingding[9999];     // Wingding code for implicated currency, as above
int      eImpact[9999];       // 1=low impact; 2=medium impact; 3=high impact
string   eCurrency[9999];     // Currency/ies on whose charts object will display; ALL = all currencies 
string   ePeriods[9999];      // Time period settings on which object will display (M1,M5,M15,M30,H1,H4,D1,W1,MTH; 0=no, 1=yes)
string   eText1[9999];        // First descr line, format = hh:mm XXX Y "event description"
                              //   where XXX=currency; Y=H/M/L impact
string   eText2[9999];        // Second descr line, shows Actual, Forecast, Previous values
int      eAlerts[9999];       // number of times alert already sounded


int init()
  {
   handle = FileOpen(FileName, FILE_CSV|FILE_READ,';');          // Open NEWS.CSV
   if(handle==0)
      Comment("File "+FileName+" not found.");

   for(eCount = 0; !FileIsEnding(handle); eCount++)              // Read from NEWS.CSV; one line per event
   {
      eTime[eCount]     = StrToTime(FileReadString(handle));     // Event date/time
      eNumber[eCount]   = StrToInteger(FileReadString(handle));  // Event seq# (same date/time have ascending seq#s)
      eWingding[eCount] = StrToInteger(FileReadString(handle));  // Wingding code denoting implicated currency
      eImpact[eCount]   = StrToInteger(FileReadString(handle));  // Impact: 1=low; 2=medium; 3=High
      eCurrency[eCount] = FileReadString(handle);                // Currency/ies on whose charts object will display; ALL = all currencies
      ePeriods[eCount]  = FileReadString(handle);                // Time period settings on which object will display (M1,M5,M15,M30,H1,H4,D1,W1,MTH; 0=no, 1=yes)
      eText1[eCount]    = FileReadString(handle);                // First line of description
      eText2[eCount]    = FileReadString(handle);                // Second line of description
      eAlerts[eCount]   = NumTimes;
      if (FileIsEnding(handle))  break;
   }

   int debug, i;
   debug=FileOpen("debug.txt", FILE_CSV|FILE_WRITE, '|');
   for( i=0; i<eCount; i++)
     FileWrite(debug,i,TimeToStr(eTime[i]),eNumber[i],eWingding[i],eImpact[i],eCurrency[i],eText1[i],eText2[i],eAlerts[i]);
   FileClose(debug);

   FileClose(handle);

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   for(int i=0; i<eCount; i++)   {
     if (eTime[i] >= TimeCurrent() && (eTime [i] - TimeCurrent()) <= AlertMins * 60 && eAlerts[i] > 0 && StringSubstr(eText1[i],2,1) == ":")   {
       Alert("NEWS: " + eText1[i]);
       eAlerts[i]--;
     }  
   }  
   return(0);
  }
//+------------------------------------------------------------------+