/** * Gets the currency of the curve for which the sensitivity is computed. * * @return the curve currency */ public Currency getCurveCurrency() { return zeroRateSensitivity.getCurveCurrency(); }
@Override public int compareKey(PointSensitivity other) { if (other instanceof CreditCurveZeroRateSensitivity) { CreditCurveZeroRateSensitivity otherZero = (CreditCurveZeroRateSensitivity) other; return ComparisonChain.start() .compare(zeroRateSensitivity.getYearFraction(), otherZero.zeroRateSensitivity.getYearFraction()) .compare(zeroRateSensitivity.getCurrency(), otherZero.zeroRateSensitivity.getCurrency()) .compare(zeroRateSensitivity.getCurveCurrency(), otherZero.zeroRateSensitivity.getCurveCurrency()) .compare(legalEntityId, otherZero.legalEntityId) .result(); } return getClass().getSimpleName().compareTo(other.getClass().getSimpleName()); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 1303639584: // curveCurrency return ((ZeroRateSensitivity) bean).getCurveCurrency(); case -1731780257: // yearFraction return ((ZeroRateSensitivity) bean).getYearFraction(); case 575402001: // currency return ((ZeroRateSensitivity) bean).getCurrency(); case 564403871: // sensitivity return ((ZeroRateSensitivity) bean).getSensitivity(); } return super.propertyGet(bean, propertyName, quiet); }
/** * Obtains an instance from zero rate sensitivity and group. * * @param zeroRateSensitivity the zero rate sensitivity * @param repoGroup the group * @return the point sensitivity object */ public static RepoCurveZeroRateSensitivity of(ZeroRateSensitivity zeroRateSensitivity, RepoGroup repoGroup) { return of( zeroRateSensitivity.getCurveCurrency(), zeroRateSensitivity.getYearFraction(), zeroRateSensitivity.getCurrency(), repoGroup, zeroRateSensitivity.getSensitivity()); }
/** * Obtains an instance from zero rate sensitivity and legal entity group. * * @param zeroRateSensitivity the zero rate sensitivity * @param legalEntityGroup the legal entity group * @return the point sensitivity object */ public static IssuerCurveZeroRateSensitivity of( ZeroRateSensitivity zeroRateSensitivity, LegalEntityGroup legalEntityGroup) { return of( zeroRateSensitivity.getCurveCurrency(), zeroRateSensitivity.getYearFraction(), zeroRateSensitivity.getCurrency(), legalEntityGroup, zeroRateSensitivity.getSensitivity()); }
@Override public CurrencyParameterSensitivity singleDiscountCurveParameterSensitivity( PointSensitivities pointSensitivities, Currency currency) { CurrencyParameterSensitivities sens = CurrencyParameterSensitivities.empty(); for (PointSensitivity point : pointSensitivities.getSensitivities()) { if (point instanceof ZeroRateSensitivity) { ZeroRateSensitivity pt = (ZeroRateSensitivity) point; if (pt.getCurveCurrency().equals(currency)) { CreditDiscountFactors factors = discountFactors(pt.getCurveCurrency()); sens = sens.combinedWith(factors.parameterSensitivity(pt)); } } } ArgChecker.isTrue(sens.size() == 1, "sensitivity must be unique"); return sens.getSensitivities().get(0); }
public void test_presentValueSensitivityWithSpread_df_spread_continuous() { PointSensitivities point = PRICER.presentValueSensitivityWithSpread( PAYMENT, DISCOUNT_FACTORS, Z_SPREAD, CONTINUOUS, 0).build(); double relativeYearFraction = ACT_365F.relativeYearFraction(VAL_DATE_2014_01_22, PAYMENT_DATE); double expected = -DF * relativeYearFraction * NOTIONAL_USD * Math.exp(-Z_SPREAD * relativeYearFraction); ZeroRateSensitivity actual = (ZeroRateSensitivity) point.getSensitivities().get(0); assertEquals(actual.getCurrency(), USD); assertEquals(actual.getCurveCurrency(), USD); assertEquals(actual.getYearFraction(), relativeYearFraction); assertEquals(actual.getSensitivity(), expected, NOTIONAL_USD * TOL); }
public void test_presentValueSensitivity_df() { PointSensitivities point = PRICER.presentValueSensitivity(PAYMENT, DISCOUNT_FACTORS).build(); double relativeYearFraction = ACT_365F.relativeYearFraction(VAL_DATE_2014_01_22, PAYMENT_DATE); double expected = -DF * relativeYearFraction * NOTIONAL_USD; ZeroRateSensitivity actual = (ZeroRateSensitivity) point.getSensitivities().get(0); assertEquals(actual.getCurrency(), USD); assertEquals(actual.getCurveCurrency(), USD); assertEquals(actual.getYearFraction(), relativeYearFraction); assertEquals(actual.getSensitivity(), expected, NOTIONAL_USD * TOL); }
public void test_presentValueSensitivity_provider() { PointSensitivities point = PRICER.presentValueSensitivity(TRADE, PROVIDER); double relativeYearFraction = ACT_365F.relativeYearFraction(VAL_DATE_2014_01_22, PAYMENT_DATE); double expected = -DF * relativeYearFraction * NOTIONAL_USD; ZeroRateSensitivity actual = (ZeroRateSensitivity) point.getSensitivities().get(0); assertEquals(actual.getCurrency(), USD); assertEquals(actual.getCurveCurrency(), USD); assertEquals(actual.getYearFraction(), relativeYearFraction); assertEquals(actual.getSensitivity(), expected, NOTIONAL_USD * TOL); }
public void test_presentValueSensitivity_provider() { PointSensitivities point = PRICER.presentValueSensitivity(PAYMENT, PROVIDER).build(); double relativeYearFraction = ACT_365F.relativeYearFraction(VAL_DATE_2014_01_22, PAYMENT_DATE); double expected = -DF * relativeYearFraction * NOTIONAL_USD; ZeroRateSensitivity actual = (ZeroRateSensitivity) point.getSensitivities().get(0); assertEquals(actual.getCurrency(), USD); assertEquals(actual.getCurveCurrency(), USD); assertEquals(actual.getYearFraction(), relativeYearFraction); assertEquals(actual.getSensitivity(), expected, NOTIONAL_USD * TOL); }
public void test_presentValueSensitivity() { SimpleRatesProvider prov = createProvider(VAL_DATE); PointSensitivities point = PRICER.presentValueSensitivity(PERIOD, prov).build(); double relativeYearFraction = DAY_COUNT.relativeYearFraction(VAL_DATE, PAYMENT_DATE); double expected = -DISCOUNT_FACTOR * relativeYearFraction * AMOUNT_1000; ZeroRateSensitivity actual = (ZeroRateSensitivity) point.getSensitivities().get(0); assertEquals(actual.getCurrency(), GBP); assertEquals(actual.getCurveCurrency(), GBP); assertEquals(actual.getYearFraction(), relativeYearFraction); assertEquals(actual.getSensitivity(), expected, AMOUNT_1000 * TOLERANCE_PV); }
public void test_presentValueSensitivityWithSpread_df_spread_periodic() { PointSensitivities point = PRICER.presentValueSensitivityWithSpread( PAYMENT, DISCOUNT_FACTORS, Z_SPREAD, PERIODIC, PERIOD_PER_YEAR).build(); double relativeYearFraction = ACT_365F.relativeYearFraction(VAL_DATE_2014_01_22, PAYMENT_DATE); double discountFactorUp = DF * Math.exp(-EPS * relativeYearFraction); double discountFactorDw = DF * Math.exp(EPS * relativeYearFraction); double rateUp = (Math.pow(discountFactorUp, -1d / PERIOD_PER_YEAR / relativeYearFraction) - 1d) * PERIOD_PER_YEAR; double rateDw = (Math.pow(discountFactorDw, -1d / PERIOD_PER_YEAR / relativeYearFraction) - 1d) * PERIOD_PER_YEAR; double expected = 0.5 * NOTIONAL_USD / EPS * ( discountFactorFromPeriodicallyCompoundedRate(rateUp + Z_SPREAD, PERIOD_PER_YEAR, relativeYearFraction) - discountFactorFromPeriodicallyCompoundedRate(rateDw + Z_SPREAD, PERIOD_PER_YEAR, relativeYearFraction)); ZeroRateSensitivity actual = (ZeroRateSensitivity) point.getSensitivities().get(0); assertEquals(actual.getCurrency(), USD); assertEquals(actual.getCurveCurrency(), USD); assertEquals(actual.getYearFraction(), relativeYearFraction); assertEquals(actual.getSensitivity(), expected, NOTIONAL_USD * EPS); }
public void test_zeroRatePointSensitivityWithSpread_sensitivityCurrency_periodic() { int periodPerYear = 4; SimpleDiscountFactors test = SimpleDiscountFactors.of(GBP, DATE_VAL, CURVE); double relativeYearFraction = ACT_365F.relativeYearFraction(DATE_VAL, DATE_AFTER); double df = CURVE.yValue(relativeYearFraction); double discountFactorUp = df * Math.exp(-EPS * relativeYearFraction); double discountFactorDw = df * Math.exp(EPS * relativeYearFraction); double rateUp = (Math.pow(discountFactorUp, -1d / periodPerYear / relativeYearFraction) - 1d) * periodPerYear; double rateDw = (Math.pow(discountFactorDw, -1d / periodPerYear / relativeYearFraction) - 1d) * periodPerYear; double expectedValue = 0.5 / EPS * ( discountFactorFromPeriodicallyCompoundedRate(rateUp + SPREAD, periodPerYear, relativeYearFraction) - discountFactorFromPeriodicallyCompoundedRate(rateDw + SPREAD, periodPerYear, relativeYearFraction)); ZeroRateSensitivity computed = test .zeroRatePointSensitivityWithSpread(DATE_AFTER, USD, SPREAD, PERIODIC, periodPerYear); assertEquals(computed.getSensitivity(), expectedValue, EPS); assertEquals(computed.getCurrency(), USD); assertEquals(computed.getCurveCurrency(), GBP); assertEquals(computed.getYearFraction(), relativeYearFraction); }
public void test_zeroRatePointSensitivityWithSpread_periodic() { int periodPerYear = 4; ZeroRateDiscountFactors test = ZeroRateDiscountFactors.of(GBP, DATE_VAL, CURVE); double relativeYearFraction = ACT_365F.relativeYearFraction(DATE_VAL, DATE_AFTER); double discountFactorUp = Math.exp(-(CURVE.yValue(relativeYearFraction) + EPS) * relativeYearFraction); double discountFactorDw = Math.exp(-(CURVE.yValue(relativeYearFraction) - EPS) * relativeYearFraction); double rateUp = (Math.pow(discountFactorUp, -1d / periodPerYear / relativeYearFraction) - 1d) * periodPerYear; double rateDw = (Math.pow(discountFactorDw, -1d / periodPerYear / relativeYearFraction) - 1d) * periodPerYear; double expectedValue = 0.5 / EPS * ( discountFactorFromPeriodicallyCompoundedRate(rateUp + SPREAD, periodPerYear, relativeYearFraction) - discountFactorFromPeriodicallyCompoundedRate(rateDw + SPREAD, periodPerYear, relativeYearFraction)); ZeroRateSensitivity computed = test.zeroRatePointSensitivityWithSpread( DATE_AFTER, SPREAD, PERIODIC, periodPerYear); assertEquals(computed.getSensitivity(), expectedValue, EPS); assertEquals(computed.getCurrency(), GBP); assertEquals(computed.getCurveCurrency(), GBP); assertEquals(computed.getYearFraction(), relativeYearFraction); }
public void test_zeroRatePointSensitivityWithSpread_periodic() { int periodPerYear = 4; SimpleDiscountFactors test = SimpleDiscountFactors.of(GBP, DATE_VAL, CURVE); double relativeYearFraction = ACT_365F.relativeYearFraction(DATE_VAL, DATE_AFTER); double df = CURVE.yValue(relativeYearFraction); double discountFactorUp = df * Math.exp(-EPS * relativeYearFraction); double discountFactorDw = df * Math.exp(EPS * relativeYearFraction); double rateUp = (Math.pow(discountFactorUp, -1d / periodPerYear / relativeYearFraction) - 1d) * periodPerYear; double rateDw = (Math.pow(discountFactorDw, -1d / periodPerYear / relativeYearFraction) - 1d) * periodPerYear; double expectedValue = 0.5 / EPS * ( discountFactorFromPeriodicallyCompoundedRate(rateUp + SPREAD, periodPerYear, relativeYearFraction) - discountFactorFromPeriodicallyCompoundedRate(rateDw + SPREAD, periodPerYear, relativeYearFraction)); ZeroRateSensitivity computed = test.zeroRatePointSensitivityWithSpread( DATE_AFTER, SPREAD, PERIODIC, periodPerYear); assertEquals(computed.getSensitivity(), expectedValue, EPS); assertEquals(computed.getCurrency(), GBP); assertEquals(computed.getCurveCurrency(), GBP); assertEquals(computed.getYearFraction(), relativeYearFraction); }
public void test_zeroRatePointSensitivityWithSpread_sensitivityCurrency_periodic() { int periodPerYear = 4; ZeroRateDiscountFactors test = ZeroRateDiscountFactors.of(GBP, DATE_VAL, CURVE); double relativeYearFraction = ACT_365F.relativeYearFraction(DATE_VAL, DATE_AFTER); double discountFactorUp = Math.exp(-(CURVE.yValue(relativeYearFraction) + EPS) * relativeYearFraction); double discountFactorDw = Math.exp(-(CURVE.yValue(relativeYearFraction) - EPS) * relativeYearFraction); double rateUp = (Math.pow(discountFactorUp, -1d / periodPerYear / relativeYearFraction) - 1d) * periodPerYear; double rateDw = (Math.pow(discountFactorDw, -1d / periodPerYear / relativeYearFraction) - 1d) * periodPerYear; double expectedValue = 0.5 / EPS * ( discountFactorFromPeriodicallyCompoundedRate(rateUp + SPREAD, periodPerYear, relativeYearFraction) - discountFactorFromPeriodicallyCompoundedRate(rateDw + SPREAD, periodPerYear, relativeYearFraction)); ZeroRateSensitivity computed = test .zeroRatePointSensitivityWithSpread(DATE_AFTER, USD, SPREAD, PERIODIC, periodPerYear); assertEquals(computed.getSensitivity(), expectedValue, EPS); assertEquals(computed.getCurrency(), USD); assertEquals(computed.getCurveCurrency(), GBP); assertEquals(computed.getYearFraction(), relativeYearFraction); }
@Override public CurrencyParameterSensitivities parameterSensitivity(PointSensitivities pointSensitivities) { CurrencyParameterSensitivities sens = CurrencyParameterSensitivities.empty(); for (PointSensitivity point : pointSensitivities.getSensitivities()) { if (point instanceof CreditCurveZeroRateSensitivity) { CreditCurveZeroRateSensitivity pt = (CreditCurveZeroRateSensitivity) point; LegalEntitySurvivalProbabilities factors = survivalProbabilities(pt.getLegalEntityId(), pt.getCurveCurrency()); sens = sens.combinedWith(factors.parameterSensitivity(pt)); } else if (point instanceof ZeroRateSensitivity) { ZeroRateSensitivity pt = (ZeroRateSensitivity) point; CreditDiscountFactors factors = discountFactors(pt.getCurveCurrency()); sens = sens.combinedWith(factors.parameterSensitivity(pt)); } } return sens; }
if (point instanceof ZeroRateSensitivity) { ZeroRateSensitivity pt = (ZeroRateSensitivity) point; DiscountFactors factors = discountFactors(pt.getCurveCurrency()); sens = sens.combinedWith(factors.parameterSensitivity(pt));