private PointSensitivityBuilder unitNotionalSensitivityNoCompounding(RatePaymentPeriod period, RatesProvider provider) { Currency ccy = period.getCurrency(); PointSensitivityBuilder sensi = PointSensitivityBuilder.none(); for (RateAccrualPeriod accrualPeriod : period.getAccrualPeriods()) { sensi = sensi.combinedWith(unitNotionalSensitivityAccrual(accrualPeriod, ccy, provider)); } return sensi; }
/** * Calculates the par spread curve sensitivity. * * @param deposit the product * @param provider the rates provider * @return the par spread curve sensitivity */ public PointSensitivities parSpreadSensitivity(ResolvedIborFixingDeposit deposit, RatesProvider provider) { return forwardRateSensitivity(deposit, provider).build(); }
private PointSensitivityBuilder presentValueSensitivityFromProductPresentValueSensitivity( ResolvedCapitalIndexedBondTrade trade, RatesProvider ratesProvider, LegalEntityDiscountingProvider discountingProvider, PointSensitivityBuilder productPresnetValueSensitivity) { PointSensitivityBuilder sensiProduct = productPresnetValueSensitivity.multipliedBy(trade.getQuantity()); PointSensitivityBuilder sensiPayment = presentValueSensitivitySettlement(trade, ratesProvider, discountingProvider); return sensiProduct.combinedWith(sensiPayment); }
private PointSensitivityBuilder cutOffAccumulationSensitivity() { PointSensitivityBuilder combinedPointSensitivityBuilder = PointSensitivityBuilder.none(); int nbPeriodNotCutOff = nbPeriods - cutoffOffset + 1; for (int i = Math.max(fixedPeriod, nbPeriodNotCutOff); i < nbPeriods; i++) { OvernightIndexObservation obs = observations.get(i); PointSensitivityBuilder forwardRateSensitivity = rates.ratePointSensitivity(obs) .multipliedBy(obs.getYearFraction()); combinedPointSensitivityBuilder = combinedPointSensitivityBuilder.combinedWith(forwardRateSensitivity); } return combinedPointSensitivityBuilder; }
private PointSensitivityBuilder compoundedFlatSensitivity( RatePaymentPeriod paymentPeriod, RatesProvider provider) { double cpaAccumulated = 0d; Currency ccy = paymentPeriod.getCurrency(); PointSensitivityBuilder sensiAccumulated = PointSensitivityBuilder.none(); for (RateAccrualPeriod accrualPeriod : paymentPeriod.getAccrualPeriods()) { double rate = rawRate(accrualPeriod, provider); double accrualZeroSpread = unitNotionalAccrualRaw(accrualPeriod, rate, 0); PointSensitivityBuilder sensiCp = sensiAccumulated.cloned(); sensiCp = sensiCp.multipliedBy(accrualZeroSpread); PointSensitivityBuilder sensi2 = unitNotionalSensitivityAccrual(accrualPeriod, ccy, provider).multipliedBy(1d + cpaAccumulated); cpaAccumulated += cpaAccumulated * accrualZeroSpread + unitNotionalAccrualRaw(accrualPeriod, rate, accrualPeriod.getSpread()); sensiCp = sensiCp.combinedWith(sensi2); sensiAccumulated = sensiAccumulated.combinedWith(sensiCp).normalize(); } return sensiAccumulated; }
/** * Calculates the present value sensitivity of the swap product converted in a given currency. * <p> * The present value sensitivity of the product is the sensitivity of the present value to * the underlying curves. * * @param swap the product * @param currency the currency to convert to * @param provider the rates provider * @return the present value curve sensitivity of the swap product converted in the given currency */ public PointSensitivityBuilder presentValueSensitivity(ResolvedSwap swap, Currency currency, RatesProvider provider) { PointSensitivityBuilder builder = PointSensitivityBuilder.none(); for (ResolvedSwapLeg leg : swap.getLegs()) { PointSensitivityBuilder ls = legPricer.presentValueSensitivity(leg, provider); PointSensitivityBuilder lsConverted = ls.withCurrency(currency).multipliedBy(provider.fxRate(leg.getCurrency(), currency)); builder = builder.combinedWith(lsConverted); } return builder; }
public void test_presentValueSensitivity() { PointSensitivities pt1 = TRADE_PRICER.presentValueSensitivityRates(CMS_TRADE_PREMIUM, RATES_PROVIDER, VOLATILITIES); PointSensitivities pt2 = TRADE_PRICER.presentValueSensitivityRates(CMS_TRADE, RATES_PROVIDER, VOLATILITIES); PointSensitivityBuilder ptProd1 = PRODUCT_PRICER.presentValueSensitivityRates(CMS_ONE_LEG, RATES_PROVIDER, VOLATILITIES); PointSensitivityBuilder ptProd2 = PRODUCT_PRICER.presentValueSensitivityRates(CMS_TWO_LEGS, RATES_PROVIDER, VOLATILITIES); PointSensitivityBuilder ptPrem = PREMIUM_PRICER.presentValueSensitivity(PREMIUM, RATES_PROVIDER); assertEquals(pt1, ptProd1.combinedWith(ptPrem).build()); assertEquals(pt2, ptProd2.build()); }
/** * Calculates the present value sensitivity of the FRA product. * <p> * The present value sensitivity of the product is the sensitivity of the present value to * the underlying curves. * * @param fra the product * @param provider the rates provider * @return the point sensitivity of the present value */ public PointSensitivities presentValueSensitivity(ResolvedFra fra, RatesProvider provider) { DiscountFactors discountFactors = provider.discountFactors(fra.getCurrency()); double df = discountFactors.discountFactor(fra.getPaymentDate()); double notional = fra.getNotional(); double unitAmount = unitAmount(fra, provider); double derivative = derivative(fra, provider); PointSensitivityBuilder iborSens = forwardRateSensitivity(fra, provider) .multipliedBy(derivative * df * notional); PointSensitivityBuilder discSens = discountFactors.zeroRatePointSensitivity(fra.getPaymentDate()) .multipliedBy(unitAmount * notional); return iborSens.withCurrency(fra.getCurrency()).combinedWith(discSens).build(); }
public void presentValueSensitivity_afterPayment() { PointSensitivityBuilder pv = PRICER_CMS.presentValueSensitivity(COUPON, RATES_PROVIDER_AFTER_PAY); PointSensitivityBuilder pvCaplet = PRICER_CMS.presentValueSensitivity(CAPLET, RATES_PROVIDER_AFTER_PAY); PointSensitivityBuilder pvFloorlet = PRICER_CMS.presentValueSensitivity(FLOORLET, RATES_PROVIDER_AFTER_PAY); assertEquals(pv, PointSensitivityBuilder.none()); assertEquals(pvCaplet, PointSensitivityBuilder.none()); assertEquals(pvFloorlet, PointSensitivityBuilder.none()); }
public void test_multipliedBy() { PointSensitivityBuilder base = PointSensitivityBuilder.none(); assertSame(base.multipliedBy(2.0), base); // no effect }
double tenor = swaptionVolatilities.tenor(swap.getStartDate(), swap.getEndDate()); if (provider.getValuationDate().isAfter(cmsPeriod.getPaymentDate())) { return PointSensitivityBuilder.none(); return PointSensitivityBuilder.none(); } else if (fixingDate.isBefore(valuationDate.toLocalDate())) { throw new IllegalArgumentException(Messages.format( return PointSensitivityBuilder.of( SwaptionSabrSensitivity.of(name, expiryTime, tenor, ALPHA, ccy, totalSensi[0]), SwaptionSabrSensitivity.of(name, expiryTime, tenor, BETA, ccy, totalSensi[1]),
/** * Calculates the forecast value sensitivity of the FRA product. * <p> * The forecast value sensitivity of the product is the sensitivity of the forecast value to * the underlying curves. * * @param fra the product * @param provider the rates provider * @return the point sensitivity of the forecast value */ public PointSensitivities forecastValueSensitivity(ResolvedFra fra, RatesProvider provider) { double notional = fra.getNotional(); double derivative = derivative(fra, provider); PointSensitivityBuilder iborSens = forwardRateSensitivity(fra, provider) .multipliedBy(derivative * notional); return iborSens.withCurrency(fra.getCurrency()).build(); }
/** * Calculates the present value sensitivity to the SABR model parameters. * <p> * The present value sensitivity of the leg is the sensitivity of the present value to * the SABR model parameters, alpha, beta, rho and nu. * * @param cmsLeg the CMS leg * @param ratesProvider the rates provider * @param swaptionVolatilities the swaption volatilities * @return the present value sensitivity */ public PointSensitivityBuilder presentValueSensitivityModelParamsSabr( ResolvedCmsLeg cmsLeg, RatesProvider ratesProvider, SabrSwaptionVolatilities swaptionVolatilities) { validate(ratesProvider, swaptionVolatilities); return cmsLeg.getCmsPeriods().stream() .map(cmsPeriod -> cmsPeriodPricer.presentValueSensitivityModelParamsSabr(cmsPeriod, ratesProvider, swaptionVolatilities)) .reduce(PointSensitivityBuilder.none(), PointSensitivityBuilder::combinedWith) .normalize(); }
private PointSensitivityBuilder weightedSensitivity( IborAveragedFixing fixing, double totalWeight, IborIndexRates rates) { return rates.ratePointSensitivity(fixing.getObservation()) .multipliedBy(fixing.getWeight() / totalWeight); }
public void test_mapSensitivity() { PointSensitivityBuilder base = PointSensitivityBuilder.none(); assertSame(base.mapSensitivity(s -> 2.0), base); // no effect }
public void test_withCurrency() { PointSensitivityBuilder base = PointSensitivityBuilder.none(); assertSame(base.withCurrency(GBP), base); // no effect assertSame(base.withCurrency(USD), base); // no effect }
public void test_buildInto() { PointSensitivityBuilder base = PointSensitivityBuilder.none(); MutablePointSensitivities combo = new MutablePointSensitivities(); MutablePointSensitivities test = base.buildInto(combo); assertSame(test, combo); assertEquals(test.getSensitivities(), ImmutableList.of()); }
public void test_presentValueSensitivity() { PointSensitivityBuilder pt1 = PRODUCT_PRICER.presentValueSensitivityRates(CMS_ONE_LEG, RATES_PROVIDER, VOLATILITIES); PointSensitivityBuilder pt2 = PRODUCT_PRICER.presentValueSensitivityRates(CMS_TWO_LEGS, RATES_PROVIDER, VOLATILITIES); PointSensitivityBuilder ptCms = CMS_LEG_PRICER.presentValueSensitivityRates(CMS_LEG, RATES_PROVIDER, VOLATILITIES); PointSensitivityBuilder ptPay = SWAP_LEG_PRICER.presentValueSensitivity(PAY_LEG, RATES_PROVIDER); assertEquals(pt1, ptCms); assertEquals(pt2, ptCms.combinedWith(ptPay)); }