Exemplo n.º 1
0
        /// <summary>
        /// Returns the known reset rate if necessary, either via user-specified known rate or rate fixings file. Returns null if either reset rate is not necessary or not found.
        /// </summary>
        private static double?GetKnownResetRate(TDate baseDate, TDate resetDate, TDate paymentDate, YesNo useKnownRate, double knownRate, string rateFixing, RateFixingsProvider rateFixingsProvider, Deal deal)
        {
            double?knownResetRate = null;

            if (paymentDate >= baseDate && resetDate <= baseDate)
            {
                if (useKnownRate == YesNo.Yes)
                {
                    knownResetRate = knownRate;
                }
                else if (!string.IsNullOrWhiteSpace(rateFixing) && rateFixingsProvider != null)
                {
                    // Try get realized reset rate from Rate fixing file.
                    DateTime[] missingDates = { DateTime.FromOADate(resetDate) };
                    var        fixings      = CashflowsFixingsHelper.GetRateFixings(rateFixing, missingDates, rateFixingsProvider, baseDate, deal);

                    if (fixings != null && fixings.Length != 0 && !double.IsNaN(fixings[0]))
                    {
                        knownResetRate = fixings[0];
                    }
                }
            }

            return(knownResetRate);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Calculate the dates and years fractions not specified on the deal and get any known rates.
        /// </summary>
        public void Prepare(double baseDate, RateFixingsProvider rateFixings)
        {
            // Calculates various date properties of the deal and cache them.
            var deal             = (FloatingInterestCashflowInterpolatedDeal)Deal;
            var accrualCalendars = deal.GetAccrualHolidayCalendars();
            var rateCalendars    = deal.GetRateHolidayCalendars();

            fPaymentDate = deal.Payment_Date;

            if (deal.Accrual_Year_Fraction > 0.0)
            {
                fAccrualYearFraction = deal.Accrual_Year_Fraction;
            }
            else
            {
                fAccrualYearFraction = CalcUtils.DayCountFraction(deal.Accrual_Start_Date, deal.Accrual_End_Date, deal.Accrual_Day_Count, accrualCalendars);
            }

            fKnownResetRate1 = null;
            fKnownResetRate2 = null;

            if (deal.HasRate1())
            {
                if (deal.Rate_1_End_Date > 0.0)
                {
                    fRate1EndDate = deal.Rate_1_End_Date;
                }
                else
                {
                    fRate1EndDate = DateAdjuster.Add(deal.Rate_Start_Date, deal.Rate_1_Tenor, 1, rateCalendars, true, deal.Rate_Adjustment_Method, deal.Rate_Sticky_Month_End == YesNo.Yes).ToOADate();
                }

                if (deal.Rate_1_Year_Fraction > 0.0)
                {
                    fRate1YearFraction = deal.Rate_1_Year_Fraction;
                }
                else
                {
                    fRate1YearFraction = CalcUtils.DayCountFraction(deal.Rate_Start_Date, fRate1EndDate, deal.Rate_Day_Count, rateCalendars, deal.Rate_1_Tenor);
                }

                fKnownResetRate1 = GetKnownResetRate(baseDate, deal.Reset_Date, fPaymentDate, deal.Use_Known_Rate_1, deal.Known_Rate_1, deal.Rate_1_Fixing, rateFixings, deal);
            }

            if (deal.HasRate2())
            {
                if (deal.Rate_2_End_Date > 0.0)
                {
                    fRate2EndDate = deal.Rate_2_End_Date;
                }
                else
                {
                    fRate2EndDate = DateAdjuster.Add(deal.Rate_Start_Date, deal.Rate_2_Tenor, 1, rateCalendars, true, deal.Rate_Adjustment_Method, deal.Rate_Sticky_Month_End == YesNo.Yes).ToOADate();
                }

                if (deal.Rate_2_Year_Fraction > 0.0)
                {
                    fRate2YearFraction = deal.Rate_2_Year_Fraction;
                }
                else
                {
                    fRate2YearFraction = CalcUtils.DayCountFraction(deal.Rate_Start_Date, fRate2EndDate, deal.Rate_Day_Count, rateCalendars, deal.Rate_2_Tenor);
                }

                fKnownResetRate2 = GetKnownResetRate(baseDate, deal.Reset_Date, fPaymentDate, deal.Use_Known_Rate_2, deal.Known_Rate_2, deal.Rate_2_Fixing, rateFixings, deal);
            }
        }