/// <summary> /// IRH7,IRZ9 (90 day futures) /// /// IBH8,IBU9 (30 day futures) /// </summary> /// <returns></returns> /// <param name="referenceDate"> /// if 2000, IRZ8 is futures that expires in December 2008. /// if 2010, IRZ8 is futures that expires in December 2018. /// </param> public override DateTime GetLastTradingDay(DateTime referenceDate) { //FuturesPrefixImmMonthCodeAndYear futuresPrefixImmMonthCodeAndYear = BreakCodeIntoPrefixAndYear(futuresCode); var month = (int)LastTradingDayHelper.ParseToCode(CodeAndExpiryMonth.ImmMonthCode); // Expiration - 2nd (2) Friday (4) of month. // //DateTime unadjustedExpirationDate = DateHelper.nthWeekday(2, 5, month, referenceYear + futuresPrefixImmMonthCodeAndYear.Year); DateTime unadjustedExpirationDate; if (CodeAndExpiryMonth.Year < referenceDate.Year % 10) { int realYear = referenceDate.Year - (referenceDate.Year % 10) + CodeAndExpiryMonth.Year + 10; unadjustedExpirationDate = RuleHelper.LastWeekdayDayInMonth(1, month, realYear); } else { int realYear = referenceDate.Year - (referenceDate.Year % 10) + CodeAndExpiryMonth.Year; unadjustedExpirationDate = RuleHelper.LastWeekdayDayInMonth(1, month, realYear); } return(unadjustedExpirationDate); }