Calculate Delta Risk With QuantLib
QuantLib provides the building blocks to value vanilla interest-rate swaps and compute sensitivities such as DV01/Delta. Rather than relying on undocumented helpers, combine curve bootstrapping, pricing engines, and a bump-and-reprice workflow to produce regulator-ready risk numbers.
Step-by-Step Workflow
- Bootstrap the Curve
- Load deposit, futures, and swap quotes into
ql.SimpleQuotehandles. - Build a
ql.PiecewiseLinearZeroorql.PiecewiseLogCubicDiscountterm structure. - Store the curve in a
ql.RelinkableYieldTermStructureHandleso you can switch between base and bumped states.
- Load deposit, futures, and swap quotes into
- Define the Swap
- Create a schedule with
ql.Scheduleand instantiate aql.VanillaSwapwith the correct fixed/floating conventions. - Attach a
ql.DiscountingSwapEnginethat references your discount curve handle.
- Create a schedule with
- Compute the Base NPV
- Call
swap.NPV()(and optionallyfixedLegBPS()/floatingLegBPS()) to establish the baseline valuation.
- Call
- Apply a Bump
- Copy the underlying quotes, add a parallel 1 bp shift (0.0001), rebuild the curve, and re-link the handle.
- Reprice the swap and calculate
(bumped_npv - base_npv) / 0.0001. - For key-rate DV01, bump individual maturities or use pillar-specific shock vectors.
Practical Tips
- Catch
ql.BootstrapErrorexceptions so calibration failures do not silently skew sensitivity outputs. - Prefer central differences (±0.5 bp) when you need smoother Greeks for long-dated trades.
- Align tenors, calendars, and day-counts with your enterprise risk system to keep reported numbers consistent.
References
Risk Notice
Interest-rate sensitivities influence regulatory capital, hedge accounting, and limit monitoring. Validate your implementation against an independent benchmark and consult model-risk teams before releasing changes to production.