Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,41 @@ private PointSensitivities pointSensitivity(
return tradePricer.presentValueSensitivityRates(trade, ratesProvider, volatilities);
}

//-------------------------------------------------------------------------
// calculates normal vega for all scenarios
ScenarioArray<CurrencyParameterSensitivities> vegaMarketQuoteBucketed(
ResolvedIborCapFloorTrade trade,
RatesScenarioMarketData ratesMarketData,
IborCapFloorScenarioMarketData capFloorMarketData) {

IborIndex index = trade.getProduct().getCapFloorLeg().getIndex();
return ScenarioArray.of(
ratesMarketData.getScenarioCount(),
i -> vegaMarketQuoteBucketed(
trade,
ratesMarketData.scenario(i).ratesProvider(),
capFloorMarketData.scenario(i).volatilities(index)));
}

// vega for one scenario
CurrencyParameterSensitivities vegaMarketQuoteBucketed(
ResolvedIborCapFloorTrade trade,
RatesProvider ratesProvider,
IborCapletFloorletVolatilities volatilities) {

PointSensitivities pointSensitivity = pointSensitivityVega(trade, ratesProvider, volatilities);
return volatilities.parameterSensitivity(pointSensitivity);
}

// vega point sensitivity
private PointSensitivities pointSensitivityVega(
ResolvedIborCapFloorTrade trade,
RatesProvider ratesProvider,
IborCapletFloorletVolatilities volatilities) {

return tradePricer.presentValueSensitivityModelParamsVolatility(trade, ratesProvider, volatilities).build();
}

//-------------------------------------------------------------------------
// calculates currency exposure for all scenarios
MultiCurrencyScenarioArray currencyExposure(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,9 @@
* <li>{@linkplain Measures#PV01_CALIBRATED_BUCKETED PV01 calibrated bucketed on rate curves}
* <li>{@linkplain Measures#PV01_MARKET_QUOTE_SUM PV01 market quote sum on rate curves}
* <li>{@linkplain Measures#PV01_MARKET_QUOTE_BUCKETED PV01 market quote bucketed on rate curves}
* <li>{@linkplain Measures#VEGA_MARKET_QUOTE_BUCKETED vega market quote bucketed on vol surfaces}
* <li>{@linkplain Measures#CURRENCY_EXPOSURE Currency exposure}
* <li>{@linkplain Measures#CURRENT_CASH Current cash}
* <li>{@linkplain Measures#CURRENT_CASH Current cash}
* <li>{@linkplain Measures#RESOLVED_TARGET Resolved trade}
* </ul>
* <p>
Expand All @@ -64,6 +64,7 @@ public class IborCapFloorTradeCalculationFunction
.put(Measures.PV01_CALIBRATED_BUCKETED, IborCapFloorMeasureCalculations.DEFAULT::pv01RatesCalibratedBucketed)
.put(Measures.PV01_MARKET_QUOTE_SUM, IborCapFloorMeasureCalculations.DEFAULT::pv01RatesMarketQuoteSum)
.put(Measures.PV01_MARKET_QUOTE_BUCKETED, IborCapFloorMeasureCalculations.DEFAULT::pv01RatesMarketQuoteBucketed)
.put(Measures.VEGA_MARKET_QUOTE_BUCKETED, IborCapFloorMeasureCalculations.DEFAULT::vegaMarketQuoteBucketed)
.put(Measures.CURRENCY_EXPOSURE, IborCapFloorMeasureCalculations.DEFAULT::currencyExposure)
.put(Measures.CURRENT_CASH, IborCapFloorMeasureCalculations.DEFAULT::currentCash)
.put(Measures.RESOLVED_TARGET, (rt, smd, m) -> rt)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,14 @@
import com.opengamma.strata.calc.runner.FunctionRequirements;
import com.opengamma.strata.collect.result.Result;
import com.opengamma.strata.data.scenario.MultiCurrencyScenarioArray;
import com.opengamma.strata.data.scenario.ScenarioArray;
import com.opengamma.strata.data.scenario.ScenarioMarketData;
import com.opengamma.strata.market.curve.ConstantCurve;
import com.opengamma.strata.market.curve.Curve;
import com.opengamma.strata.market.curve.CurveId;
import com.opengamma.strata.market.curve.Curves;
import com.opengamma.strata.market.observable.IndexQuoteId;
import com.opengamma.strata.market.param.CurrencyParameterSensitivities;
import com.opengamma.strata.measure.Measures;
import com.opengamma.strata.measure.curve.TestMarketDataMap;
import com.opengamma.strata.measure.rate.RatesMarketDataLookup;
Expand Down Expand Up @@ -116,18 +118,23 @@ public void test_simpleMeasures() {
MultiCurrencyAmount expectedPv = pricer.presentValue(RTRADE, provider, VOLS);
MultiCurrencyAmount expectedCurrencyExposure = pricer.currencyExposure(RTRADE, provider, VOLS);
MultiCurrencyAmount expectedCurrentCash = pricer.currentCash(RTRADE, provider, VOLS);
CurrencyParameterSensitivities expectedVegaBucketed =
VOLS.parameterSensitivity(pricer.presentValueSensitivityModelParamsVolatility(RTRADE, provider, VOLS).build());

Set<Measure> measures = ImmutableSet.of(
Measures.PRESENT_VALUE,
Measures.CURRENCY_EXPOSURE,
Measures.CURRENT_CASH);
Measures.CURRENT_CASH,
Measures.VEGA_MARKET_QUOTE_BUCKETED);
assertThat(function.calculate(TRADE, measures, PARAMS, md, REF_DATA))
.containsEntry(
Measures.PRESENT_VALUE, Result.success(MultiCurrencyScenarioArray.of(ImmutableList.of(expectedPv))))
.containsEntry(
Measures.CURRENCY_EXPOSURE, Result.success(MultiCurrencyScenarioArray.of(ImmutableList.of(expectedCurrencyExposure))))
.containsEntry(
Measures.CURRENT_CASH, Result.success(MultiCurrencyScenarioArray.of(ImmutableList.of(expectedCurrentCash))));
Measures.CURRENT_CASH, Result.success(MultiCurrencyScenarioArray.of(ImmutableList.of(expectedCurrentCash))))
.containsEntry(
Measures.VEGA_MARKET_QUOTE_BUCKETED, Result.success(ScenarioArray.of(ImmutableList.of(expectedVegaBucketed))));
}

//-------------------------------------------------------------------------
Expand Down