/** * Restricted copy constructor. * @param beanToCopy the bean to copy from, not null */ private Builder(ResolvedCdsTrade beanToCopy) { this.info = beanToCopy.getInfo(); this.product = beanToCopy.getProduct(); this.upfrontFee = beanToCopy.upfrontFee; }
/** * Calculates the expected loss of the underlying product. * <p> * The expected loss is the (undiscounted) expected default settlement value paid by the protection seller. * The resulting value is always positive. * * @param trade the trade * @param ratesProvider the rates provider * @return the expected loss */ public CurrencyAmount expectedLoss( ResolvedCdsTrade trade, CreditRatesProvider ratesProvider) { return productPricer.expectedLoss(trade.getProduct(), ratesProvider); }
protected void checkCdsBucket(ResolvedCdsTrade trade, List<ResolvedCdsTrade> bucketCds) { Iterator<StandardId> legalEntities = bucketCds.stream().map(t -> t.getProduct().getLegalEntityId()).collect(Collectors.toSet()).iterator(); ArgChecker.isTrue(legalEntities.next().equals(trade.getProduct().getLegalEntityId()), "legal entity must be common"); ArgChecker.isFalse(legalEntities.hasNext(), "legal entity must be common"); Iterator<Currency> currencies = bucketCds.stream().map(t -> t.getProduct().getCurrency()).collect(Collectors.toSet()).iterator(); ArgChecker.isTrue(currencies.next().equals(trade.getProduct().getCurrency()), "currency must be common"); ArgChecker.isFalse(currencies.hasNext(), "currency must be common"); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 3237038: // info return ((ResolvedCdsTrade) bean).getInfo(); case -309474065: // product return ((ResolvedCdsTrade) bean).getProduct(); case 963468344: // upfrontFee return ((ResolvedCdsTrade) bean).upfrontFee; } return super.propertyGet(bean, propertyName, quiet); }
double price( ResolvedCdsTrade trade, CreditRatesProvider ratesProvider, double fractionalSpread, PriceType priceType, ReferenceData refData) { LocalDate settlementDate = calculateSettlementDate(trade, ratesProvider, refData); return productPricer.price(trade.getProduct(), ratesProvider, fractionalSpread, settlementDate, priceType, refData); }
/** * Calculates the jump-to-default of the underlying product. * <p> * The jump-to-default is the value of the product in case of immediate default. * * @param trade the trade * @param ratesProvider the rates provider * @param refData the reference data * @return the jump-to-default */ public JumpToDefault jumpToDefault( ResolvedCdsTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData) { LocalDate settlementDate = calculateSettlementDate(trade, ratesProvider, refData); return productPricer.jumpToDefault(trade.getProduct(), ratesProvider, settlementDate, refData); }
/** * Calculates the present value of the underlying product. * <p> * The present value is computed based on the settlement date rather than the valuation date. * * @param trade the trade * @param ratesProvider the rates provider * @param priceType the price type * @param refData the reference data * @return the price */ public CurrencyAmount presentValueOnSettle( ResolvedCdsTrade trade, CreditRatesProvider ratesProvider, PriceType priceType, ReferenceData refData) { LocalDate settlementDate = calculateSettlementDate(trade, ratesProvider, refData); return productPricer.presentValue(trade.getProduct(), ratesProvider, settlementDate, priceType, refData); }
/** * Computes bucketed CS01 for CDS. * <p> * The relevant credit curve must be stored in {@code RatesProvider}. * <p> * The CDS trades used in the curve calibration are reused as bucket CDS by this method. * Thus the credit curve must store {@link ResolvedTradeParameterMetadata}. * * @param trade the trade * @param ratesProvider the rates provider * @param refData the reference data * @return the bucketed CS01 */ public CurrencyParameterSensitivity bucketedCs01( ResolvedCdsTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData) { List<ResolvedCdsTrade> bucketCds = getBucketCds(trade.getProduct(), ratesProvider); return bucketedCs01(trade, bucketCds, ratesProvider, refData); }
private CurrencyParameterSensitivity bucketedCs01( ResolvedCdsTrade trade, List<ResolvedCdsTrade> bucketCds, List<ResolvedTradeParameterMetadata> metadata, CreditRatesProvider ratesProvider, ReferenceData refData) { DoubleArray sensiValue = computedBucketedCs01(trade, bucketCds, ratesProvider, refData); return CurrencyParameterSensitivity.of( CurveName.of("impliedSpreads"), metadata, trade.getProduct().getCurrency(), sensiValue); }
private LocalDate calculateSettlementDate( ResolvedCdsTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData) { return trade.getInfo().getSettlementDate() .orElse(trade.getProduct().calculateSettlementDateFromValuation(ratesProvider.getValuationDate(), refData)); }
/** * Calculates the price sensitivity of the underlying product. * <p> * The price sensitivity of the product is the sensitivity of price to the underlying curves. * * @param trade the trade * @param ratesProvider the rates provider * @param refData the reference data * @return the present value sensitivity */ public PointSensitivities priceSensitivity( ResolvedCdsTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData) { LocalDate settlementDate = calculateSettlementDate(trade, ratesProvider, refData); return productPricer.priceSensitivity(trade.getProduct(), ratesProvider, settlementDate, refData).build(); }
/** * Calculates the par spread sensitivity of the underling product. * <p> * The par spread sensitivity of the product is the sensitivity of par spread to the underlying curves. * * @param trade the trade * @param ratesProvider the rates provider * @param refData the reference data * @return the present value sensitivity */ public PointSensitivities parSpreadSensitivity( ResolvedCdsTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData) { LocalDate settlementDate = calculateSettlementDate(trade, ratesProvider, refData); return productPricer.parSpreadSensitivity(trade.getProduct(), ratesProvider, settlementDate, refData).build(); }
@Override public CurrencyAmount parallelCs01( ResolvedCdsTrade trade, List<ResolvedCdsTrade> bucketCds, CreditRatesProvider ratesProvider, ReferenceData refData) { DoubleArray temp = computedBucketedCs01(trade, bucketCds, ratesProvider, refData); return CurrencyAmount.of(trade.getProduct().getCurrency(), temp.sum()); }
/** * Calculates the present value sensitivity of the underlying product. * <p> * The present value sensitivity of the product is the sensitivity of present value to the underlying curves. * The present value sensitivity is computed based on the settlement date rather than the valuation date. * <p> * This is coherent to {@link #presentValueOnSettle(ResolvedCdsTrade, CreditRatesProvider, PriceType, ReferenceData)}. * * @param trade the trade * @param ratesProvider the rates provider * @param refData the reference data * @return the present value sensitivity */ public PointSensitivities presentValueOnSettleSensitivity( ResolvedCdsTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData) { LocalDate settlementDate = calculateSettlementDate(trade, ratesProvider, refData); return productPricer.presentValueSensitivity(trade.getProduct(), ratesProvider, settlementDate, refData).build(); }
public void test_builder_min() { ResolvedCdsTrade test = ResolvedCdsTrade.builder() .product(PRODUCT) .info(TRADE_INFO) .build(); assertEquals(test.getProduct(), PRODUCT); assertEquals(test.getInfo(), TRADE_INFO); assertFalse(test.getUpfrontFee().isPresent()); }
public void test_full_resolve() { ResolvedCdsTrade test = sut() .resolve(REF_DATA); assertEquals(test.getProduct(), PRODUCT.resolve(REF_DATA)); assertEquals(test.getInfo(), TRADE_INFO); assertEquals(test.getUpfrontFee().get(), UPFRONT.resolve(REF_DATA)); }
public void test_builder_full() { ResolvedCdsTrade test = ResolvedCdsTrade.builder() .product(PRODUCT) .info(TRADE_INFO) .upfrontFee(UPFRONT) .build(); assertEquals(test.getProduct(), PRODUCT); assertEquals(test.getInfo(), TRADE_INFO); assertEquals(test.getUpfrontFee().get(), UPFRONT); }
public void test_min_resolve() { ResolvedCdsTrade test = CdsTrade.builder() .product(PRODUCT) .info(TRADE_INFO) .build() .resolve(REF_DATA); assertEquals(test.getProduct(), PRODUCT.resolve(REF_DATA)); assertEquals(test.getInfo(), TRADE_INFO); assertFalse(test.getUpfrontFee().isPresent()); }
public void test_builder_min() { ResolvedCdsIndexTrade test = ResolvedCdsIndexTrade.builder() .product(PRODUCT) .info(TRADE_INFO) .build(); assertEquals(test.getProduct(), PRODUCT); assertEquals(test.getInfo(), TRADE_INFO); assertFalse(test.getUpfrontFee().isPresent()); ResolvedCdsTrade singleName = test.toSingleNameCds(); assertEquals(singleName.getProduct(), PRODUCT.toSingleNameCds()); assertEquals(singleName.getInfo(), TRADE_INFO); assertFalse(singleName.getUpfrontFee().isPresent()); }
public void test_builder_full() { ResolvedCdsIndexTrade test = ResolvedCdsIndexTrade.builder() .product(PRODUCT) .info(TRADE_INFO) .upfrontFee(UPFRONT) .build(); assertEquals(test.getProduct(), PRODUCT); assertEquals(test.getInfo(), TRADE_INFO); assertEquals(test.getUpfrontFee().get(), UPFRONT); ResolvedCdsTrade singleName = test.toSingleNameCds(); assertEquals(singleName.getProduct(), PRODUCT.toSingleNameCds()); assertEquals(singleName.getInfo(), TRADE_INFO); assertEquals(singleName.getUpfrontFee().get(), UPFRONT); }