/// <summary> /// Initializes a new instance of the <see cref="PriceableCEROption"/> class. /// </summary> /// <param name="baseDate">The base date.</param> /// <param name="nodeStruct">The nodeStruct.</param> /// <param name="rollCalendar">THe rollCalendar.</param> /// <param name="fixedRate"></param> public PriceableCEROption(DateTime baseDate, CommodityFutureNodeStruct nodeStruct, IBusinessCalendar rollCalendar, BasicQuotation fixedRate) : base(baseDate, nodeStruct, rollCalendar, fixedRate) { Id = nodeStruct.Future.id; Future = nodeStruct.Future; ModelIdentifier = "CommoditiesFuturesOptionAsset"; var idParts = Id.Split('-'); var exchangeCommodityName = idParts[2]; var immCode = idParts[3]; int intResult; //Catch the relative rolls. if (int.TryParse(immCode, out intResult)) { var tempTradingDate = LastTradingDayHelper.ParseCode(immCode); immCode = tempTradingDate.GetNthMainCycleCode(baseDate, intResult); } var lastTradingDay = LastTradingDayHelper.Parse(exchangeCommodityName, immCode); LastTradeDate = lastTradingDay.GetLastTradingDay(baseDate); RiskMaturityDate = LastTradeDate; OptionsExpiryDate = LastTradeDate; TimeToExpiry = (decimal)DayCounter.YearFraction(BaseDate, RiskMaturityDate); }
/// <summary> /// Initializes a new instance of the <see cref="PriceableCER"/> class. /// </summary> /// <param name="baseDate">The base date.</param> /// <param name="nodeStruct">The nodeStruct.</param> /// <param name="rollCalendar">THe rollCalendar.</param> /// <param name="fixedRate"></param> public PriceableCER(DateTime baseDate, CommodityFutureNodeStruct nodeStruct, IBusinessCalendar rollCalendar, BasicQuotation fixedRate) : base(baseDate, nodeStruct.Future, nodeStruct.BusinessDayAdjustments, fixedRate, null) { Id = nodeStruct.Future.id; Future = nodeStruct.Future; PriceQuoteUnits = nodeStruct.PriceQuoteUnits; ModelIdentifier = "CommoditiesFuturesAsset"; SettlementBasis = "The business day prior to the 15th calendar day of the contract month"; ContractMonthPeriod = nodeStruct.ContractMonthPeriod; ContractSeries = "March (H), May (K), July (N), September (U) & December (Z)"; var idParts = Id.Split('-'); var exchangeCommodityNames = idParts[2].Split('.'); var commodityCode = exchangeCommodityNames[0]; if (exchangeCommodityNames.Length > 1) { commodityCode = exchangeCommodityNames[1]; } var immCode = idParts[3]; //Catch the relative rolls. if (int.TryParse(immCode, out var intResult)) { var tempTradingDate = LastTradingDayHelper.ParseCode(commodityCode); immCode = tempTradingDate.GetNthMainCycleCode(baseDate, intResult); } var lastTradingDay = LastTradingDayHelper.Parse(commodityCode, immCode); LastTradeDate = lastTradingDay.GetLastTradingDay(baseDate); RiskMaturityDate = LastTradeDate; TimeToExpiry = (decimal)DayCounter.YearFraction(BaseDate, RiskMaturityDate); }
/// <summary> /// Gets the Last trading day by year. This takes an array of years. /// </summary> /// <param name="exchangeCommodityName">Name of the exchange commodity.</param> /// <param name="yearsArray">The array of years as integers.</param> /// <param name="mainCycle">if set to <c>true</c> [main cycle].</param> /// <returns>A range of dates.</returns> public object[,] LastTradingDayByYear(string exchangeCommodityName, Excel.Range yearsArray, Boolean mainCycle) { List <int> unqVals = DataRangeHelper.StripIntRange(yearsArray); var dates = LastTradingDayHelper.GetLastTradingDays(exchangeCommodityName, unqVals.ToArray(), mainCycle); var resVals = RangeHelper.ConvertArrayToRange(dates); return(resVals); }
/// <summary> /// Gets the Last trading based on a given month. /// </summary> /// <param name="exchangeCommodityName">Name of the exchange commodity.</param> /// <param name="monthsArray">The array of months.</param> /// <param name="yearsArray">The array of years as integers.</param> /// <returns></returns> public object[,] LastTradingDayByMonth(string exchangeCommodityName, Excel.Range monthsArray, Excel.Range yearsArray) { List <int> unqMonths = DataRangeHelper.StripIntRange(monthsArray); List <int> unqYears = DataRangeHelper.StripIntRange(yearsArray); List <DateTime> dates = LastTradingDayHelper.GetLastTradingDays(exchangeCommodityName, unqMonths.ToArray(), unqYears.ToArray()); var resVals = RangeHelper.ConvertArrayToRange(dates); return(resVals); }
/// <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); }
/// <summary> /// whether or not the given date is an IMM date /// </summary> /// <param name="exchangeCommodityName">Currently defined for: ED, ER, RA, BAX, L, ES, EY, HR, IR, IB and W.</param> /// <param name="date">THe date to verify.</param> /// <param name="mainCycle">Is the contract a main cycle type?</param> /// <returns>true/false</returns> public bool IsLastTradingDate(string exchangeCommodityName, DateTime date, bool mainCycle) { bool result = LastTradingDayHelper.IsLastTradingDate(exchangeCommodityName, date, mainCycle); return(result); }
/// <summary> /// next IMM date following the given date /// returns the 1st delivery date for next contract listed in the /// International Money Market section of the Chicago Mercantile /// Exchange. /// </summary> /// <param name="exchangeCommodityName">Name of the exchange commodity.</param> /// <param name="refDate">THe refernce date to use.</param> /// <param name="mainCycle">Is the contract a main cycle type.</param> /// <returns></returns> public DateTime GetNextLastTradingDate(string exchangeCommodityName, DateTime refDate, bool mainCycle) { DateTime date = LastTradingDayHelper.GetNextLastTradingDate(exchangeCommodityName, refDate, mainCycle); return(date); }
/// <summary> /// returns the IMM code for next contract listed in the /// relevant Exchange. /// </summary> /// <param name="exchangeCommodityName">Currently defined for: ED, ER, RA, BAX, L, ES, EY, HR, IR, IB and W.</param> /// <param name="date">The date.</param> /// <param name="mainCycle">Is the contract a main cycle type?</param> /// <returns>The futures code string</returns> public string GetNextFuturesCode(string exchangeCommodityName, DateTime date, bool mainCycle) { string result = LastTradingDayHelper.GetNextFuturesCode(exchangeCommodityName, date, mainCycle); return(result); }