/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.interestrate.bond.calculator; import com.opengamma.analytics.financial.interestrate.InstrumentDerivativeVisitorAdapter; import com.opengamma.analytics.financial.interestrate.bond.definition.BondTotalReturnSwap; import com.opengamma.analytics.financial.provider.calculator.issuer.PresentValueIssuerCalculator; import com.opengamma.analytics.financial.provider.description.interestrate.IssuerProviderInterface; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.money.Currency; import com.opengamma.util.money.CurrencyAmount; import com.opengamma.util.money.MultipleCurrencyAmount; /** * Calculates the present value of a bond total return swap. The value is returned in the currency * of the asset. * @deprecated Use the standard issuer calculator {@link PresentValueIssuerCalculator}. */ @Deprecated public final class BondTrsPresentValueCalculator extends InstrumentDerivativeVisitorAdapter<IssuerProviderInterface, MultipleCurrencyAmount> { /** A singleton instance */ private static final BondTrsPresentValueCalculator INSTANCE = new BondTrsPresentValueCalculator(); /** * Gets the singleton instance. * @return The singleton instance */ public static BondTrsPresentValueCalculator getInstance() { return INSTANCE; } /** * Private constructor. */ private BondTrsPresentValueCalculator() { } @Override public MultipleCurrencyAmount visitBondTotalReturnSwap(final BondTotalReturnSwap bondTrs, final IssuerProviderInterface data) { ArgumentChecker.notNull(bondTrs, "bondTrs"); ArgumentChecker.notNull(data, "data"); final MultipleCurrencyAmount fundingLegPV = bondTrs.getFundingLeg().accept(PresentValueIssuerCalculator.getInstance(), data); final Currency fundingCurrency = bondTrs.getFundingLeg().getCurrency(); final MultipleCurrencyAmount bondPV = bondTrs.getAsset().accept(PresentValueIssuerCalculator.getInstance(), data); final Currency bondCurrency = bondTrs.getAsset().getCurrency(); final double fxRate = data.getMulticurveProvider().getFxRate(bondCurrency, fundingCurrency); return bondPV.plus(CurrencyAmount.of(bondCurrency, -fundingLegPV.getAmount(fundingCurrency) * fxRate)); } }