Package com.opengamma.examples.bloomberg.function

Source Code of com.opengamma.examples.bloomberg.function.ExampleStandardFunctionConfiguration

/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.examples.bloomberg.function;

import java.util.List;

import com.opengamma.engine.function.config.CombiningFunctionConfigurationSource;
import com.opengamma.engine.function.config.FunctionConfiguration;
import com.opengamma.engine.function.config.FunctionConfigurationSource;
import com.opengamma.financial.analytics.model.forex.defaultproperties.FXForwardPropertiesFunctions;
import com.opengamma.financial.analytics.model.forex.defaultproperties.FXOptionPropertiesFunctions;
import com.opengamma.financial.analytics.model.option.AnalyticOptionDefaultCurveFunction;
import com.opengamma.financial.analytics.model.pnl.PNLFunctions;
import com.opengamma.financial.currency.CurrencyMatrixConfigPopulator;
import com.opengamma.financial.currency.CurrencyMatrixLookupFunction;
import com.opengamma.lambdava.functions.Function1;
import com.opengamma.web.spring.StandardFunctionConfiguration;

/**
*
*/
public class ExampleStandardFunctionConfiguration extends StandardFunctionConfiguration {
  /**
   * Gets an instance of the example function configuration.
   *
   * @return Gets the instance
   */
  public static FunctionConfigurationSource instance() {
    return new ExampleStandardFunctionConfiguration().getObjectCreating();
  }

  /**
   * The function configuration.
   */
  public ExampleStandardFunctionConfiguration() {
    setMark2MarketField("CLOSE");
    setCostOfCarryField("COST_OF_CARRY");
    setAbsoluteTolerance(0.0001);
    setRelativeTolerance(0.0001);
    setMaximumIterations(1000);
  }

  @Override
  protected CurrencyInfo audCurrencyInfo() {
    final CurrencyInfo i = super.audCurrencyInfo();
    i.setCurveConfiguration(null, "DefaultThreeCurveAUDConfig");
    i.setCurveConfiguration("model/fxforward", "AUDFX");
    i.setCurveConfiguration("mode/fxoption/black", "DefaultThreeCurveAUDConfig");
    i.setCurveName(null, "Discounting");
    i.setCurveName("model/fxforward", "DEFAULT");
    i.setCurveName("model/fxoption/black", "Discounting");
    return i;
  }

  @Override
  protected CurrencyInfo chfCurrencyInfo() {
    final CurrencyInfo i = super.chfCurrencyInfo();
    i.setCurveConfiguration(null, "DefaultTwoCurveCHFConfig");
    i.setCurveConfiguration("model/fxforward", "CHFFX");
    i.setCurveConfiguration("model/swaption/black", "DefaultTwoCurveCHFConfig");
    i.setCurveConfiguration("model/fxoption/black", "DefaultTwoCurveCHFConfig");
    i.setCurveName(null, "Discounting");
    i.setCurveName("model/fxforward", "DEFAULT");
    i.setCurveName("model/fxoption/black", "Discounting");
    i.setSurfaceName("model/swaption/black", "BLOOMBERG");
    return i;
  }

  @Override
  protected CurrencyInfo eurCurrencyInfo() {
    final CurrencyInfo i = super.eurCurrencyInfo();
    i.setCurveConfiguration(null, "DefaultTwoCurveEURConfig");
    i.setCurveConfiguration("mode/future", "DefaultTwoCurveEURConfig");
    i.setCurveConfiguration("model/fxforward", "EURFX");
    i.setCurveConfiguration("model/fxoption/black", "DefaultTwoCurveEURConfig");
    i.setCurveConfiguration("model/swaption/black", "DefaultTwoCurveEURConfig");
    i.setCurveName(null, "Discounting");
    i.setCurveName("model/fxforward", "DEFAULT");
    i.setCurveName("model/fxoption/black", "Discounting");
    i.setSurfaceName("model/swaption/black", "BLOOMBERG");
    return i;
  }

  @Override
  protected CurrencyInfo gbpCurrencyInfo() {
    final CurrencyInfo i = super.gbpCurrencyInfo();
    i.setCurveConfiguration(null, "DefaultTwoCurveGBPConfig");
    i.setCurveConfiguration("model/fxforward", "GBPFX");
    i.setCurveConfiguration("model/fxoption/black", "DefaultTwoCurveGBPConfig");
    i.setCurveConfiguration("model/swaption/black", "DefaultTwoCurveGBPConfig");
    i.setCurveName(null, "Discounting");
    i.setCurveName("model/fxforward", "DEFAULT");
    i.setCurveName("model/fxoption/black", "Discounting");
    i.setSurfaceName("model/swaption/black", "BLOOMBERG");
    return i;
  }

  @Override
  protected CurrencyInfo jpyCurrencyInfo() {
    final CurrencyInfo i = super.jpyCurrencyInfo();
    i.setCurveConfiguration(null, "DefaultTwoCurveJPYConfig");
    i.setCurveConfiguration("model/fxforward", "JPYFX");
    i.setCurveConfiguration("model/fxforward/black", "DefaultTwoCurveJPYConfig");
    i.setCurveConfiguration("model/swaption/black", "DefaultTwoCurveJPYConfig");
    i.setCurveName(null, "Discounting");
    i.setCurveName("model/fxforward", "DEFAULT");
    i.setCurveName("model/fxoption/black", "Discounting");
    i.setSurfaceName("model/swaption/black", "BLOOMBERG");
    return i;
  }

  @Override
  protected CurrencyInfo usdCurrencyInfo() {
    final CurrencyInfo i = super.usdCurrencyInfo();
    i.setCurveConfiguration(null, "DefaultTwoCurveUSDConfig");
    i.setCurveConfiguration("model/fxforward", "DefaultTwoCurveUSDConfig");
    i.setCurveConfiguration("model/fxforward/black", "DefaultTwoCurveUSDConfig");
    i.setCurveConfiguration("model/swaption/black", "DefaultTwoCurveUSDConfig");
    i.setCurveConfiguration("model/bond/riskFree", "DefaultTwoCurveUSDConfig");
    i.setCurveConfiguration("model/bond/credit", "DefaultTwoCurveUSDConfig");
    i.setCurveName(null, "Discounting");
    i.setCurveName("model/fxforward", "Discounting");
    i.setCurveName("model/fxoption/black", "Discounting");
    i.setCurveName("model/bond/riskFree", "Discounting");
    i.setCurveName("model/bond/credit", "Discounting");
    i.setCubeName(null, "BLOOMBERG");
    i.setForwardCurveName(null, "Forward3M");
    i.setSurfaceName(null, "DEFAULT");
    i.setSurfaceName("model/swaption/black", "DEFAULT");
    return i;
  }

  @Override
  protected CurrencyPairInfo usdEurCurrencyPairInfo() {
    final CurrencyPairInfo i = super.usdEurCurrencyPairInfo();
    i.setCurveName("model/volatility/surface/black", "Discounting");
    i.setSurfaceName("model/volatility/surface/black", "DEFAULT");
    i.setSurfaceName("model/fxoption/black", "DEFAULT");
    i.setForwardCurveName("model/fxforward", "DEFAULT");
    return i;
  }

  @Override
  protected CurrencyPairInfo usdJpyCurrencyPairInfo() {
    final CurrencyPairInfo i = super.usdJpyCurrencyPairInfo();
    i.setSurfaceName("model/fxoption/black", "DEFAULT");
    i.setForwardCurveName("model/fxforward", "DEFAULT");
    return i;
  }

  @Override
  protected CurrencyPairInfo usdChfCurrencyPairInfo() {
    final CurrencyPairInfo i = super.usdJpyCurrencyPairInfo();
    i.setSurfaceName("model/fxoption/black", "DEFAULT");
    i.setForwardCurveName("model/fxforward", "DEFAULT");
    return i;
  }

  @Override
  protected CurrencyPairInfo usdAudCurrencyPairInfo() {
    final CurrencyPairInfo i = super.usdJpyCurrencyPairInfo();
    i.setSurfaceName("model/fxoption/black", "DEFAULT");
    i.setForwardCurveName("model/fxforward", "DEFAULT");
    return i;
  }

  @Override
  protected CurrencyPairInfo usdGbpCurrencyPairInfo() {
    final CurrencyPairInfo i = super.usdJpyCurrencyPairInfo();
    i.setSurfaceName("model/fxoption/black", "DEFAULT");
    i.setForwardCurveName("model/fxforward", "DEFAULT");
    return i;
  }

  @Override
  protected CurrencyPairInfo eurGbpCurrencyPairInfo() {
    final CurrencyPairInfo i = super.usdJpyCurrencyPairInfo();
    i.setSurfaceName("model/fxoption/black", "DEFAULT");
    i.setForwardCurveName("model/fxforward", "DEFAULT");
    return i;
  }

  @Override
  protected CurrencyPairInfo chfJpyCurrencyPairInfo() {
    final CurrencyPairInfo i = super.usdJpyCurrencyPairInfo();
    i.setSurfaceName("model/fxoption/black", "DEFAULT");
    i.setForwardCurveName("model/fxforward", "DEFAULT");
    return i;
  }

  @Override
  protected void addCurrencyConversionFunctions(final List<FunctionConfiguration> functionConfigs) {
    super.addCurrencyConversionFunctions(functionConfigs);
    functionConfigs.add(functionConfiguration(CurrencyMatrixLookupFunction.class, CurrencyMatrixConfigPopulator.BLOOMBERG_LIVE_DATA));
  }

  @Override
  protected FunctionConfigurationSource forexFunctions() {
    final FXForwardPropertiesFunctions fxForwardDefaults = new FXForwardPropertiesFunctions();
    setForexForwardDefaults(fxForwardDefaults);
    final FunctionConfigurationSource fxForwardRepository = getRepository(fxForwardDefaults);
    final FXOptionPropertiesFunctions fxOptionDefaults = new FXOptionPropertiesFunctions();
    setForexOptionDefaults(fxOptionDefaults);
    final FunctionConfigurationSource fxOptionRepository = getRepository(fxOptionDefaults);
    return CombiningFunctionConfigurationSource.of(fxForwardRepository, fxOptionRepository);
  }

  protected void setForexOptionDefaults(final FXOptionPropertiesFunctions defaults) {
    defaults.setPerCurrencyInfo(getCurrencyInfo(new Function1<CurrencyInfo, FXOptionPropertiesFunctions.CurrencyInfo>() {
      @Override
      public FXOptionPropertiesFunctions.CurrencyInfo execute(final CurrencyInfo i) {
        final FXOptionPropertiesFunctions.CurrencyInfo d = new FXOptionPropertiesFunctions.CurrencyInfo();
        setForexOptionDefaults(i, d);
        return d;
      }
    }));
    defaults.setPerCurrencyPairInfo(getCurrencyPairInfo(new Function1<CurrencyPairInfo, FXOptionPropertiesFunctions.CurrencyPairInfo>() {
      @Override
      public FXOptionPropertiesFunctions.CurrencyPairInfo execute(final CurrencyPairInfo i) {
        final FXOptionPropertiesFunctions.CurrencyPairInfo d = new FXOptionPropertiesFunctions.CurrencyPairInfo();
        setForexOptionDefaults(i, d);
        return d;
      }
    }));

  }

  protected void setForexForwardDefaults(final FXForwardPropertiesFunctions defaults) {
    defaults.setPerCurrencyInfo(getCurrencyInfo(new Function1<CurrencyInfo, FXForwardPropertiesFunctions.CurrencyInfo>() {
      @Override
      public FXForwardPropertiesFunctions.CurrencyInfo execute(final CurrencyInfo i) {
        final FXForwardPropertiesFunctions.CurrencyInfo d = new FXForwardPropertiesFunctions.CurrencyInfo();
        setForexForwardDefaults(i, d);
        return d;
      }
    }));
    defaults.setPerCurrencyPairInfo(getCurrencyPairInfo(new Function1<CurrencyPairInfo, FXForwardPropertiesFunctions.CurrencyPairInfo>() {
      @Override
      public FXForwardPropertiesFunctions.CurrencyPairInfo execute(final CurrencyPairInfo i) {
        final FXForwardPropertiesFunctions.CurrencyPairInfo d = new FXForwardPropertiesFunctions.CurrencyPairInfo();
        setForexForwardDefaults(i, d);
        return d;
      }
    }));

  }

  protected void setForexForwardDefaults(final CurrencyInfo i, final FXForwardPropertiesFunctions.CurrencyInfo defaults) {
    defaults.setCurveConfiguration(i.getCurveConfiguration("model/fxforward"));
    defaults.setDiscountingCurve(i.getCurveName("model/fxforward"));
  }

  protected void setForexForwardDefaults(final CurrencyPairInfo i, final FXForwardPropertiesFunctions.CurrencyPairInfo defaults) {
    defaults.setForwardCurveName(i.getForwardCurveName("model/fxforward"));
  }

  protected void setForexOptionDefaults(final CurrencyInfo i, final FXOptionPropertiesFunctions.CurrencyInfo defaults) {
    defaults.setCurveConfiguration(i.getCurveConfiguration("model/fxoption/black"));
    defaults.setDiscountingCurve(i.getCurveName("model/fxoption/black"));
  }

  protected void setForexOptionDefaults(final CurrencyPairInfo i, final FXOptionPropertiesFunctions.CurrencyPairInfo defaults) {
    defaults.setSurfaceName(i.getSurfaceName("model/fxoption/black"));
  }

  @Override
  protected void addAllConfigurations(final List<FunctionConfiguration> functions) {
    super.addAllConfigurations(functions);
    functions.add(functionConfiguration(AnalyticOptionDefaultCurveFunction.class, "Discounting"));
  }

  @Override
  protected void setPNLFunctionDefaults(final PNLFunctions.Defaults defaults) {
    super.setPNLFunctionDefaults(defaults);
    defaults.setCurveName("Discounting");
    defaults.setPayCurveName("Discounting");
    defaults.setReceiveCurveName("Discounting");
  }
}
TOP

Related Classes of com.opengamma.examples.bloomberg.function.ExampleStandardFunctionConfiguration

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.