Ejemplo n.º 1
0
 /// <summary>
 /// Adds a source for interest rate forecasts.
 /// </summary>
 /// <param name="forecastCurve">The forecast curve.</param>
 /// <exception cref="System.ArgumentException"></exception>
 /// <seealso cref="AddFXForecast(IFXSource[])"/>
 public void AddRateForecast(IFloatingRateSource forecastCurve)
 {
     if (!forecastCurves.ContainsKey(forecastCurve.GetFloatingIndex()))
     {
         forecastCurves.Add(forecastCurve.GetFloatingIndex(), forecastCurve);
     }
     else
     {
         throw new ArgumentException(forecastCurve.GetFloatingIndex() + " has already been added to the model.");
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Curve based valuation of <see cref="FloatLeg"/>.  Assumes that correct forecast and discount curves have been provided.
        /// </summary>
        /// <param name="leg"></param>
        /// <param name="forecastCurve"></param>
        /// <param name="discountCurve"></param>
        /// <returns></returns>
        public static double CurvePV(this FloatLeg leg, IFloatingRateSource forecastCurve,
                                     IDiscountingSource discountCurve)
        {
            var legIndex     = forecastCurve.GetFloatingIndex();
            var resetDates1  = leg.GetRequiredIndexDates(legIndex);
            var indexValues1 = new double[resetDates1.Count];

            for (var i = 0; i < resetDates1.Count; i++)
            {
                indexValues1[i] = forecastCurve.GetForwardRate(resetDates1[i]);
            }
            leg.SetIndexValues(legIndex, indexValues1);
            var cfs1   = leg.GetCFs();
            var value1 = cfs1.PV(discountCurve);

            return(value1);
        }