R
Rijeka
INTERACTIVE TOOLS

Bermudan Swaption · Risk & XVA

HW1F TRINOMIAL · TAIL-SHRINK · σ_NORMAL CALIBRATED
USD SOFR ICVS · 04/27/2026 · BBG-VALIDATED
01

Trade

$10MM
NORMAL VOL σ20 bp
OPTION EXPIRY5Y
UNDERLYING TENOR5Y
STRIKE OFFSETATM
HW1F MEAN-REVERT a0.05
DIRECTIONRECEIVER
RECEIVER
PAYER
STRUCTUREBERMUDAN
BERMUDAN
EUROPEAN
02

Exercise Schedule

5 dates
EUROPEAN
2 DATES
3 DATES
ANNUAL
SEMI
0Y5Y
03

Counterparty XVA

bp
bp
%
bp
$
EE PROFILE
EXERCISE BOUNDARY
GREEKS
XVA WATERFALL
α

Valuation

BERMUDAN NPV
EUROPEAN NPV
EE PREMIUM
EE / EUROPEAN
FORWARD RATE
STRIKE
β

Risk

VEGA / 1bp σ_n
IR01 / 1bp parallel
θ / 1d (analytical)
γ

XVA Waterfall

RISK-FREE NPV
−CVA
+DVA
−FVA
−MVA
ALL-IN NPV
M

Methodology

Brigo-Mercurio §24 · Hull-White 1F · Tail-shrink convention

The Model

Short rate follows dr = (θ(t) − a·r)·dt + σshort·dW — Hull-White 1-factor with a deterministic shift α(t) fitted via Arrow-Debreu forward induction so that the model reprices today's discount curve at every tree node to machine precision. Trinomial discretization with monthly time-steps over the full swap maturity. A typical full solve — base pricing + 5 calibration passes + 4 risk bumps — runs in 1–3 seconds in your browser depending on the option's tenor.

The Curve

Live USD SOFR ICVS (curve 490, date 04/27/2026) baked in as 32 bootstrapped discount-factor pillars from 1W to 30Y, copied directly from a Bloomberg ICVS screen and interpolated log-linearly (= piecewise-constant forward rates). Computed par swap rate matches Bloomberg's ATM strike to within 0.1 bp. The curve is fixed in this tool; Rijeka's production system bootstraps it live.

σ_normal → σ_short Calibration

The vol slider takes normal swaption vol (σ_n) — the same input Bloomberg's vol cube uses. The HW1F tree internally needs a short-rate vol (σ_short), which is a different thing related to σ_n through the Andersen-Piterbarg variance integral. So on every slider move the tool runs a 22-iteration bisection that finds the σ_short producing a Bachelier-equivalent European NPV at σ_n. Plug 20 bp directly into σ_short and you mis-price by ~15%; calibrate first and the gap to Bloomberg drops to single digits. This is the same step Bloomberg's HW1F runs internally — the difference is they calibrate to the full surface, this tool calibrates to one point at the option's expiry.

The Structure Toggle

BERMUDAN uses the full configured exercise schedule. EUROPEAN collapses it to a single exercise at the first scheduled date — the option's natural expiry — and prices the resulting forward-starting swap. Same model, same tree, same curve; only the exercise rights change. Toggling lets you isolate exactly how much value comes from the multi-date optionality, with the EE profile, exercise boundary, Greeks and XVA all responding live.

Tail-Shrink Underlying

Exercise at time tex enters into a swap that runs from tex to a fixed swap end date. Earlier exercise gives a longer-tail underlying. This is the standard market convention for Bermudan swaptions, callable bonds, and cancellable swaps. The early-exercise premium emerges precisely because each exercise date offers a different remaining swap, so the holder can wait for the most favorable rate environment before committing.

EE Profile

For each tree time step, the option's value at every reachable node weighted by the Arrow-Debreu density of paths that have not yet exercised. Pre-exercise this is the residual option value (continuation); at and after exercise dates it folds in the immediate-exercise value where exercise is optimal. The weighting matters: exercise dates remove probability mass from the surviving distribution, so the EE peaks and then decays as the option converts to cash. This is the EE that feeds CVA/FVA.

Exercise Boundary

At each exercise date, there's a critical short rate r* where immediate exercise equals continuation value. The boundary chart shows r* evolving across the schedule — receiver swaptions exercise when rates fall below r*, payers when rates rise above. The boundary's slope is the option's "delta to time" — flatter boundaries mean more exercise indifference, steeper means more discrimination.

Greeks

Vega is ±1 bp on σ_normal (with σ_short re-calibrated at each bump), so the number is directly comparable to Bloomberg's vega(1bp). IR01 is ±1 bp parallel curve shift with σ_short held fixed — matches Bloomberg's DV01 convention. Sign is the receiver-swap convention (negative for long receiver = curve up loses value). Theta is analytical: Bachelier-derived from the European leg, θ ≈ −Veur / (2·Tfirst) / 365.25. A tree-based theta at monthly dt is unreliable — a 1-day shift doesn't move the exercise step indices, so the result is dominated by α(t)-fitting noise. The analytical version gets the right sign and order of magnitude; expect it to overstate |θ| by 30–50% on Bermudans because early exercise reduces time-decay.

XVA

CVA = (1−R) · ∫ EE(t) · λcp · Scp(t) · D(t) dt with constant hazard rates from CDS spreads. DVA mirrors with own credit. FVA from funding spread on positive exposure; MVA from funding cost on initial margin. Closed-form Riemann sum on the same time grid as the tree. Bermudan-specific subtlety: post-exercise the option becomes a live swap with two-sided MTM — this tool uses the pre-exercise EE only, which is the standard approximation for option-style XVA.

Bloomberg SWPM Validation

Stress-tested against a 1Y × 5Y Bermudan Long Receiver, $10MM USD SOFR, FLAT 20bp normal vol, strike 3.695907%. Bloomberg's HW1F: NPV $43,297, Vega $2,460, DV01 $2,069, Theta −$33. This tool at default settings (a = 0.05, σ_normal = 20 bp, annual schedule): NPV ~$41,500 (−4%), Vega ~$2,355 (−4%), IR01 ~$2,180 (+5%). Theta is analytical and overstates |θ| by ~40%. The residual ~4–5% gaps on NPV and vega are normal cross-vendor HW1F variation — Bloomberg calibrates σ to a full surface and may use time-dependent σ(t), where this tool calibrates σ_short to one expiry/tenor point. Sweep a and the gaps trade against each other (higher a closes the NPV gap but widens vega).

What this tool is not

Single-point σ calibration, fixed curve as of one date, monthly tree resolution. Production Rijeka uses live OIS bootstrapping, full vol-surface calibration with Jamshidian decomposition, finer grids on the short end, and the calendar-rounding fix from Sprint 13B (default delta_y = 1 day, not 1 hour — that one was a 30× bug). What you see here is the same model and the same math, dimensioned for an interactive screen rather than a CCP-margined desk.