/** * Gets the time that was queried, expressed as a year fraction. * * @return the year fraction */ public double getYearFraction() { return zeroRateSensitivity.getYearFraction(); }
@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()); }
@Override public CurrencyParameterSensitivities parameterSensitivity(ZeroRateSensitivity pointSensitivity) { double yearFraction = pointSensitivity.getYearFraction(); UnitParameterSensitivity unitSens = curve.yValueParameterSensitivity(yearFraction); CurrencyParameterSensitivity curSens = unitSens.multipliedBy(pointSensitivity.getCurrency(), pointSensitivity.getSensitivity()); return CurrencyParameterSensitivities.of(curSens); }
/** * 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 CurrencyParameterSensitivities parameterSensitivity(ZeroRateSensitivity pointSens) { double yearFraction = pointSens.getYearFraction(); UnitParameterSensitivity unitSens = curve.yValueParameterSensitivity(yearFraction); CurrencyParameterSensitivity curSens = unitSens.multipliedBy(pointSens.getCurrency(), pointSens.getSensitivity()); return CurrencyParameterSensitivities.of(curSens); }
public void test_of() { ZeroRateSensitivity test = ZeroRateSensitivity.of(GBP, YEARFRAC, 32d); assertEquals(test.getCurrency(), GBP); assertEquals(test.getYearFraction(), YEARFRAC); assertEquals(test.getSensitivity(), 32d); assertEquals(test.getCurrency(), GBP); }
@Override public CurrencyParameterSensitivities parameterSensitivity(ZeroRateSensitivity pointSens) { double yearFraction = pointSens.getYearFraction(); if (Math.abs(yearFraction) < EFFECTIVE_ZERO) { return CurrencyParameterSensitivities.empty(); // Discount factor in 0 is always 1, no sensitivity. } double discountFactor = discountFactor(yearFraction); UnitParameterSensitivity unitSens = curve.yValueParameterSensitivity(yearFraction); CurrencyParameterSensitivity curSens = unitSens .multipliedBy(-1d / (yearFraction * discountFactor)) .multipliedBy(pointSens.getCurrency(), pointSens.getSensitivity()); return CurrencyParameterSensitivities.of(curSens); }
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_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_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); }
@Override public CurrencyParameterSensitivities parameterSensitivity(ZeroRateSensitivity pointSens) { double yearFraction = pointSens.getYearFraction(); double rp = curve.yValue(yearFraction); double rcBar = 1.0; double rpBar = 1.0 / (1 + rp / frequency) * rcBar; UnitParameterSensitivity unitSens = curve.yValueParameterSensitivity(yearFraction).multipliedBy(rpBar); CurrencyParameterSensitivity curSens = unitSens.multipliedBy(pointSens.getCurrency(), pointSens.getSensitivity()); return CurrencyParameterSensitivities.of(curSens); }
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; 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_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_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); }