Bump and Reprice Triple Vol Spot Ladder
Table of Contents
This page defines one report: Bump and Reprice Triple Vol Spot Ladder. It puts the three volatility Greeks of a book against every curve tenor at each spot shift level, so a desk reads vol and skew risk against a moving spot in one table. The trading desk reads it and the market risk function reads it, on the book scope. It runs every hour, at every hour of every day, from the live cut, and a person may ask for one at any time. It leaves the engine's own output archive behind and records the cut its run minted. The result store that would carry the rows is not built, so a reader opens the CSV files in the archive.
1. Purpose
It answers where a book carries volatility risk, and how that risk stands against spot, in one read. The decision it feeds is the desk's. It asks whether the vol position it holds is the one it intends, at the tenors and the wings it holds it in, while the day is still moving.
Vega is the change in value for a shift of a volatility point. Rega is the same change read along the risk reversal, so it states the slope of the smile. Sega is the same change read along the butterfly, so it states the wings. The catalogue names the three together as the triple vol, because a desk that reads one of them alone cannot say whether a smile has steepened or flattened.
The page states under "What is not built" which of the three columns ORE produces natively and which a reader must derive.
2. Audience
| Role | What it takes from the report |
|---|---|
| trading-desk | Vega, Rega and Sega at each tenor and spot shift level, so the desk decides whether to hedge vol, skew or wings before the close. |
| market-risk | The same figures on the book scope, as an indicative view of the vol risk the desk is running. |
3. Frequency
Cycle intraday. The definition is seeded with the expression 0 * * * *, which
fires it at the first minute of every hour, around the clock and on every day of
the week, and a person may ask for one at any time. The product owner set that
cadence on 2026-11-04, because the report costs a full sensitivity run and a desk
reads its shape between the closes rather than inside them. It is not a member of
an ordered batch.
The close twin, Bump and Reprice
Triple Vol Spot Ladder (EOD), keeps its own expression, 0 18 * * 1-5, which
fires it at 18:00 on weekdays.
The concurrency policy is skip. A firing that arrives while a run of the same
definition is in flight is dropped.
The definition states cut_kind_code LIVE. A LIVE cut mints at the instant the
run begins and carries the indicative label, so every figure on this report is
known to be indicative.
| Field | Value |
|---|---|
| Cycle | intraday |
| Frequency | scheduled |
| Batch | none |
| Owner | market-risk |
4. Inputs
- Trades selected by scope. The scope shape is
book. Only the London entity holds this report, because the option books are there. - Market data at the instant the run starts. The run mints a LIVE cut, which holds what the store held then.
- The risk report configuration the definition binds,
Sensitivities - Global Portfolio. The row states the market data typeliveand the base currency, which is the entity's. - The engine settings row the definition binds. The pricing engine for a live
definition is
Intraday Indicative.
A definition binds six configuration documents, one per configuration type. The
six codes are conventions, curve_configuration, todays_market,
pricing_engines, risk_report_config and engine_settings. A definition that
omits one of the first five cannot run, because ORE reads all of them before it
prices.
5. Outputs
The run produces the engine's own output archive. The archive holds the CSV
artefacts of the one bound analytic: sensitivity.csv and scenario.csv. The
run also records the cut it minted, with the cut's identity, its label, its kind
and its instant.
The rows a reader would query are a later phase. The result store is designed on Report post-processing and is not built, so a reader opens the CSV files in the archive.
6. Measures
The set is the catalogue's for this report, read per tenor and per spot shift level. The standard shift series is 30, 20, 10, 5, 2, 1, 0.5 and 0 percent. The definitions of the measures are on Risk reporting and are not repeated here.
| Measure | Meaning |
|---|---|
| Vega | The change in value for a shift of the volatility at a surface point. |
| Rega | The same change read along the risk reversal, so it states the slope of the smile at that point. |
| Sega | The same change read along the butterfly, so it states the wings at that point. |
7. Columns and sections
The analytic writes two files. The tables below state the columns of those files, as ORE output formats lists them. A (Base) column is in the run's base currency. A (Trade) column is in the trade's currency. A shift size is in the factor's unit.
sensitivity.csv holds the sensitivities of each trade: Delta and Gamma for each
factor, and cross gammas for factor pairs. The file has two header variants. The
volatility Greek a reader takes from it is the Delta column on a volatility
factor row.
| Column | Kind | What it holds |
|---|---|---|
| TradeId | text | The trade the row states. |
| IsPar | text | Whether the row is a par-rate figure. |
| Factor_1 | text | The risk factor key that was shifted, for example a volatility point. |
| ShiftSize_1 | decimal | The size of the shift, in the factor's unit. |
| Factor_2 | text | The second factor key, on a cross gamma row. |
| ShiftSize_2 | decimal | The size of the second shift. |
| Currency | text | The currency the amounts are stated in. |
| Base NPV | decimal | The base valuation the shift was applied to. |
| Delta | decimal | The value change for the shift, in money. |
| Gamma | decimal | The curvature of the value in the factor. |
| Currency(Trade) | text | The trade's own currency. |
| Base NPV(Trade) | decimal | The base valuation in the trade's currency. |
| Delta(Trade) | decimal | The Delta in the trade's currency. |
| Gamma(Trade) | decimal | The Gamma in the trade's currency. |
| Scenario | text | The label of the scenario the row belongs to. |
scenario.csv holds the value of each trade under each shifted factor.
| Column | Kind | What it holds |
|---|---|---|
| TradeId | text | The trade the row states. |
| Factor | text | The risk factor key that was shifted. |
| Up/Down | text | The direction of the shift. |
| Base NPV | decimal | The value before the shift. |
| ShiftSize_1 | decimal | The size of the shift, in the factor's unit. |
| ShiftSize_2 | decimal | The size of the second shift, where a row has one. |
| Scenario NPV | decimal | The value after the shift. |
| Difference | decimal | The change in value, which is the scenario value less the base value. |
| Base Currency | text | The run's base currency. |
The factor keys the vol rows carry have the shapes
FxVolatility/<pair>/<strike>/<expiry> and
OptionletVolatility/<ccy>/<n>/<expiry>/<strike>. A reader sorts on the pair, the
expiry and the strike of those keys to place a row at a tenor.
8. ORE configuration
The configuration binds one analytic. The fragment is trimmed from
external/ore/examples/MarketRisk/Input/ore_sensi.xml.
The base currency is the entity's, so the fragment shows GBP for the UK entity. The file states EUR for its own sample.
<Analytic type="sensitivity"> <Parameter name="active">Y</Parameter> <Parameter name="marketConfigFile">simulation.xml</Parameter> <Parameter name="sensitivityConfigFile">sensitivity.xml</Parameter> <Parameter name="scenarioOutputFile">scenario.csv</Parameter> <Parameter name="sensitivityOutputFile">sensitivity.csv</Parameter> <Parameter name="outputSensitivityThreshold">0.000001</Parameter> <Parameter name="recalibrateModels">Y</Parameter> <Parameter name="parSensitivity">Y</Parameter> </Analytic>
The sensitivity analytic reads its shift settings from the document that
sensitivityConfigFile names. That document states, for each group of risk
factors, a ShiftType, a ShiftSize, a ShiftScheme and the bucket list. The
shipped external/ore/examples/MarketRisk/Input/sensitivity.xml states curves at
Absolute 0.0001 and FX volatilities at Relative 0.01 with an expiry list and
an empty ShiftStrikes. An empty ShiftStrikes is the at-the-money-only switch.
That document is not part of the run package the service builds, which carries only the four Setup documents.
9. Parameters
A definition of this report states the rows below. The values are the seeded ones; the domains are the ones the engine and the classification taxonomy fix. The mechanism is on ore parameter.
| Parameter | Domain | Seeded value | Meaning |
|---|---|---|---|
| cut_kind_code | a kind of cut | LIVE | The kind of cut the run mints at the instant it starts. |
| market_data_type | live, eod or date | live | The market data the run reads. |
| base_currency | ISO 4217 code | the entity's | The currency the figures are expressed in. |
| sensitivity.sensitivityConfigFile | a file in the library | sensitivity.xml | The document that states the shifts. |
| sensitivity.marketConfigFile | a file in the library | simulation.xml | The market configuration the bump run prices from. |
| sensitivity.recalibrateModels | Y or N | Y | Whether models are recalibrated before bumping. |
| sensitivity.outputSensitivityThreshold | a real | 0.000001 | Rows below this size are left out of the sensitivity file. |
| sensitivity.parSensitivity | Y or N | Y | Whether par-rate sensitivities are written as well. |
10. A worked read
A person reads this report at the screen in the order below. No run has produced rows yet, so the steps name the files and the comparisons and quote no figure.
- Open the archive the run recorded and take
sensitivity.csv. Read theFactor_1column and keep the rows whose key beginsFxVolatility/orOptionletVolatility/. Those rows are the volatility points of the surface. - On those rows, read
Delta. It is money per shift on the volatility point, andShiftSize_1states the shift it was measured with. This column is the native vega. - Sort the kept rows by the pair, the expiry and the strike inside the key. That order is the surface, expiry by expiry and strike by strike, and it is what a desk reads a vol ladder against.
- Group the strikes of one expiry into the at-the-money point, the call wing and the put wing. The three groups state where the value sits across the smile.
- Take the risk reversal of that expiry as the call wing figure less the put wing figure, and the butterfly as half the sum of the two wings less the at-the-money figure. The change of basis is stated on Risk-reversal vega ladder and Butterfly vega ladder.
- Open
scenario.csvand readBase NPVandDifferenceon the rows of the same factors. The difference states the value change for the shift. - Compare the
Differencecolumn with theDeltacolumn of step 2 for one factor. The two agree to the printed precision, because both state the value change for one shift. - Compare the
Deltacolumn across the expiries of one pair. The rows are tenors of the surface, so the comparison states where the book carries vol risk along the curve. - Look for a row whose key states a spot shift level, such as 30, 20 or 10 percent. No such row exists, because the sensitivity analytic shifts factors and does not step spot. That is the limit the next section states first.
11. What is not built
- ORE has no Rega and no Sega risk factor. A risk reversal and a strangle are not ORE factors. ORE shifts a surface point.
- The vega of the surface points is native. The skew and the wing components must be derived by the change of basis stated on Risk-reversal vega ladder and Butterfly vega ladder.
- The seeded definition therefore produces surface-point sensitivities and not a Rega or Sega column.
- The spot shift levels are not part of the sensitivity analytic either. The grid the catalogue names is a scenario shape and no seeded analytic writes it.
- The dataset holds no volatility market data. Its 420 seeded quotes are all
IR_SWAP/RATE/..., with noFX_OPTION/RATE_LNVOLquote and no volatility surface configuration. so a volatility factor has nothing to shift, and no volatility sensitivity can be computed until the store holds that data. - The result store is not built, so a reader opens the CSV files in the archive.
- No mapper reads or writes a
SensitivityAnalysisdocument. The document is a name in a lookup and a row in the file library, not a modelled entity. - No shift size is stated anywhere in the store.
12. Test coverage
The sensitivity analytic type, the sensitivity configuration type and the file
library entries are in the store, and the schema is vendored as
sensitivity_schema. The cut resolution this report depends on is exercised by
Light the intraday reports on the
LIVE cut.
The shift document the analytic names is a name in a lookup and not a modelled entity, and the run package carries only the four Setup documents. An analytic document that no owner exports never reaches the engine. The pricing phase also stops where the engine needs a volatility. A test run therefore proves the gather, the cut and the generated run document, and it proves no priced row.
13. Related
- Reports, the inventory this page is listed in.
- Bump and Reprice Triple Vol Spot Ladder (EOD), the same set on the end of day cut.
- Bump and Reprice Spot Greeks, the Delta view of spot risk on the same cut.
- Risk reporting, the classification taxonomy and the measures catalogue.
- FX Volatility Surface, the smile identity a change of basis uses.
- The cut is the body a run prices from, what a LIVE cut holds and what it does not.
- Report definition and schedule, how the definition and its schedule are seated.
- Report execution pipeline, the phases every run goes through.
- Report compute handoff, how the run reaches the grid.
- Report post-processing, the store that would hold the rows.
- Risk-reversal vega ladder
- Butterfly vega ladder
- Light the intraday reports on the LIVE cut
14. See also
- Report families — the structure note that orders this cluster, and where to read this page in it.
- Open Source Risk Engine, the valuation engine whose
sensitivityanalytic shifts the surface points.