/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.forex.calculator;
import org.threeten.bp.ZonedDateTime;
import com.opengamma.analytics.financial.forex.definition.ForexDefinition;
import com.opengamma.analytics.financial.forex.definition.ForexNonDeliverableForwardDefinition;
import com.opengamma.analytics.financial.forex.definition.ForexNonDeliverableOptionDefinition;
import com.opengamma.analytics.financial.forex.definition.ForexOptionDigitalDefinition;
import com.opengamma.analytics.financial.forex.definition.ForexOptionSingleBarrierDefinition;
import com.opengamma.analytics.financial.forex.definition.ForexOptionVanillaDefinition;
import com.opengamma.analytics.financial.forex.definition.ForexSwapDefinition;
import com.opengamma.analytics.financial.forex.derivative.Forex;
import com.opengamma.analytics.financial.forex.derivative.ForexNonDeliverableForward;
import com.opengamma.analytics.financial.forex.derivative.ForexNonDeliverableOption;
import com.opengamma.analytics.financial.forex.derivative.ForexOptionDigital;
import com.opengamma.analytics.financial.forex.derivative.ForexOptionSingleBarrier;
import com.opengamma.analytics.financial.forex.derivative.ForexOptionVanilla;
import com.opengamma.analytics.financial.forex.derivative.ForexSwap;
import com.opengamma.analytics.financial.model.option.definition.Barrier;
import com.opengamma.analytics.financial.model.option.definition.Barrier.BarrierType;
import com.opengamma.analytics.financial.model.option.definition.Barrier.KnockType;
import com.opengamma.analytics.financial.model.option.definition.Barrier.ObservationType;
import com.opengamma.util.money.Currency;
import com.opengamma.util.time.DateUtils;
/**
* Contains a set of Forex instruments that can be used in tests.
*/
public class ForexInstrumentsDescriptionDataSet {
private static final Currency EUR = Currency.EUR;
private static final Currency USD = Currency.USD;
private static final Currency KRW = Currency.of("KRW");
private static final ZonedDateTime NEAR_DATE = DateUtils.getUTCDate(2011, 5, 26);
private static final ZonedDateTime FAR_DATE = DateUtils.getUTCDate(2011, 7, 26); // 1 month
private static final ZonedDateTime NDF_FIXING_DATE = DateUtils.getUTCDate(2012, 5, 2);
private static final ZonedDateTime NDF_PAYMENT_DATE = DateUtils.getUTCDate(2012, 5, 4);
private static final double NOMINAL_1 = 100000000;
private static final double FX_RATE_EUR_USD = 1.4177;
private static final double FX_RATE_KRW_USD = 1123.45;
private static final double FORWARD_POINTS = -0.0007;
private static final ForexDefinition FX_DEFINITION = new ForexDefinition(EUR, USD, FAR_DATE, NOMINAL_1, FX_RATE_EUR_USD);
private static final boolean IS_CALL = true;
private static final boolean IS_LONG = true;
private static final ZonedDateTime EXPIRATION_DATE = DateUtils.getUTCDate(2011, 7, 22);
private static final String DISCOUNTING_EUR = "Discounting EUR";
private static final String DISCOUNTING_USD = "Discounting USD";
private static final String[] CURVES_NAME = new String[] {DISCOUNTING_EUR, DISCOUNTING_USD};
private static final ForexOptionVanillaDefinition FX_OPTION_DEFINITION = new ForexOptionVanillaDefinition(FX_DEFINITION, EXPIRATION_DATE, IS_CALL, IS_LONG);
private static final Barrier BARRIER = new Barrier(KnockType.IN, BarrierType.UP, ObservationType.CONTINUOUS, 1.5);
private static final ZonedDateTime REFERENCE_DATE = DateUtils.getUTCDate(2011, 5, 20);
public static ForexDefinition createForexDefinition() {
return new ForexDefinition(EUR, USD, FAR_DATE, NOMINAL_1, FX_RATE_EUR_USD);
}
/**
* Creates a FX
* @return A FX
*/
public static Forex createForex() {
return createForexDefinition().toDerivative(REFERENCE_DATE);
}
/**
* Creates a FX swap definition
* @return A FX swap definition
*/
public static ForexSwapDefinition createForexSwapDefinition() {
return new ForexSwapDefinition(EUR, USD, NEAR_DATE, FAR_DATE, NOMINAL_1, FX_RATE_EUR_USD, FORWARD_POINTS);
}
/**
* Creates a FX swap
* @return A FX swap
*/
public static ForexSwap createForexSwap() {
return (ForexSwap) createForexSwapDefinition().toDerivative(REFERENCE_DATE);
}
/**
* Creates a vanilla FX option definition
* @return A vanilla FX option definition
*/
public static ForexOptionVanillaDefinition createForexOptionVanillaDefinition() {
return new ForexOptionVanillaDefinition(FX_DEFINITION, EXPIRATION_DATE, IS_CALL, IS_LONG);
}
/**
* Creates a vanilla FX option
* @return A vanilla FX option
* @deprecated Use the non-deprecated method that does not use yield curve names
*/
@Deprecated
public static ForexOptionVanilla createForexOptionVanillaDeprecated() {
throw new UnsupportedOperationException();
}
/**
* Creates a vanilla FX option
* @return A vanilla FX option
*/
public static ForexOptionVanilla createForexOptionVanilla() {
return createForexOptionVanillaDefinition().toDerivative(REFERENCE_DATE);
}
/**
* Creates a single-barrier FX option definition
* @return A single-barrier FX option definition
*/
public static ForexOptionSingleBarrierDefinition createForexOptionSingleBarrierDefinition() {
return new ForexOptionSingleBarrierDefinition(FX_OPTION_DEFINITION, BARRIER);
}
/**
* Creates a single-barrier FX option
* @return A single-barrier FX option
*/
public static ForexOptionSingleBarrier createForexOptionSingleBarrier() {
return createForexOptionSingleBarrierDefinition().toDerivative(REFERENCE_DATE);
}
/**
* Creates a non-deliverable FX forward definition
* @return A non-deliverable FX forward
*/
public static ForexNonDeliverableForwardDefinition createForexNonDeliverableForwardDefinition() {
return new ForexNonDeliverableForwardDefinition(KRW, USD, NOMINAL_1, FX_RATE_KRW_USD, NDF_FIXING_DATE, NDF_PAYMENT_DATE);
}
/**
* Creates a non-deliverable FX forward
* @return A non-deliverable FX forward
*/
public static ForexNonDeliverableForward createForexNonDeliverableForward() {
return createForexNonDeliverableForwardDefinition().toDerivative(REFERENCE_DATE);
}
/**
* Creates a non-deliverable FX option definition
* @return A non-deliverable FX option definition
*/
public static ForexNonDeliverableOptionDefinition createForexNonDeliverableOptionDefinition() {
return new ForexNonDeliverableOptionDefinition(createForexNonDeliverableForwardDefinition(), IS_CALL, IS_LONG);
}
/**
* Creates a non-deliverable FX option
* @return A non-deliverable FX option
* @deprecated Use the non-deprecated method that does not use yield curve names
*/
@Deprecated
public static ForexNonDeliverableOption createForexNonDeliverableOptionDeprecated() {
throw new UnsupportedOperationException();
}
/**
* Creates a non-deliverable FX option
* @return A non-deliverable FX option
*/
public static ForexNonDeliverableOption createForexNonDeliverableOption() {
return createForexNonDeliverableOptionDefinition().toDerivative(REFERENCE_DATE);
}
/**
* Creates a FX digital option definition
* @return A FX digital option definition
*/
public static ForexOptionDigitalDefinition createForexOptionDigitalDefinition() {
return new ForexOptionDigitalDefinition(FX_DEFINITION, EXPIRATION_DATE, IS_CALL, IS_LONG);
}
/**
* Creates a FX digital option
* @return A FX digital option
* @deprecated Use the non-deprecated method that does not use yield curve names
*/
@Deprecated
public static ForexOptionDigital createForexOptionDigitalDeprecated() {
throw new UnsupportedOperationException();
}
/**
* Creates a FX digital option
* @return A FX digital option
*/
public static ForexOptionDigital createForexOptionDigital() {
return createForexOptionDigitalDefinition().toDerivative(REFERENCE_DATE);
}
}