All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.opengamma.strata.pricer.capfloor.SabrIborCapFloorLegPricer Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2016 - present by OpenGamma Inc. and the OpenGamma group of companies
 *
 * Please see distribution for license.
 */
package com.opengamma.strata.pricer.capfloor;

import com.opengamma.strata.market.sensitivity.PointSensitivityBuilder;
import com.opengamma.strata.pricer.rate.RatesProvider;
import com.opengamma.strata.product.capfloor.IborCapletFloorletPeriod;
import com.opengamma.strata.product.capfloor.ResolvedIborCapFloorLeg;

/**
 * Pricer for cap/floor legs in SABR model.
 */
public class SabrIborCapFloorLegPricer
    extends VolatilityIborCapFloorLegPricer {

  /**
  * Default implementation.
  */
  public static final SabrIborCapFloorLegPricer DEFAULT =
      new SabrIborCapFloorLegPricer(SabrIborCapletFloorletPeriodPricer.DEFAULT);

  /**
   * The period pricer.
   */
  private final SabrIborCapletFloorletPeriodPricer periodPricer;

  /**
   * Creates an instance.
   * 
   * @param periodPricer  the pricer for {@link IborCapletFloorletPeriod}.
   */
  public SabrIborCapFloorLegPricer(SabrIborCapletFloorletPeriodPricer periodPricer) {
    super(periodPricer);
    this.periodPricer = periodPricer;
  }

  /**
   * Calculates the present value sensitivity of the Ibor cap/floor leg to the rate curves.
   * 

* The present value sensitivity is computed in a "sticky model parameter" style, i.e. the sensitivity to the * curve nodes with the SABR model parameters unchanged. This sensitivity does not include a potential * re-calibration of the model parameters to the raw market data. * * @param capFloorLeg the Ibor cap/floor leg * @param ratesProvider the rates provider * @param volatilities the volatilities * @return the point sensitivity to the rate curves */ public PointSensitivityBuilder presentValueSensitivityRatesStickyModel( ResolvedIborCapFloorLeg capFloorLeg, RatesProvider ratesProvider, SabrIborCapletFloorletVolatilities volatilities) { validate(ratesProvider, volatilities); return capFloorLeg.getCapletFloorletPeriods() .stream() .map(period -> periodPricer.presentValueSensitivityRatesStickyModel(period, ratesProvider, volatilities)) .reduce((c1, c2) -> c1.combinedWith(c2)) .get(); } /** * Calculates the present value sensitivity to the SABR model parameters of the Ibor cap/floor. *

* The sensitivity of the present value to the SABR model parameters, alpha, beta, rho and nu. * * @param capFloorLeg the Ibor cap/floor * @param ratesProvider the rates provider * @param volatilities the volatilities * @return the point sensitivity to the SABR model parameters */ public PointSensitivityBuilder presentValueSensitivityModelParamsSabr( ResolvedIborCapFloorLeg capFloorLeg, RatesProvider ratesProvider, SabrIborCapletFloorletVolatilities volatilities) { validate(ratesProvider, volatilities); return capFloorLeg.getCapletFloorletPeriods() .stream() .map(period -> periodPricer.presentValueSensitivityModelParamsSabr(period, ratesProvider, volatilities)) .reduce((c1, c2) -> c1.combinedWith(c2)) .get(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy