Bloomberg SWPM vs a transparent request

February 13, 2026

Bloomberg is the reference on most desks. This post compares a SWPM output with the same instrument priced from a fully explicit Quantra request.

Instrument: 1M x 10Y payer swaption on USD SOFR OIS. Settlement: cash (par yield curve). Model: normal (Bachelier), vol 102.67bp. As of: 2024-08-14.

The goal is not to reverse-engineer every Bloomberg detail. It is to show that a pricing number only exists together with its assumptions, and if the assumptions are hidden, the number cannot really be validated.

Result at a glance

Metric Bloomberg Quantra
Fair rate 3.367463% 3.3724% (ATM forward)
Premium (NPV) 10,359.49 10,585.40
DV01 (1bp) -414.86 430.13
Gamma (1bp) 10.34 10.94
Vega (1bp) 100.90 101.07
Theta (1d) -156.66 -131.55

The Quantra column is what the linked request returns with bump-and-reprice greeks (pricing.options.swaption_pricing_rebump: true). Last re-run on engine 0.15.0 against the public API (October 2026), identical to the earlier runs on 0.8.2. Engines before 0.8.0 did not return theta for this request, because the one-day roll did not move the curve's own reference date. An earlier version of this page showed numbers from a run whose inputs were never published (NPV 10,387.60); they could not be reproduced from the request and were replaced.

Bloomberg SWPM swaption pricing screen

Why matching Bloomberg is harder than it looks

A swaption price is not a formula. It is a model plus a curve, plus conventions, plus a definition for each greek:

To match SWPM greeks you usually need to reproduce Bloomberg's definitions, not just its pricing model.

Why theta usually diverges

Theta is the change in value after one day passes, and that definition is ambiguous, so different systems can legitimately disagree:

Quantra defines theta as npvTomorrow - npv with a one-day roll of the evaluation date and of every curve and volatility reference date. You can read it in the code: src/domain/swaption_rebump.h. Bloomberg's definition is not published, which is the usual source of the gap in that row.

DV01 sign conventions

DV01 can flip sign depending on whether a system applies the trade direction (payer or receiver) or reports the raw rate-bump sensitivity. Bloomberg appears to apply a signed convention for this trade; Quantra reports the direct bump-and-reprice change.

Key settings in the request

Where the market data comes from

The Bloomberg screens come from a public question on Quantitative Finance Stack Exchange: quantlib-swaption-pricing. The second screenshot is the SWPM Curve Data tab. It is cropped at 8 years, so it cannot price a 10-year underlying on its own.

Bloomberg SWPM Curve Data tab

The 32 rates in the request (1 week to 50 years) are the table the author posted as "copied from Bloomberg", not the values on the screenshot. The two are different snapshots of the same curve: at every visible tenor the table sits 0.3 to 1.5bp below the screen's market rate column. The request feeds those numbers as continuously compounded zero rates.

Read instead as SOFR OIS par rates and bootstrapped, the same numbers give an NPV of about 9,730 and a forward of 3.352%. Read as zero rates they give 10,585.40 and a forward of 3.372%. Bloomberg's own forward, 3.367463%, sits between the two. The forward is the whole difference: repricing with the strike set at the engine's own ATM gives 10,382, within 0.2% of Bloomberg's 10,359.49. An independent QuantLib reproduction in the same thread, reading the table as par rates, reports 9,745.84.

Reproduce it

Bloomberg is useful because it is consistent. Open implementations are useful because they can be explained: every definition is explicit, reproducible and auditable.

Bloomberg is mentioned for comparative and educational purposes. Trademarks belong to their respective owners.