/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.integration.marketdata.manipulator; import static com.opengamma.integration.marketdata.manipulator.dsl.SimulationUtils.bucketedShift; import static com.opengamma.integration.marketdata.manipulator.dsl.SimulationUtils.pointShift; import static com.opengamma.integration.marketdata.manipulator.dsl.SimulationUtils.volShift; import java.util.List; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.threeten.bp.Instant; import org.threeten.bp.Period; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.opengamma.core.config.ConfigSource; import com.opengamma.engine.marketdata.spec.LiveMarketDataSpecification; import com.opengamma.engine.marketdata.spec.MarketDataSpecification; import com.opengamma.engine.view.ViewComputationResultModel; import com.opengamma.engine.view.ViewDeltaResultModel; import com.opengamma.engine.view.ViewProcessor; import com.opengamma.engine.view.compilation.CompiledViewDefinition; import com.opengamma.engine.view.listener.AbstractViewResultListener; import com.opengamma.id.UniqueId; import com.opengamma.integration.marketdata.manipulator.dsl.Scenario; import com.opengamma.integration.marketdata.manipulator.dsl.ScenarioShiftType; import com.opengamma.integration.marketdata.manipulator.dsl.Simulation; import com.opengamma.integration.marketdata.manipulator.dsl.SimulationUtils; import com.opengamma.integration.server.RemoteServer; import com.opengamma.livedata.UserPrincipal; /** * Demonstration of the most straightforward way to run a simulation. * Assumes the examples-simulated server is running locally with the default configuration and data. */ /* package */ class ExampleSimulation { private static final Logger s_logger = LoggerFactory.getLogger(ExampleSimulation.class); private static final Set<String> CURRENCY_PAIRS = ImmutableSet.of("GBPUSD", "EURUSD", "USDJPY", "CHFUSD"); private static final List<Double> SCALING_FACTORS = ImmutableList.of(0.95, 1.0, 1.05); public static void main(String[] args) { // set up the connection to the server that will run the simulation ------------------------------------------------ try (RemoteServer server = RemoteServer.create("http://localhost:8080")) { ViewProcessor viewProcessor = server.getViewProcessor(); ConfigSource configSource = server.getConfigSource(); String viewDefinitionName = "AUD Swaps (3m / 6m basis) (1)"; UniqueId viewDefId = SimulationUtils.latestViewDefinitionId(viewDefinitionName, configSource); List<MarketDataSpecification> marketDataSpecs = ImmutableList.<MarketDataSpecification>of(LiveMarketDataSpecification.of("Simulated live market data")); // define the simulation ----------------------------------------------------------------------------------------- Simulation simulation = new Simulation("Example simulation"); for (Double scalingFactor : SCALING_FACTORS) { // add a scenario (a single calculation cycle and set of results) for each scale factor Scenario scenario = simulation.scenario(Double.toString(scalingFactor)); for (String currencyPair : CURRENCY_PAIRS) { // bump each spot rate in the scenario by the scale factor scenario.marketDataPoint().id("OG_SYNTHETIC_TICKER", currencyPair).apply().scaling(scalingFactor); } scenario.curve().named("foo").currencies("USD").apply().parallelShift(0.1); scenario.surface().named("bar").apply().shifts(ScenarioShiftType.ABSOLUTE, volShift(Period.ofMonths(6), 3.5, 0.1), volShift(Period.ofYears(1), 4.5, 0.2)); scenario.spotRate().currencyPair("EURUSD").apply().scaling(0.1); scenario.curveData().currencies("EUR").apply() .bucketedShifts(ScenarioShiftType.RELATIVE, bucketedShift(Period.ofYears(1), Period.ofYears(2), 0.01), bucketedShift(Period.ofYears(2), Period.ofYears(3), 0.005)); scenario.curveData().currencies("EUR").apply() .pointShifts(ScenarioShiftType.ABSOLUTE, pointShift(Period.ofMonths(3), 0.01), pointShift(Period.ofMonths(6), 0.015)); } // run the simulation -------------------------------------------------------------------------------------------- simulation.run(viewDefId, marketDataSpecs, false, new Listener(), viewProcessor); } } private static class Listener extends AbstractViewResultListener { @Override public UserPrincipal getUser() { return UserPrincipal.getTestUser(); } @Override public void viewDefinitionCompiled(CompiledViewDefinition compiledViewDefinition, boolean hasMarketDataPermissions) { s_logger.info("view definition compiled"); } @Override public void viewDefinitionCompilationFailed(Instant valuationTime, Exception exception) { s_logger.warn("view definition compilation failed", exception); } @Override public void cycleCompleted(ViewComputationResultModel fullResult, ViewDeltaResultModel deltaResult) { s_logger.info("cycle completed"); } } }