/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.fixedincome;
import com.opengamma.OpenGammaRuntimeException;
import com.opengamma.financial.analytics.ircurve.StripInstrumentType;
import com.opengamma.financial.convention.frequency.Frequency;
import com.opengamma.financial.security.FinancialSecurity;
/**
*
*/
public final class FixedIncomeInstrumentCurveExposureHelper {
private FixedIncomeInstrumentCurveExposureHelper() {
}
/**
* @deprecated This method is used for either the old curve calculation methods
* @param type The strip instrument type
* @param fundingCurveName The funding curve name
* @param forwardCurveName The forward curve name
* @return An array containing the order of the curve names for the type
*/
@Deprecated
public static String[] getCurveNamesForFundingCurveInstrument(final StripInstrumentType type, final String fundingCurveName, final String forwardCurveName) {
switch (type) {
case SWAP_3M:
return new String[] {fundingCurveName, forwardCurveName };
case SWAP_6M:
return new String[] {fundingCurveName, forwardCurveName };
case SWAP_12M:
return new String[] {fundingCurveName, forwardCurveName };
case SWAP_28D:
return new String[] {fundingCurveName, forwardCurveName };
case CASH:
return new String[] {fundingCurveName };
case FRA_3M:
return new String[] {fundingCurveName, forwardCurveName };
case FRA_6M:
return new String[] {fundingCurveName, forwardCurveName };
case FUTURE:
return new String[] {fundingCurveName, forwardCurveName };
case LIBOR:
return new String[] {fundingCurveName };
case EURIBOR:
return new String[] {fundingCurveName };
case CDOR:
return new String[] {fundingCurveName };
case CIBOR:
return new String[] {fundingCurveName };
case STIBOR:
return new String[] {fundingCurveName };
case TENOR_SWAP:
return new String[] {fundingCurveName, forwardCurveName, fundingCurveName };
case OIS_SWAP:
return new String[] {fundingCurveName, fundingCurveName };
case PERIODIC_ZERO_DEPOSIT:
return new String[] {fundingCurveName };
default:
throw new OpenGammaRuntimeException("Could not find " + type + " in funding curve instrument list");
}
}
/**
* @deprecated This method is used for either the old curve calculation methods
* @param type The strip instrument type
* @param fundingCurveName The funding curve name
* @param forwardCurveName The forward curve name
* @return An array containing the order of the curve names for the type
*/
@Deprecated
public static String[] getCurveNamesForForwardCurveInstrument(final StripInstrumentType type, final String fundingCurveName, final String forwardCurveName) {
switch (type) {
case SWAP_3M:
return new String[] {fundingCurveName, forwardCurveName };
case SWAP_6M:
return new String[] {fundingCurveName, forwardCurveName };
case SWAP_12M:
return new String[] {fundingCurveName, forwardCurveName };
case SWAP_28D:
return new String[] {fundingCurveName, forwardCurveName };
case CASH:
return new String[] {forwardCurveName };
case FRA_3M:
return new String[] {fundingCurveName, forwardCurveName };
case FRA_6M:
return new String[] {fundingCurveName, forwardCurveName };
case FUTURE:
return new String[] {fundingCurveName, forwardCurveName };
case LIBOR:
return new String[] {forwardCurveName };
case EURIBOR:
return new String[] {forwardCurveName };
case CDOR:
return new String[] {forwardCurveName };
case CIBOR:
return new String[] {forwardCurveName };
case STIBOR:
return new String[] {forwardCurveName };
case TENOR_SWAP:
return new String[] {fundingCurveName, fundingCurveName, forwardCurveName };
case OIS_SWAP:
return new String[] {fundingCurveName, fundingCurveName };
case PERIODIC_ZERO_DEPOSIT:
return new String[] {forwardCurveName };
default:
throw new OpenGammaRuntimeException("Could not find " + type + " in forward curve instrument list");
}
}
//TODO This method should be replaced when we have calculation configurations
public static String[] getCurveNamesForSecurity(final FinancialSecurity security, final String fundingCurveName, final String forwardCurveName) {
final InterestRateInstrumentType type = InterestRateInstrumentType.getInstrumentTypeFromSecurity(security);
switch (type) {
case SWAP_FIXED_IBOR:
return new String[] {fundingCurveName, forwardCurveName};
case SWAP_FIXED_IBOR_WITH_SPREAD:
return new String[] {fundingCurveName, forwardCurveName};
case SWAP_IBOR_IBOR:
return new String[] {fundingCurveName, forwardCurveName, forwardCurveName};
case CASH:
return new String[] {fundingCurveName};
case CASHFLOW:
return new String[] {fundingCurveName};
case FRA:
return new String[] {fundingCurveName, forwardCurveName};
case IR_FUTURE:
return new String[] {fundingCurveName, forwardCurveName};
case COUPON_BOND:
return new String[] {fundingCurveName, fundingCurveName};
case SWAP_FIXED_CMS:
return new String[] {fundingCurveName, forwardCurveName};
case SWAP_IBOR_CMS:
return new String[] {fundingCurveName, forwardCurveName};
case SWAP_CMS_CMS:
return new String[] {fundingCurveName, forwardCurveName};
case BOND_FUTURE:
return new String[] {fundingCurveName, fundingCurveName};
case SWAP_FIXED_OIS:
return new String[] {fundingCurveName, fundingCurveName};
default:
throw new OpenGammaRuntimeException("Could not find " + type + " in security instrument list");
}
}
public static String[] getCurveNamesForSecurity(final FinancialSecurity security, final String[] curveNames) {
final InterestRateInstrumentType type = InterestRateInstrumentType.getInstrumentTypeFromSecurity(security);
final String fundingCurveName = curveNames[0];
final String forward1CurveName = curveNames.length > 1 ? curveNames[1] : fundingCurveName;
final String forward2CurveName = curveNames.length == 3 ? curveNames[2] : forward1CurveName;
switch (type) {
case SWAP_FIXED_IBOR:
return new String[] {fundingCurveName, forward1CurveName };
case SWAP_FIXED_IBOR_WITH_SPREAD:
return new String[] {fundingCurveName, forward1CurveName };
case SWAP_IBOR_IBOR:
return new String[] {fundingCurveName, forward1CurveName, forward2CurveName};
case CASH:
return new String[] {fundingCurveName };
case CASHFLOW:
return new String[] {fundingCurveName};
case FRA:
return new String[] {fundingCurveName, forward1CurveName };
case IR_FUTURE:
return new String[] {fundingCurveName, forward1CurveName };
case COUPON_BOND:
return new String[] {fundingCurveName, fundingCurveName };
case SWAP_FIXED_CMS:
return new String[] {fundingCurveName, forward1CurveName };
case SWAP_IBOR_CMS:
return new String[] {fundingCurveName, forward1CurveName };
case SWAP_CMS_CMS:
return new String[] {fundingCurveName, forward1CurveName };
case BOND_FUTURE:
return new String[] {fundingCurveName, fundingCurveName };
case SWAP_FIXED_OIS:
return new String[] {fundingCurveName, fundingCurveName };
default:
throw new OpenGammaRuntimeException("Could not find " + type + " in security instrument list");
}
}
public static String[] getCurveNamesForSecurity(final FinancialSecurity security, final String[] curveNames, final Frequency resetFrequency) {
final InterestRateInstrumentType type = InterestRateInstrumentType.getInstrumentTypeFromSecurity(security);
final String fundingCurveName = curveNames[0];
final String forward1CurveName = curveNames.length > 1 ? curveNames[1] : fundingCurveName;
final String forward2CurveName = curveNames.length == 3 ? curveNames[2] : forward1CurveName;
switch (type) {
case SWAP_FIXED_IBOR:
if (resetFrequency.getName().equals(Frequency.QUARTERLY_NAME)) {
return new String[] {fundingCurveName, forward1CurveName};
} else if (resetFrequency.getName().equals(Frequency.SEMI_ANNUAL_NAME)) {
return new String[] {fundingCurveName, forward2CurveName};
}
return new String[] {fundingCurveName, forward1CurveName };
case SWAP_FIXED_IBOR_WITH_SPREAD:
return new String[] {fundingCurveName, forward1CurveName };
case SWAP_IBOR_IBOR:
return new String[] {fundingCurveName, forward1CurveName, forward2CurveName};
case CASH:
return new String[] {fundingCurveName };
case CASHFLOW:
return new String[] {fundingCurveName};
case FRA:
return new String[] {fundingCurveName, forward1CurveName };
case IR_FUTURE:
return new String[] {fundingCurveName, forward1CurveName };
case COUPON_BOND:
return new String[] {fundingCurveName, fundingCurveName };
case SWAP_FIXED_CMS:
return new String[] {fundingCurveName, forward1CurveName };
case SWAP_IBOR_CMS:
return new String[] {fundingCurveName, forward1CurveName };
case SWAP_CMS_CMS:
return new String[] {fundingCurveName, forward1CurveName };
case BOND_FUTURE:
return new String[] {fundingCurveName, fundingCurveName };
case SWAP_FIXED_OIS:
return new String[] {fundingCurveName, fundingCurveName };
default:
throw new OpenGammaRuntimeException("Could not find " + type + " in security instrument list");
}
}
}