/**
* Copyright (C) 2016 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.measure.security;
import com.opengamma.strata.basics.currency.CurrencyAmount;
import com.opengamma.strata.data.MarketData;
import com.opengamma.strata.data.scenario.CurrencyScenarioArray;
import com.opengamma.strata.data.scenario.ScenarioMarketData;
import com.opengamma.strata.market.observable.QuoteId;
import com.opengamma.strata.product.Security;
/**
* Multi-scenario measure calculations for simple security trades and positions.
* <p>
* Each method corresponds to a measure, typically calculated by one or more calls to the pricer.
*/
final class SecurityMeasureCalculations {
// restricted constructor
private SecurityMeasureCalculations() {
}
//-------------------------------------------------------------------------
// calculates present value for all scenarios
static CurrencyScenarioArray presentValue(
Security security,
double quantity,
ScenarioMarketData marketData) {
return CurrencyScenarioArray.of(
marketData.getScenarioCount(),
i -> calculatePresentValue(security, quantity, marketData.scenario(i)));
}
//-------------------------------------------------------------------------
// present value for one scenario
private static CurrencyAmount calculatePresentValue(
Security security,
double quantity,
MarketData marketData) {
QuoteId id = QuoteId.of(security.getSecurityId().getStandardId());
double price = marketData.getValue(id);
return security.getInfo().getPriceInfo().calculateMonetaryAmount(quantity, price);
}
}