/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.forex.method;
import com.opengamma.analytics.financial.model.option.definition.SmileDeltaTermStructureDataBundle;
import com.opengamma.analytics.financial.model.volatility.VolatilityAndBucketedSensitivities;
import com.opengamma.analytics.financial.model.volatility.surface.SmileDeltaTermStructureParametersStrikeInterpolation;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.money.Currency;
import com.opengamma.util.tuple.Pair;
/**
* @deprecated {@link SmileDeltaTermStructureDataBundle} is deprecated
*/
@Deprecated
public class FXVolatilityUtils {
public static double getVolatility(final SmileDeltaTermStructureDataBundle data, final Currency ccy1, final Currency ccy2, final double time, final double strike, final double forward) {
ArgumentChecker.notNull(ccy1, "ccy1");
ArgumentChecker.notNull(ccy2, "ccy2");
ArgumentChecker.notNull(data, "data");
final Pair<Currency, Currency> currencyPair = data.getCurrencyPair();
final SmileDeltaTermStructureParametersStrikeInterpolation smile = data.getVolatilityModel();
if ((ccy1 == currencyPair.getFirst()) && (ccy2 == currencyPair.getSecond())) {
return smile.getVolatility(time, strike, forward);
}
if ((ccy2 == currencyPair.getFirst()) && (ccy1 == currencyPair.getSecond())) {
return smile.getVolatility(time, 1.0 / strike, 1.0 / forward);
}
throw new IllegalArgumentException("Currencies not compatible with smile data; asked for " + ccy1 + " and " + ccy2 + ", have " + data.getCurrencyMap().values());
}
public static VolatilityAndBucketedSensitivities getVolatilityAndSensitivities(final SmileDeltaTermStructureDataBundle data, final Currency ccy1, final Currency ccy2,
final double time, final double strike, final double forward) {
ArgumentChecker.notNull(ccy1, "ccy1");
ArgumentChecker.notNull(ccy2, "ccy2");
ArgumentChecker.notNull(data, "data");
final Pair<Currency, Currency> currencyPair = data.getCurrencyPair();
final SmileDeltaTermStructureParametersStrikeInterpolation smile = data.getVolatilityModel();
if ((ccy1 == currencyPair.getFirst()) && (ccy2 == currencyPair.getSecond())) {
return smile.getVolatilityAndSensitivities(time, strike, forward);
}
if ((ccy2 == currencyPair.getFirst()) && (ccy1 == currencyPair.getSecond())) {
return smile.getVolatilityAndSensitivities(time, 1.0 / strike, 1.0 / forward);
}
throw new IllegalArgumentException("Currencies not compatible with smile data; asked for " + ccy1 + " and " + ccy2 + ", have " + data.getCurrencyMap().values());
}
}