boolean isExpired(ResolvedCdsIndex index, CreditRatesProvider ratesProvider) { return !index.getProtectionEndDate().isAfter(ratesProvider.getValuationDate()); }
/** * Computes bucketed CS01 for CDS index using a single credit curve. * <p> * This is coherent to the pricer {@link IsdaHomogenousCdsIndexTradePricer}. * The relevant credit curve must be stored in {@code RatesProvider}. * * @param trade the trade * @param bucketCdsIndex the CDS index bucket * @param ratesProvider the rates provider * @param refData the reference data * @return the bucketed CS01 */ public CurrencyParameterSensitivity bucketedCs01( ResolvedCdsIndexTrade trade, List<ResolvedCdsIndexTrade> bucketCdsIndex, CreditRatesProvider ratesProvider, ReferenceData refData) { ResolvedCdsTrade cdsTrade = trade.toSingleNameCds(); List<ResolvedCdsTrade> bucketCds = bucketCdsIndex.stream() .map(ResolvedCdsIndexTrade::toSingleNameCds) .collect(Collectors.toList()); List<ResolvedTradeParameterMetadata> metadata = bucketCdsIndex.stream() .map(t -> ResolvedTradeParameterMetadata.of(t, t.getProduct().getProtectionEndDate().toString())) .collect(Guavate.toImmutableList()); CurrencyParameterSensitivity bucketedCs01 = bucketedCs01(cdsTrade, bucketCds, metadata, ratesProvider, refData); double indexFactor = getIndexFactor(cdsTrade.getProduct(), ratesProvider); return bucketedCs01.multipliedBy(indexFactor); }
public void expectedLossTest() { CurrencyAmount computed = PRICER.expectedLoss(PRODUCT, RATES_PROVIDER); double survivalProbability = RATES_PROVIDER.survivalProbabilities(INDEX_ID, USD).survivalProbability(PRODUCT.getProtectionEndDate()); double expected = (1d - RECOVERY_RATE) * (1d - survivalProbability) * NOTIONAL * INDEX_FACTOR; assertEquals(computed.getCurrency(), USD); assertEquals(computed.getAmount(), expected, NOTIONAL * TOL); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 244977400: // buySell return ((ResolvedCdsIndex) bean).getBuySell(); case -464117509: // cdsIndexId return ((ResolvedCdsIndex) bean).getCdsIndexId(); case 1085098268: // legalEntityIds return ((ResolvedCdsIndex) bean).getLegalEntityIds(); case -1674414612: // paymentPeriods return ((ResolvedCdsIndex) bean).getPaymentPeriods(); case -1193325040: // protectionEndDate return ((ResolvedCdsIndex) bean).getProtectionEndDate(); case 1905311443: // dayCount return ((ResolvedCdsIndex) bean).getDayCount(); case -480203780: // paymentOnDefault return ((ResolvedCdsIndex) bean).getPaymentOnDefault(); case 2103482633: // protectionStart return ((ResolvedCdsIndex) bean).getProtectionStart(); case 852621746: // stepinDateOffset return ((ResolvedCdsIndex) bean).getStepinDateOffset(); case 135924714: // settlementDateOffset return ((ResolvedCdsIndex) bean).getSettlementDateOffset(); } return super.propertyGet(bean, propertyName, quiet); }
/** * Restricted copy constructor. * @param beanToCopy the bean to copy from, not null */ private Builder(ResolvedCdsIndex beanToCopy) { this.buySell = beanToCopy.getBuySell(); this.cdsIndexId = beanToCopy.getCdsIndexId(); this.legalEntityIds = beanToCopy.getLegalEntityIds(); this.paymentPeriods = beanToCopy.getPaymentPeriods(); this.protectionEndDate = beanToCopy.getProtectionEndDate(); this.dayCount = beanToCopy.getDayCount(); this.paymentOnDefault = beanToCopy.getPaymentOnDefault(); this.protectionStart = beanToCopy.getProtectionStart(); this.stepinDateOffset = beanToCopy.getStepinDateOffset(); this.settlementDateOffset = beanToCopy.getSettlementDateOffset(); }
public void test_builder() { ResolvedCdsIndex test = ResolvedCdsIndex.builder() .buySell(BUY) .dayCount(ACT_360) .cdsIndexId(INDEX_ID) .legalEntityIds(LEGAL_ENTITIES) .paymentOnDefault(ACCRUED_PREMIUM) .protectionStart(BEGINNING) .paymentPeriods(PAYMENTS) .protectionEndDate(PAYMENTS.get(PAYMENTS.size() - 1).getEffectiveEndDate()) .settlementDateOffset(SETTLE_DAY_ADJ) .stepinDateOffset(STEPIN_DAY_ADJ) .build(); assertEquals(test.getBuySell(), BUY); assertEquals(test.getCurrency(), USD); assertEquals(test.getAccrualStartDate(), PAYMENTS.get(0).getStartDate()); assertEquals(test.getAccrualEndDate(), PAYMENTS.get(42).getEndDate()); assertEquals(test.getDayCount(), ACT_360); assertEquals(test.getFixedRate(), COUPON); assertEquals(test.getCdsIndexId(), INDEX_ID); assertEquals(test.getLegalEntityIds(), LEGAL_ENTITIES); assertEquals(test.getNotional(), NOTIONAL); assertEquals(test.getPaymentOnDefault(), ACCRUED_PREMIUM); assertEquals(test.getPaymentPeriods(), PAYMENTS); assertEquals(test.getProtectionEndDate(), PAYMENTS.get(42).getEffectiveEndDate()); assertEquals(test.getSettlementDateOffset(), SETTLE_DAY_ADJ); assertEquals(test.getProtectionStart(), BEGINNING); assertEquals(test.getStepinDateOffset(), STEPIN_DAY_ADJ); }
public void endedTest() { LocalDate valuationDate = PRODUCT.getProtectionEndDate().plusDays(1); CreditRatesProvider provider = createCreditRatesProviderSingle(valuationDate, false); double price = PRICER.price(PRODUCT, provider, SETTLEMENT_STD, CLEAN, REF_DATA); assertEquals(price, 0d); CurrencyAmount pv = PRICER.presentValue(PRODUCT, provider, SETTLEMENT_STD, CLEAN, REF_DATA); assertEquals(pv, CurrencyAmount.zero(USD)); assertThrowsIllegalArg(() -> PRICER.parSpread(PRODUCT, provider, SETTLEMENT_STD, REF_DATA)); CurrencyAmount rpv01 = PRICER.rpv01(PRODUCT, provider, SETTLEMENT_STD, CLEAN, REF_DATA); assertEquals(rpv01, CurrencyAmount.zero(USD)); CurrencyAmount recovery01 = PRICER.recovery01(PRODUCT, provider, SETTLEMENT_STD, REF_DATA); assertEquals(recovery01, CurrencyAmount.zero(USD)); PointSensitivityBuilder sensi = PRICER.presentValueSensitivity(PRODUCT, provider, SETTLEMENT_STD, REF_DATA); assertEquals(sensi, PointSensitivityBuilder.none()); PointSensitivityBuilder sensiPrice = PRICER.priceSensitivity(PRODUCT, provider, SETTLEMENT_STD, REF_DATA); assertEquals(sensiPrice, PointSensitivityBuilder.none()); assertThrowsIllegalArg(() -> PRICER.parSpreadSensitivity(PRODUCT, provider, SETTLEMENT_STD, REF_DATA)); JumpToDefault jumpToDefault = PRICER.jumpToDefault(PRODUCT, provider, SETTLEMENT_STD, REF_DATA); assertEquals(jumpToDefault, JumpToDefault.of(USD, ImmutableMap.of(INDEX_ID, 0d))); CurrencyAmount expectedLoss = PRICER.expectedLoss(PRODUCT, provider); assertEquals(expectedLoss, CurrencyAmount.zero(USD)); }
/** * Reduce this instance to {@code ResolvedCds}. * <p> * The resultant object is used for pricing CDS index products under the homogeneous pool assumption on constituent * credit curves. * * @return the CDS product */ public ResolvedCds toSingleNameCds() { return ResolvedCds.builder() .buySell(getBuySell()) .dayCount(getDayCount()) .legalEntityId(getCdsIndexId()) .paymentOnDefault(getPaymentOnDefault()) .paymentPeriods(getPaymentPeriods()) .protectionEndDate(getProtectionEndDate()) .protectionStart(getProtectionStart()) .stepinDateOffset(getStepinDateOffset()) .settlementDateOffset(getSettlementDateOffset()) .build(); }