/// <summary> /// </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) { var month = (int)LastTradingDayHelper.ParseToCode(CodeAndExpiryMonth.ImmMonthCode); DateTime unadjustedExpirationDate; if (CodeAndExpiryMonth.Year < referenceDate.Year % 10) { int realYear = referenceDate.Year - (referenceDate.Year % 10) + CodeAndExpiryMonth.Year + 10; unadjustedExpirationDate = new DateTime(realYear, month, 1).AddDays(-15); } else { int realYear = referenceDate.Year - (referenceDate.Year % 10) + CodeAndExpiryMonth.Year; unadjustedExpirationDate = new DateTime(realYear, month, 1).AddDays(-15); } return(unadjustedExpirationDate); }
/// <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) { var month = (int)LastTradingDayHelper.ParseToCode(CodeAndExpiryMonth.ImmMonthCode); DateTime unadjustedExpirationDate; if (CodeAndExpiryMonth.Year < referenceDate.Year % 10) { int realYear = referenceDate.Year - referenceDate.Year % 10 + CodeAndExpiryMonth.Year + 10; unadjustedExpirationDate = RuleHelper.LastDayInMonth(month, realYear); } else { int realYear = referenceDate.Year - referenceDate.Year % 10 + CodeAndExpiryMonth.Year; unadjustedExpirationDate = RuleHelper.LastDayInMonth(month, realYear); } return(unadjustedExpirationDate); }
/// <summary> /// /// IRH7,IRZ9 (90 day futures) /// /// IBH8,IBU9 (30 day futures) /// </summary> /// <returns></returns> /// <param name="referenceDate"> /// if 2000, Z8 is futures that expires in December 2008. /// if 2010, Z8 is futures that expires in December 2018. /// </param> public virtual DateTime GetLastTradingDay(DateTime referenceDate) { var month = (int)LastTradingDayHelper.ParseToCode(CodeAndExpiryMonth.ImmMonthCode); // Expiration - 2nd (2) Friday (4) of month. // DateTime unadjustedExpirationDate; if (CodeAndExpiryMonth.Year < referenceDate.Year % 10) { int realYear = referenceDate.Year - (referenceDate.Year % 10) + CodeAndExpiryMonth.Year + 10; unadjustedExpirationDate = RuleHelper.GetNthDayInMonth(month, 3, 3, realYear, 0, 0); } else { int realYear = referenceDate.Year - (referenceDate.Year % 10) + CodeAndExpiryMonth.Year; unadjustedExpirationDate = RuleHelper.GetNthDayInMonth(month, 3, 3, realYear, 0, 0); } return(unadjustedExpirationDate); }
/// <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 - 3rd (3) Wednesday (3) 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.GetNthDayInMonth(month, 3, 3, realYear, 0, 0); } else { int realYear = referenceDate.Year - (referenceDate.Year % 10) + CodeAndExpiryMonth.Year; unadjustedExpirationDate = RuleHelper.GetNthDayInMonth(month, 3, 3, realYear, 0, 0); } return(unadjustedExpirationDate); }