/** * Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.solutions.library.tool; import java.util.List; import org.threeten.bp.Instant; import org.threeten.bp.ZonedDateTime; import com.google.inject.Inject; import com.opengamma.engine.marketdata.spec.MarketDataSpecification; import com.opengamma.id.VersionCorrection; import com.opengamma.master.region.RegionMaster; import com.opengamma.master.region.impl.RegionFileReader; import com.opengamma.service.ServiceContext; import com.opengamma.service.ThreadLocalServiceContext; import com.opengamma.service.VersionCorrectionProvider; import com.opengamma.sesame.config.ViewConfig; import com.opengamma.sesame.engine.CalculationArguments; import com.opengamma.sesame.engine.Engine; import com.opengamma.sesame.engine.FixedInstantVersionCorrectionProvider; import com.opengamma.sesame.engine.Results; import com.opengamma.sesame.marketdata.EmptyMarketDataSpec; import com.opengamma.sesame.marketdata.MarketDataEnvironment; import com.opengamma.sesame.marketdata.MarketDataEnvironmentBuilder; import com.opengamma.solutions.library.storage.DataLoader; import com.opengamma.solutions.util.CreditViewUtils; import com.opengamma.util.ArgumentChecker; /** * Sample Credit pricing method */ public class CreditPricer { private final Engine _engine; private final DataLoader _databaseRestore; private final RegionMaster _regionMaster; /** * Create an instance of the Credit Pricer * @param engine the calculation engine. * @param databaseRestore utility to populateMulticurveData data into the in memory masters * @param regionMaster regions master */ @Inject public CreditPricer(Engine engine, DataLoader databaseRestore, RegionMaster regionMaster) { _databaseRestore = ArgumentChecker.notNull(databaseRestore, "databaseRestore"); _regionMaster = ArgumentChecker.notNull(regionMaster, "regionMaster"); _engine = ArgumentChecker.notNull(engine, "engine"); } /** * Calculate PV and CS01 * @return Results containing PV and CS01 for a legacy and standard CS01 * @param valuationTime ZoneDateTime valuation time * @param creditCurveName the name of the credit curve * @param yieldCurveName the name of the yield curve */ public Results price(ZonedDateTime valuationTime, String creditCurveName, String yieldCurveName) { // Add sample data to the masters _databaseRestore.populateCreditData(); // initialize the RegionMaster with data RegionFileReader.createPopulated(_regionMaster); MarketDataSpecification marketDataSpec = EmptyMarketDataSpec.INSTANCE; CalculationArguments calculationArguments = CalculationArguments.builder() .valuationTime(valuationTime) .marketDataSpecification(marketDataSpec) .configVersionCorrection(VersionCorrection.ofVersionAsOf(Instant.now())) .build(); List<Object> trades = CreditViewUtils.INPUTS; MarketDataEnvironment marketDataEnvironment = MarketDataEnvironmentBuilder.empty(); ViewConfig viewConfig = CreditViewUtils.createViewConfig(creditCurveName, yieldCurveName); // This is needed to ensure that the version correction provided is after the population of the masters ServiceContext serviceContext = ThreadLocalServiceContext.getInstance().with(VersionCorrectionProvider.class, new FixedInstantVersionCorrectionProvider(Instant.now())); ThreadLocalServiceContext.init(serviceContext); return _engine.runView(viewConfig, calculationArguments, marketDataEnvironment, trades); } }