/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.interestrate.future.provider;
import org.apache.commons.lang.Validate;
import org.threeten.bp.ZonedDateTime;
import com.opengamma.analytics.financial.instrument.bond.BondFixedSecurityDefinition;
import com.opengamma.analytics.financial.interestrate.bond.definition.BondFixedSecurity;
import com.opengamma.analytics.financial.interestrate.bond.provider.BondSecurityDiscountingMethod;
/**
* Methods for the computation of conversion factors of bonds in bond futures basket.
*/
public class BondFutureConversionFactorMethod {
/**
* Method used to compute the bond yield.
*/
private static final BondSecurityDiscountingMethod METHOD_BOND_SECURITY = BondSecurityDiscountingMethod.getInstance();
/**
* Computes the conversion factor for Liffe traded Gilt futures.
* <P> Reference: EXCHANGE CONTRACT NO. 144 IN RESPECT OF GILT CONTRACTS, NYSE Euronext Global Derivatives, 2011.
* @param bondDefinition The bond.
* @param deliveryDate The future delivery date (first day of the delivery month).
* @param notionalCoupon The notional coupon (as specified in the contract details)
* @return The factor.
*/
public double conversionFactorLiffe(final BondFixedSecurityDefinition bondDefinition, final ZonedDateTime deliveryDate, final double notionalCoupon) {
Validate.notNull(bondDefinition, "Bond definition");
Validate.notNull(deliveryDate, "Delivery date");
final BondFixedSecurity bond = bondDefinition.toDerivative(deliveryDate, deliveryDate);
final double cleanPrice = METHOD_BOND_SECURITY.cleanPriceFromYield(bond, notionalCoupon);
return cleanPrice;
}
public double conversionFactorEuronext(final BondFixedSecurityDefinition bondDefinition, final ZonedDateTime deliveryDate, final double notionalCoupon) {
Validate.notNull(bondDefinition, "Bond definition");
Validate.notNull(deliveryDate, "Delivery date");
final BondFixedSecurity bond = bondDefinition.toDerivative(deliveryDate, deliveryDate);
final double cleanPrice = METHOD_BOND_SECURITY.cleanPriceFromYield(bond, notionalCoupon);
return cleanPrice;
}
}