Bump and Reprice Gamma ladder
Table of Contents
+#+updated: 2026-11-04
This page defines one report: Bump and Reprice Gamma ladder. It states how the value change itself moves when one market factor moves, so a reader sees the curvature that a straight ladder cannot show. A desk uses it to ask whether a hedge holds when the market moves twice as far, and market risk uses it to size the error a linear view carries. It runs on the end of day cycle and leaves the engine's output archive in storage. The result store that would ingest the archive is not built yet, so the run records where the archive landed.
1. Purpose
It answers a question about one factor at a time. As this factor moves, does the money-per-shift figure stay the same, or does it grow? A reader who knows only the first-order figure treats the answer as a straight line. This report states how far the line bends, and it states that bend at each bucket.
The decision it feeds is the size of a hedge and the comfort taken from it. A book whose second-order figure is large needs a wider hedge than its first-order figure suggests, and a limit that reads only Delta will allow a position that moves more than the limit intends.
2. Audience
| Role | What it takes from the report |
|---|---|
| trading-desk | The curvature at each bucket, so the desk widens a hedge before the market moves. |
| market-risk | The size of the error a linear limit leaves out of its measure. |
3. Frequency
This ladder is end of day, and so are the gamma, theta, cross-gamma and par DV01 readers. A ladder is read as the risk statement of record and compared across days. The volatility ladders and the rates delta ladder also hold a live definition, which their own pages state, and a live ladder is indicative where this one stands.
| Field | Value |
|---|---|
| Cycle | eod |
| Frequency | scheduled |
| Batch | none |
| Owner | trading-desk |
The definition selects the EOD cut, and the run settings row it binds states
market data type eod. The run therefore values the portfolio at the weekday
before the run date, and holiday calendars are not consulted.
4. Inputs
- Trades selected by the definition's scope. The scope is a row of the definition and the taxonomy fixes the shapes it accepts, on Risk reporting.
- Market data at the authorised end of day cut. The run records the cut it read against the run instance, with its label, kind and instant.
- The risk report configuration the definition binds. It switches on the
sensitivityanalytic, states the base currency and namessensitivity.xmlas thesensitivityConfigFile. The analytic statesrecalibrateModelsY,outputSensitivityThreshold0.000001,parSensitivityYandmarketConfigFilesimulation.xml. - A sensitivity document that switches gamma on, through
ComputeGammaor through aCentralshift scheme. The shipped document sets neither for the FX volatility blocks, so a gamma ladder needs a document a person writes. See What is not built.
5. Outputs
The run produces the engine's own output archive and records where that archive
landed against the run instance. The archive holds sensitivity.csv, which
carries the Gamma column beside the Delta column, and scenario.csv, which
carries the scenario value behind each row.
The rows a reader would query in a table are a later phase. The result store is designed on Report post-processing and is not built yet.
6. Measures
Gamma is ComputeGamma or a Central shift scheme. The first switch asks the
engine for the second-order column. The second changes the arithmetic, because a
central shift reprices the book on both sides of the base value and reads the
curvature from the pair.
Delta is a value change and not a derivative, and the same holds for the second
order. The shift size is already inside the figure. A reader who wants the
curvature for another size changes ShiftSize in the document and runs again.
A cross gamma is ComputeGamma plus a CrossGammaFilter that lists pairs of
factor keys as substrings. The engine writes a cross gamma into
sensitivity.csv as a row with both Factor_1 and Factor_2 populated. At
engine version 1.8.17.0 no writer reads
sensitivity.crossGammaOutputFile, so crossgamma.csv never appears.
| Measure | Meaning |
|---|---|
| Gamma | The change in the money-per-shift figure as the factor moves again. |
| Delta | The first-order figure from the same run, for comparison. |
| Base NPV | The value of the trade before the shift. |
| Scenario NPV | The value of the trade after the shift, from scenario.csv. |
7. Columns and sections
The reader opens the engine's CSV files, because the result store is not built. The tables below state the columns of the two files this report writes. The definitions are on ORE output formats.
| Column | Holds |
|---|---|
| TradeId | The trade the row belongs to. |
| IsPar | Whether the row states a par sensitivity. |
| Factor_1 | The key of the factor that was shifted, and the bucket the row sits in. |
| ShiftSize_1 | The size of the shift on Factor_1, in the factor's own unit. |
| Factor_2 | The second factor of a cross row, and empty for a one-factor row. |
| ShiftSize_2 | The size of the shift on Factor_2. |
| Currency | The currency the base value and the Greeks are stated in. |
| Base NPV | The value of the trade before the shift. |
| Delta | The value change at the shift, in money. |
| Gamma | The second-order change, empty unless gamma is switched on. |
| Currency(Trade) | The currency of the trade. |
| Base NPV(Trade) | The trade's value in its own currency. |
| Delta(Trade) | The trade's Delta in its own currency. |
| Gamma(Trade) | The trade's Gamma in its own currency. |
| Scenario | The label of the scenario the row belongs to. |
| Column | Holds |
|---|---|
| TradeId | The trade the row belongs to. |
| Factor | The key of the factor that was shifted. |
| Up/Down | Which side of the base value the row states. |
| Base NPV | The value of the trade before the shift. |
| ShiftSize_1 | The size of the shift on the factor. |
| ShiftSize_2 | The size of a second shift, for a paired row. |
| Scenario NPV | The value of the trade after the shift. |
| Difference | The change from the base value to the scenario value. |
| Base Currency | The base currency of the run. |
The buckets are the same as those of the
Delta ladder, because the two reports read one
document and one run. A reader places a figure by the bucket columns. Factor_1
carries the risk class and the bucket, and ShiftSize_1 states the shift that
produced the figure. A volatility factor states the pair, the strike and the
expiry, as in FxVolatility/<pair>/<strike>/<expiry>. A swaption volatility adds
the term, as in SwaptionVolatility/<key>/<strike>/<expiry>/<term>. A curve
factor names the curve and the bucket, as in IndexCurve/EUR-EURIBOR-6M/11/10Y,
and a discount curve factor starts DiscountCurve/<ccy>.
8. ORE configuration
The mechanism has four parts. First, the generated run document carries an
analytic of type sensitivity, and that analytic names sensitivity.xml through
sensitivityConfigFile. Second, the root of that document is
SensitivityAnalysis, and ORE validates it against
external/ore/xsd/sensitivity.xsd. Third, the document carries one block for each
group of risk factors, among them discount curves, index curves, FX spots, FX
volatilities, swaption volatilities, cap and floor volatilities, credit curves and
equity volatilities. Fourth, every factor block states ShiftType, ShiftSize,
ShiftScheme and the bucket list, which is ShiftTenors, ShiftExpiries,
ShiftStrikes, ShiftLossLevels or ShiftTerms.
ShiftType is Relative, Absolute or EqualTo. ShiftScheme is Forward,
Backward or Central. Both are enumerations in
external/ore/xsd/ore_types.xsd. The document also carries switches that are not
factors, and ComputeGamma, CrossGammaFilter, ThetaPeriod and the par
conversion group are four of them.
The fragment below is trimmed from
external/ore/examples/MarketRisk/Input/sensitivity.xml. It shows the Central
scheme the shipped file states for the alternative size keyed IR_FD.
<DiscountCurve ccy="EUR"> <ShiftType>Absolute</ShiftType> <ShiftSize>0.0001</ShiftSize> <ShiftSize key="IR_FD">0.001</ShiftSize> <ShiftScheme>Forward</ShiftScheme> <ShiftScheme key="IR_FD">Central</ShiftScheme> <ShiftTenors>2W,1M,3M,6M,9M,1Y,2Y,3Y,4Y,5Y,7Y,10Y,15Y,20Y,25Y,30Y</ShiftTenors> </DiscountCurve>
The shipped document sets no ComputeGamma element. A gamma ladder over the
curves therefore reads the keyed Central scheme, and a gamma ladder over a
surface needs a document that adds ComputeGamma.
The engine writes sensitivity.csv with the columns the reader saw above, and it
writes scenario.csv with the scenario value and the difference behind each
figure.
The bump is a setting of the configuration and not the identity of the report. Two reports over one book that differ only in shift size differ only in the document they bind. Nothing in the name of this report fixes a shift, and nothing in the engine knows a ladder by name.
9. Parameters
A definition of this report states the rows below. The shift itself is not a parameter of the store, and no seed states a shift size anywhere.
| Parameter | Domain | Seeded value | Meaning |
|---|---|---|---|
| cut_kind_code | a kind of cut | EOD | The kind of cut the run mints when it starts. |
| market_data_type | live, eod or date | eod | The market data the run values the portfolio at. |
| base_currency | ISO 4217 code | the entity's | The currency the figures are expressed in. |
| sensitivity.sensitivityConfigFile | a name in the file library | sensitivity.xml | The sensitivity document the analytic reads. |
| sensitivity.recalibrateModels | Y or N | Y | Whether models are recalibrated before each shift. |
| sensitivity.outputSensitivityThreshold | a real | 0.000001 | The size below which a change is not written. |
| sensitivity.sensitivityOutputFile | a file name | sensitivity.csv | The file the engine writes the rows to. |
| ComputeGamma | present or absent | absent in the shipped document | Whether the second-order column is computed. |
| ShiftScheme | Forward, Backward or Central | Forward, with a Central key | The arithmetic the shift uses. |
10. A worked read
- Open the archive the run recorded and take
sensitivity.csv. - Keep the rows that state a figure in the
Gammacolumn. A row with an empty Gamma column carries no second-order figure. - Choose one risk class and one bucket from the segments of
Factor_1. - Read
ShiftSize_1. The gamma figure belongs to that shift, and it does not carry to another size. - Read the
Gammacolumn together with theDeltacolumn of the same row. The pair states the line and its bend. - Open
scenario.csvand read the rows of one factor. TheUp/Downcolumn states which side of the base value each row holds, and a central shift reads both sides. - Compare the gamma figure against the delta figure of the same bucket. A small gamma against a large delta states a line that holds for the shift in the document.
- Read the same bucket on the previous close. Two closes state whether the curvature grew or shrank.
- Do not add gamma figures across buckets into one total without saying what the total is for. A sum of curvatures is not a hedge.
11. What is not built
- No mapper reads or writes a
SensitivityAnalysisdocument. The document is a name in a lookup and a row in the file library, and it is not a modelled entity. - The run package carries only the four Setup documents, which are conventions, curve configuration, today's market and pricing engines. An analytic document that no owner exports never reaches the engine.
- No volatility market data is seeded. The ACME dataset holds 420 quotes and all
of them are
IR_SWAP/RATE/.... The engine therefore refuses at the point it needs a volatility, and the run records that refusal. - No shift size is stated anywhere in the store. This matters more for gamma than for delta, because a curvature belongs to one size and to no other.
- No stored shape holds a bucketed ladder. The bucket is a segment of a factor key in a CSV file.
- The result store is not built, so no table carries the rows a reader queries.
- No writer reads
sensitivity.crossGammaOutputFileat engine version 1.8.17.0, so a cross-gamma ladder reads rows ofsensitivity.csvand no file of its own.
12. Test coverage
The sensitivity configuration type is seeded with root SensitivityAnalysis, the
parameter sensitivityConfigFile and the owner ores.analytics. The document and
its two surface variants sit in the ORE file library with their descriptions, the
schema is vendored as sensitivity_schema, and the worked configurations are
vendored.
No substitute is defined for this report, so a test run executes every phase and assembles its own bundle. The report is exercised by the full-pipeline proof and not by a smoke test. The machinery that proves a bundle without gathering one is Sample bundle smoke test.
13. Related
- Reports, where this page is listed.
- Risk reporting, which holds the classification taxonomy and the measures catalogue.
- ORE output formats, which states the columns of
sensitivity.csvandscenario.csv. - Bump and Reprice Delta ladder, which carries the first-order column over the same buckets.
- Bump and Reprice Cross-gamma ladder, which reads the rows that name two factors.
- Bump and Reprice Volga ladder, which reads gamma on a volatility factor.
- Report execution pipeline, which states the phases every run goes through.
- The cut is the body a run prices from, which states what an end of day cut holds.
- Light the intraday reports on the LIVE cut, the task that lit the sibling reports.
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 engine whose
ComputeGammaswitch writes the second-order column.