/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.model.volatility.curve; import org.apache.commons.lang.ObjectUtils; import com.opengamma.analytics.financial.model.volatility.VolatilityModel; import com.opengamma.analytics.math.curve.DoublesCurve; import com.opengamma.util.ArgumentChecker; /** * Class describing the Black volatility term structure used in option pricing. */ public class BlackForexTermStructureParameters implements VolatilityModel<Double> { /** * The volatility term structure. The dimension is the expiration. Not null. */ private final DoublesCurve _volatility; /** * Constructor from a curve. * @param volatility The term structure of implied volatility. Not null. */ public BlackForexTermStructureParameters(final DoublesCurve volatility) { ArgumentChecker.notNull(volatility, "Volatility"); _volatility = volatility; } /** * Returns the volatility term structure curve. * @return The curve. */ public DoublesCurve getVolatilityCurve() { return _volatility; } /** * Returns the time sensitivity of the volatility * @param t The time to expiration. * @return The volatility. */ public Double[] getVolatilityTimeSensitivity(final double t) { return _volatility.getYValueParameterSensitivity(t); } /** * Returns the implied volatility for a given expiration. * @param time The time to expiration, not null * @return The volatility. */ @Override public Double getVolatility(final Double time) { ArgumentChecker.notNull(time, "t"); return _volatility.getYValue(time); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + _volatility.hashCode(); return result; } @Override public boolean equals(final Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final BlackForexTermStructureParameters other = (BlackForexTermStructureParameters) obj; if (!ObjectUtils.equals(_volatility, other._volatility)) { return false; } return true; } }