/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.sesame.marketdata.builders; import static com.opengamma.sesame.config.ConfigBuilder.argument; import static com.opengamma.sesame.config.ConfigBuilder.arguments; import static com.opengamma.sesame.config.ConfigBuilder.config; import static com.opengamma.sesame.config.ConfigBuilder.function; import static com.opengamma.sesame.config.ConfigBuilder.implementations; import java.util.List; import org.threeten.bp.Period; import com.google.common.collect.ImmutableList; import com.opengamma.analytics.financial.provider.curve.inflation.InflationDiscountBuildingRepository; import com.opengamma.analytics.financial.provider.curve.issuer.IssuerDiscountBuildingRepository; import com.opengamma.analytics.financial.provider.curve.multicurve.MulticurveDiscountBuildingRepository; import com.opengamma.core.historicaltimeseries.HistoricalTimeSeriesSource; import com.opengamma.core.link.ConfigLink; import com.opengamma.financial.analytics.curve.ConfigDBCurveSpecificationBuilder; import com.opengamma.financial.analytics.curve.credit.CurveSpecificationBuilder; import com.opengamma.financial.currency.CurrencyMatrix; import com.opengamma.id.VersionCorrection; import com.opengamma.sesame.CurveNodeConverterFn; import com.opengamma.sesame.DefaultCurveNodeConverterFn; import com.opengamma.sesame.component.RetrievalPeriod; import com.opengamma.sesame.config.FunctionModelConfig; import com.opengamma.sesame.engine.ComponentMap; import com.opengamma.sesame.graph.FunctionModel; import com.opengamma.sesame.marketdata.DefaultHistoricalMarketDataFn; import com.opengamma.sesame.marketdata.FxMatrixMarketDataBuilder; import com.opengamma.sesame.marketdata.HistoricalMarketDataFn; import com.opengamma.sesame.marketdata.InflationMulticurveMarketDataBuilder; import com.opengamma.sesame.marketdata.IssuerMulticurveMarketDataBuilder; import com.opengamma.sesame.marketdata.MulticurveMarketDataBuilder; /** * Helper class for building the standard set of {@link MarketDataBuilder} implementations. */ public class MarketDataBuilders { private MarketDataBuilders() { } /** * Creates a builder for raw data which requests data from a data source or historical time series. * * @param componentMap singleton components supplied by the system * @param timeSeriesDataSource the name of the data source used for looking up time series of historical data * @return a builder for raw market data */ public static RawMarketDataBuilder raw(ComponentMap componentMap, String timeSeriesDataSource) { HistoricalTimeSeriesSource timeSeriesSource = componentMap.getComponent(HistoricalTimeSeriesSource.class); return new RawMarketDataBuilder(timeSeriesSource, timeSeriesDataSource, null); } /** * Creates a builder for multicurve bundles. * * @param componentMap singleton components supplied by the system * @return a builder for multicurve bundles */ public static MulticurveMarketDataBuilder multicurve(ComponentMap componentMap, ConfigLink<CurrencyMatrix> currencyMatrixLink) { FunctionModelConfig config = config( arguments( function( DefaultCurveNodeConverterFn.class, argument("timeSeriesDuration", RetrievalPeriod.of(Period.ofYears(1)))), function( MulticurveDiscountBuildingRepository.class, argument("toleranceAbs", 1e-10), argument("toleranceRel", 1e-10), argument("stepMaximum", 5000)), function( ConfigDBCurveSpecificationBuilder.class, argument("versionCorrection", VersionCorrection.LATEST))), implementations( CurveSpecificationBuilder.class, ConfigDBCurveSpecificationBuilder.class, CurveNodeConverterFn.class, DefaultCurveNodeConverterFn.class, HistoricalMarketDataFn.class, DefaultHistoricalMarketDataFn.class)); return FunctionModel.build(MulticurveMarketDataBuilder.class, config, componentMap); } /** * Creates a builder for issuer multicurve bundles. * * @param componentMap singleton components supplied by the system * @return a builder for issuer multicurve bundles */ public static IssuerMulticurveMarketDataBuilder issuerMulticurve(ComponentMap componentMap, ConfigLink<CurrencyMatrix> currencyMatrixLink) { FunctionModelConfig config = config( arguments( function( DefaultCurveNodeConverterFn.class, argument("timeSeriesDuration", RetrievalPeriod.of(Period.ofYears(1)))), function( IssuerDiscountBuildingRepository.class, argument("toleranceAbs", 1e-9), argument("toleranceRel", 1e-9), argument("stepMaximum", 1000)), function( ConfigDBCurveSpecificationBuilder.class, argument("versionCorrection", VersionCorrection.LATEST))), implementations( CurveSpecificationBuilder.class, ConfigDBCurveSpecificationBuilder.class, CurveNodeConverterFn.class, DefaultCurveNodeConverterFn.class, HistoricalMarketDataFn.class, DefaultHistoricalMarketDataFn.class)); return FunctionModel.build(IssuerMulticurveMarketDataBuilder.class, config, componentMap); } /** * Creates a builder for inflation multicurve bundles. * * @param componentMap singleton components supplied by the system * @return a builder for inflation multicurve bundles */ public static InflationMulticurveMarketDataBuilder inflationMulticurve(ComponentMap componentMap, ConfigLink<CurrencyMatrix> currencyMatrixLink) { FunctionModelConfig config = config( arguments( function( DefaultCurveNodeConverterFn.class, argument("timeSeriesDuration", RetrievalPeriod.of(Period.ofYears(1)))), function( InflationDiscountBuildingRepository.class, argument("toleranceAbs", 1e-9), argument("toleranceRel", 1e-9), argument("stepMaximum", 1000)), function( ConfigDBCurveSpecificationBuilder.class, argument("versionCorrection", VersionCorrection.LATEST))), implementations( CurveSpecificationBuilder.class, ConfigDBCurveSpecificationBuilder.class, CurveNodeConverterFn.class, DefaultCurveNodeConverterFn.class, HistoricalMarketDataFn.class, DefaultHistoricalMarketDataFn.class)); return FunctionModel.build(InflationMulticurveMarketDataBuilder.class, config, componentMap); } /** * Creates a builder for security market data. * * @return a builder for security market data */ public static SecurityMarketDataBuilder security() { return new SecurityMarketDataBuilder(); } /** * Creates a builder for volatility surface data. * * @return a builder for volatility surface data */ public static VolatilitySurfaceMarketDataBuilder volSurface() { return new VolatilitySurfaceMarketDataBuilder(); } /** * Creates a builder for surface data. * * @return a builder for surface data */ public static SurfaceMarketDataBuilder surface() { return new SurfaceMarketDataBuilder(); } /** * Creates a builder for forward curve data. * * @return a builder for forward curve data */ public static ForwardCurveMarketDataBuilder forwardCurve() { return new ForwardCurveMarketDataBuilder(); } /** * Creates a builder for credit curve data. * * @return a builder for credit curve data */ public static CreditCurveMarketDataBuilder creditCurve() { return new CreditCurveMarketDataBuilder(); } /** * Creates a builder for isda yield curve data. * * @return a builder for isda yield curve data */ public static IsdaYieldCurveMarketDataBuilder isdaYieldCurve() { return new IsdaYieldCurveMarketDataBuilder(); } /** * Creates a builder for matrices of FX rates. * * @return a builder for matrices of FX rates */ public static FxMatrixMarketDataBuilder fxMatrix() { return new FxMatrixMarketDataBuilder(); } /** * Creates a builder for FX rates. * * @param currencyMatrixLink a link to a {@link CurrencyMatrix} defining how to look up or derive FX rates * @return a builder for FX rates */ public static FxRateMarketDataBuilder fxRate(ConfigLink<CurrencyMatrix> currencyMatrixLink) { return new FxRateMarketDataBuilder(currencyMatrixLink); } /** * Creates the default builders for the built-in market data types. * * @param componentMap singleton components supplied by the system * @param timeSeriesDataSource the name of the data source used for looking up time series of historical data * @param currencyMatrixLink a link to a {@link CurrencyMatrix} defining how to look up or derive FX rates * @return the default builders for the built-in market data types */ public static List<MarketDataBuilder> standard(ComponentMap componentMap, String timeSeriesDataSource, ConfigLink<CurrencyMatrix> currencyMatrixLink) { return ImmutableList.of(raw(componentMap, timeSeriesDataSource), multicurve(componentMap, currencyMatrixLink), issuerMulticurve(componentMap, currencyMatrixLink), inflationMulticurve(componentMap, currencyMatrixLink), fxMatrix(), fxRate(currencyMatrixLink), security(), creditCurve(), isdaYieldCurve(), volSurface(), surface(), forwardCurve()); } }