///<summary> ///</summary> ///<param name="baseDate"></param> ///<param name="frequency"></param> ///<param name="dayCountFraction"></param> ///<returns></returns> ///<exception cref="NotImplementedException"></exception> public static decimal PeriodFractionFromCompoundingFrequency(DateTime baseDate, CompoundingFrequencyEnum frequency, DayCountFraction dayCountFraction) { switch (frequency) { case CompoundingFrequencyEnum.Continuous: return(0.0m); case CompoundingFrequencyEnum.Daily: IDayCounter dc = DayCounterHelper.Parse(dayCountFraction.Value); return((decimal)dc.YearFraction(baseDate, baseDate.AddDays(1.0d))); case CompoundingFrequencyEnum.Weekly: return((decimal)1 / 52); case CompoundingFrequencyEnum.Monthly: return((decimal)1 / 12); case CompoundingFrequencyEnum.Quarterly: return((decimal)1 / 4); case CompoundingFrequencyEnum.SemiAnnual: return((decimal)1 / 2); case CompoundingFrequencyEnum.Annual: return(1.0m); default: throw new NotImplementedException(); } }
/// <summary> /// Gets the year fraction. /// </summary> /// <returns></returns> public decimal[] GetYearFractions() { return (new[] { (decimal) DayCounterHelper.Parse(Deposit.dayCountFraction.Value).YearFraction( AdjustedEffectiveDate, GetRiskMaturityDate()) }); }
private void SetDayCounter(ICoreCache cache, string nameSpace, string currency) { Instrument instrument = InstrumentDataHelper.GetInstrumentConfigurationData(cache, nameSpace, currency, "ZeroRate"); if (instrument.InstrumentNodeItem is ZeroRateNodeStruct zeroRateNode) { DayCounter = DayCounterHelper.Parse(zeroRateNode.DayCountFraction.Value); } if (DayCounter == null) { throw new InvalidOperationException($"DayCounter is invalid for '{currency}'"); } }
/// <summary> /// Initializes a new instance of the <see cref="PriceableSimpleFra"/> class. /// </summary> /// <param name="baseDate">The base date.</param> /// <param name="nodeStruct"></param> /// <param name="fixingCalendar"></param> /// <param name="paymentCalendar"></param> /// <param name="fixedRate">The fixed rate.</param> public PriceableSimpleRevenueInflationSwap(DateTime baseDate, SimpleIRSwapNodeStruct nodeStruct, IBusinessCalendar fixingCalendar, IBusinessCalendar paymentCalendar, BasicQuotation fixedRate) : base(baseDate, nodeStruct.DateAdjustments, fixedRate) { Id = nodeStruct.SimpleIRSwap.id; SimpleInflationSwap = nodeStruct.SimpleIRSwap; SpotDateOffset = nodeStruct.SpotDate; Calculation = nodeStruct.Calculation; UnderlyingRateIndex = nodeStruct.UnderlyingRateIndex; AdjustedStartDate = GetSpotDate(baseDate, fixingCalendar, SpotDateOffset); DayCounter = DayCounterHelper.Parse(Calculation.dayCountFraction.Value); List <DateTime> unadjustedDateSchedule = DateScheduler.GetUnadjustedDateSchedule(AdjustedStartDate, SimpleInflationSwap.term, SimpleInflationSwap.paymentFrequency); AdjustedPeriodDates = AdjustedDateScheduler.GetAdjustedDateSchedule(unadjustedDateSchedule, nodeStruct.DateAdjustments.businessDayConvention, paymentCalendar); }
/// <summary> /// Gets the year fractions for dates. /// </summary> /// <param name="periodDates">The period dates.</param> /// <param name="dayCountFraction">The day count fraction.</param> /// <returns></returns> private static decimal[] GetYearFractionsForDates(IList <DateTime> periodDates, DayCountFraction dayCountFraction) { var yearFractions = new List <decimal>(); int index = 0; int periodDatesLastIndex = periodDates.Count - 1; foreach (DateTime periodDate in periodDates) { if (index == periodDatesLastIndex) { break; } var yearFraction = (decimal)DayCounterHelper.Parse(dayCountFraction.Value).YearFraction(periodDate, periodDates[index + 1]); yearFractions.Add(yearFraction); index++; } return(yearFractions.ToArray()); }
/// <summary> /// Gets the year fraction to maturity. /// </summary> /// <returns></returns> public decimal GetTimeToMaturity(DateTime baseDate, DateTime maturityDate) { return((decimal)DayCounterHelper.ToDayCounter(DayCountFractionEnum.ACT_365_FIXED).YearFraction(baseDate, maturityDate)); }