/** * Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.provider.description.interestrate; import com.opengamma.analytics.financial.instrument.index.IborIndex; import com.opengamma.analytics.financial.instrument.index.IndexON; import com.opengamma.analytics.financial.model.interestrate.curve.YieldAndDiscountCurve; import com.opengamma.analytics.financial.model.interestrate.definition.HullWhiteOneFactorPiecewiseConstantParameters; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.money.Currency; /** * Class describing a "market" with discounting, forward, price index and credit curves. * The forward rate are computed as the ratio of discount factors stored in YieldAndDiscountCurve. */ public class HullWhiteOneFactorProviderDiscount extends HullWhiteOneFactorProvider { /** * Constructor from existing multicurveProvider and Hull-White parameters. The given provider and parameters are used for the new provider (the same maps are used, not copied). * @param multicurves The multi-curves provider, not null * @param parameters The Hull-White one factor parameters, not null * @param ccyHW The currency for which the Hull-White parameters are valid (Hull-White on the discounting curve), not null */ public HullWhiteOneFactorProviderDiscount(final MulticurveProviderDiscount multicurves, final HullWhiteOneFactorPiecewiseConstantParameters parameters, final Currency ccyHW) { super(multicurves, parameters, ccyHW); } /** * Returns the MulticurveProvider from which the HullWhiteOneFactorProvider is composed. * @return The multi-curves provider. */ @Override public MulticurveProviderDiscount getMulticurveProvider() { return (MulticurveProviderDiscount) super.getMulticurveProvider(); } /** * Create a new copy of the provider. * @return The bundle. */ @Override public HullWhiteOneFactorProviderDiscount copy() { final MulticurveProviderDiscount multicurveProvider = getMulticurveProvider().copy(); return new HullWhiteOneFactorProviderDiscount(multicurveProvider, getHullWhiteParameters(), getHullWhiteCurrency()); } /** * Gets the discounting curve associated in a given currency in the market. * @param ccy The currency. * @return The curve. */ public YieldAndDiscountCurve getCurve(final Currency ccy) { return getMulticurveProvider().getCurve(ccy); } /** * Gets the forward curve associated to a given Ibor index in the market. * @param index The Ibor index. * @return The curve. */ public YieldAndDiscountCurve getCurve(final IborIndex index) { return getMulticurveProvider().getCurve(index); } /** * Gets the forward curve associated to a given ON index in the market. * @param index The ON index. * @return The curve. */ public YieldAndDiscountCurve getCurve(final IndexON index) { return getMulticurveProvider().getCurve(index); } /** * Sets the discounting curve for a given currency. * @param ccy The currency. * @param curve The yield curve used for discounting. */ public void setCurve(final Currency ccy, final YieldAndDiscountCurve curve) { getMulticurveProvider().setCurve(ccy, curve); } /** * Sets the curve associated to an Ibor index. * @param index The index. * @param curve The curve. */ public void setCurve(final IborIndex index, final YieldAndDiscountCurve curve) { getMulticurveProvider().setCurve(index, curve); } /** * Sets the curve associated to an ON index. * @param index The index. * @param curve The curve. */ public void setCurve(final IndexON index, final YieldAndDiscountCurve curve) { getMulticurveProvider().setCurve(index, curve); } /** * Set all the curves contains in another provider. If a currency or index is already present in the map, the associated curve is changed. * @param other The other provider. */ // TODO: REVIEW: Should we check that the curve are already present? Should we update the HW parameters. public void setAll(final HullWhiteOneFactorProviderDiscount other) { ArgumentChecker.notNull(other, "Inflation provider"); getMulticurveProvider().setAll(other.getMulticurveProvider()); } /** * Replaces the discounting curve for a given currency. * @param ccy The currency. * @param curve The yield curve used for discounting. * @throws IllegalArgumentException if curve name NOT already present */ public void replaceCurve(final Currency ccy, final YieldAndDiscountCurve curve) { getMulticurveProvider().replaceCurve(ccy, curve); } /** * Replaces the forward curve for a given index. * @param index The index. * @param curve The yield curve used for forward. * @throws IllegalArgumentException if curve name NOT already present */ public void replaceCurve(final IborIndex index, final YieldAndDiscountCurve curve) { getMulticurveProvider().replaceCurve(index, curve); } /** * Replaces a discounting curve for a currency. * @param ccy The currency * @param replacement The replacement curve * @return A new provider with the supplied discounting curve */ public HullWhiteOneFactorProviderDiscount withDiscountFactor(final Currency ccy, final YieldAndDiscountCurve replacement) { final MulticurveProviderDiscount decoratedMulticurve = getMulticurveProvider().withDiscountFactor(ccy, replacement); return new HullWhiteOneFactorProviderDiscount(decoratedMulticurve, getHullWhiteParameters(), getHullWhiteCurrency()); } /** * Replaces an ibor curve for an index. * @param index The index * @param replacement The replacement curve * @return A new provider with the supplied ibor curve */ public HullWhiteOneFactorProviderDiscount withForward(final IborIndex index, final YieldAndDiscountCurve replacement) { final MulticurveProviderDiscount decoratedMulticurve = getMulticurveProvider().withForward(index, replacement); return new HullWhiteOneFactorProviderDiscount(decoratedMulticurve, getHullWhiteParameters(), getHullWhiteCurrency()); } /** * Replaces an overnight curve for an index. * @param index The index * @param replacement The replacement curve * @return A new provider with the supplied overnight curve */ public HullWhiteOneFactorProviderDiscount withForward(final IndexON index, final YieldAndDiscountCurve replacement) { final MulticurveProviderDiscount decoratedMulticurve = getMulticurveProvider().withForward(index, replacement); return new HullWhiteOneFactorProviderDiscount(decoratedMulticurve, getHullWhiteParameters(), getHullWhiteCurrency()); } }