//-------------------------------------------------------------------------
        // price and vega function
        private System.Func <double, double[]> getValueVegaFunction(ResolvedIborCapFloorLeg cap, RatesProvider ratesProvider, IborCapletFloorletVolatilities vols, ZonedDateTime prevExpiry, int nodeIndex)
        {
            VolatilityIborCapletFloorletPeriodPricer periodPricer = LegPricer.PeriodPricer;

            System.Func <double, double[]> priceAndVegaFunction = (double?x) =>
            {
                IborCapletFloorletVolatilities newVols = vols.withParameter(nodeIndex, x.Value);
                double                         price   = cap.CapletFloorletPeriods.Where(p => p.FixingDateTime.isAfter(prevExpiry)).Select(p => periodPricer.presentValue(p, ratesProvider, newVols).Amount).Sum();
                PointSensitivities             point   = cap.CapletFloorletPeriods.Where(p => p.FixingDateTime.isAfter(prevExpiry)).Select(p => periodPricer.presentValueSensitivityModelParamsVolatility(p, ratesProvider, newVols)).Aggregate((c1, c2) => c1.combinedWith(c2)).get().build();
                CurrencyParameterSensitivities sensi   = newVols.parameterSensitivity(point);
                double                         vega    = sensi.Sensitivities.get(0).Sensitivity.get(nodeIndex);
                return(new double[] { price, vega });
            };
            return(priceAndVegaFunction);
        }
Example #2
0
 /// <summary>
 /// Creates an instance.
 /// </summary>
 /// <param name="periodPricer">  the pricer for <seealso cref="IborCapletFloorletPeriod"/>. </param>
 public VolatilityIborCapFloorLegPricer(VolatilityIborCapletFloorletPeriodPricer periodPricer)
 {
     this.periodPricer = ArgChecker.notNull(periodPricer, "periodPricer");
 }
        // sum of caplet prices which are already fixed
        private double priceFixed(ResolvedIborCapFloorLeg cap, RatesProvider ratesProvider, IborCapletFloorletVolatilities vols, ZonedDateTime prevExpiry)
        {
            VolatilityIborCapletFloorletPeriodPricer periodPricer = LegPricer.PeriodPricer;

            return(cap.CapletFloorletPeriods.Where(p => !p.FixingDateTime.isAfter(prevExpiry)).Select(p => periodPricer.presentValue(p, ratesProvider, vols).Amount).Sum());
        }