@Override public MultipleCurrencyCurveSensitivityMarket visitCouponFixed( final CouponFixed payment, final IMarketBundle market) { return METHOD_CPN_FIXED.presentValueMarketSensitivity(payment, market); }
/** * Calculator of the present value curve sensitivity as multiple currency interest rate curve * sensitivity. */ public final class PresentValueCurveSensitivityMarketCalculator extends AbstractInstrumentDerivativeVisitor< IMarketBundle, MultipleCurrencyCurveSensitivityMarket> { /** The unique instance of the calculator. */ private static final PresentValueCurveSensitivityMarketCalculator INSTANCE = new PresentValueCurveSensitivityMarketCalculator(); /** * Gets the calculator instance. * * @return The calculator. */ public static PresentValueCurveSensitivityMarketCalculator getInstance() { return INSTANCE; } /** Constructor. */ private PresentValueCurveSensitivityMarketCalculator() {} /** The methods used by the different instruments. */ private static final CouponFixedDiscountingMarketMethod METHOD_CPN_FIXED = CouponFixedDiscountingMarketMethod.getInstance(); private static final CouponIborDiscountingMarketMethod METHOD_CPN_IBOR = CouponIborDiscountingMarketMethod.getInstance(); private static final CouponOISDiscountingMarketMethod METHOD_CPN_ON = CouponOISDiscountingMarketMethod.getInstance(); // ----- Payment/Coupon ------ @Override public MultipleCurrencyCurveSensitivityMarket visitCouponFixed( final CouponFixed payment, final IMarketBundle market) { return METHOD_CPN_FIXED.presentValueMarketSensitivity(payment, market); } @Override public MultipleCurrencyCurveSensitivityMarket visitCouponIbor( final CouponIbor payment, final IMarketBundle market) { return METHOD_CPN_IBOR.presentValueMarketSensitivity(payment, market); } @Override public MultipleCurrencyCurveSensitivityMarket visitCouponOIS( final CouponOIS payment, final IMarketBundle market) { return METHOD_CPN_ON.presentValueMarketSensitivity(payment, market); } // ----- Annuity ------ @Override public MultipleCurrencyCurveSensitivityMarket visitGenericAnnuity( final Annuity<? extends Payment> annuity, final IMarketBundle market) { ArgumentChecker.notNull(annuity, "Annuity"); ArgumentChecker.notNull(market, "Market"); MultipleCurrencyCurveSensitivityMarket cs = visit(annuity.getNthPayment(0), market); for (int loopp = 1; loopp < annuity.getNumberOfPayments(); loopp++) { cs = cs.plus(visit(annuity.getNthPayment(loopp), market)); } return cs; } @Override public MultipleCurrencyCurveSensitivityMarket visitFixedCouponAnnuity( final AnnuityCouponFixed annuity, final IMarketBundle market) { return visitGenericAnnuity(annuity, market); } // ----- Swap ------ @Override public MultipleCurrencyCurveSensitivityMarket visitSwap( final Swap<?, ?> swap, final IMarketBundle market) { final MultipleCurrencyCurveSensitivityMarket sensitivity1 = visit(swap.getFirstLeg(), market); final MultipleCurrencyCurveSensitivityMarket sensitivity2 = visit(swap.getSecondLeg(), market); return sensitivity1.plus(sensitivity2); } @Override public MultipleCurrencyCurveSensitivityMarket visitFixedCouponSwap( final SwapFixedCoupon<?> swap, final IMarketBundle market) { return visitSwap(swap, market); } }