Holiday best practice..

 
Another gap, best way to determine holidays for Sydney, Tokyo, London, NY,? (Frankfurt, Chicago, HK, Wellington)??
 
I assume you mean bank holidays? In the U.S., there are only ten federally recognized holidays (11 if year is preceded by presidential election). See Federal holidays and Federal Reserve Holiday Schedule. It shouldn't be too hard to code the rules for each holiday into a function which would tell you if a particular day is a U.S. bank holiday.
 

Below is a function that determines whether a specified date is a U.S. federal holiday.

bool IsUSFederalHoliday(datetime DT) {
   // ** for holiday descriptions: http://en.wikipedia.org/wiki/Bank_holidays_in_United_States#List_of_Federal_Holidays
   //                              http://en.wikipedia.org/wiki/Public_holidays_in_the_United_States#Federal_holidays
   // ** holidays that fall on a weekend are usually observed on the closest weekday
   
   #define Thursday   4
   #define Friday     5
   #define Sunday     0
   #define Monday     1
        
   int today_moy = TimeMonth(DT), today_dom = TimeDay(DT), today_dow = TimeDayOfWeek(DT),
       yesterday_moy = TimeMonth(DT - 86400), yesterday_dom = TimeDay(DT - 86400), yesterday_dow = TimeDayOfWeek(DT - 86400),
       tomorrow_moy = TimeMonth(DT + 86400), tomorrow_dom = TimeDay(DT + 86400), tomorrow_dow = TimeDayOfWeek(DT + 86400);
       
   if (today_moy == 1)
      return (
         // New Year's Day - part 1/2 (January 1st)
         ((today_dom == 1) || (today_dow == Monday && yesterday_dom == 1)) ||
         // Inauguration Day (Every fourth year on January 20th or, if the 20th is a Sunday, January 21st)
         (((TimeYear(DT) - 1) % 4 == 0) && ((today_dom == 20 && today_dow != Sunday) || (today_dom == 21 && today_dow == Monday))) ||
         // MLK's Birthday (Third Monday in January)
         (today_dow == Monday && MathCeil(today_dom / 7.0) == 3) );
   if (today_moy == 2)
      // President's Day (Third Monday in February)
      return (today_dow == Monday && MathCeil(today_dom / 7.0) == 3);
   if (today_moy == 5)
      // Memorial Day (Last Monday in May)
      return (today_dow == Monday && 31 - today_dom < 7);
   if (today_moy == 7)
      // Independence Day (July 4th)
      return ((today_dom == 4) || (today_dow == Friday && tomorrow_dom == 4) || (today_dow == Monday && yesterday_dom == 4));
   if (today_moy == 9)
      // Labor Day (First Monday in September)
      return (today_dow == Monday && MathCeil(today_dom / 7.0) == 1);
   if (today_moy == 10)
      // Columbus Day (Second Monday in October)
      return (today_dow == Monday && MathCeil(today_dom / 7.0) == 2);
   if (today_moy == 11)
      return (
         // Veterans Day (November 11th)
         ((today_dom == 11) || (today_dow == Friday && tomorrow_dom == 11) || (today_dow == Monday && yesterday_dom == 11)) ||
         // Thanksgiving Day (Fourth Thursday in November)
         (today_dow == Thursday && MathCeil(today_dom / 7.0) == 4) );
   if (today_moy == 12)
      return (
         // Christmas Day (December 25th)
         ((today_dom == 25) || (today_dow == Friday && tomorrow_dom == 25) || (today_dow == Monday && yesterday_dom == 25)) ||
         // New Year's Day - part 2/2 (January 1st)
         (today_dow == Friday && tomorrow_dom == 1) );
         
   return (false);
}

The function takes a datetime variable and returns a boolean value. I have verified the function for the holidays in 2000 through 2020 using www.timeanddate.com.

 

Maybe not the best way but it works for me.

Every week get the EA to downloaded the lastest of these: http://cdn.forexfactory.com/ffcal_week_this.xml and search it for holiday info.

It's good for USD, CAD, CHF, GBP, AUS, NZD, JPY, CNY and I think France and Germany, perhaps also Italy and Spain