Skip to content
All library documents

Distinguishing Daily and Final Settlement Prices for 3M SOFR Futures

Article Quant Q&A · Author: Lucas Dias

Summary

The document explains why a calculation of a 3M SOFR futures final settlement can differ from values in a Bloomberg historical price table. It distinguishes the daily exchange settlement, which is quoted on a futures tick grid, from final settlement, which is calculated from compounded SOFR fixings across the reference quarter and rounded to four decimal places. The final price is obtained by subtracting that rounded annualized compounded rate from 100.

The author reports that recalculations using New York Fed fixings match the questioner's spreadsheet and cites CME and another exchange's published final settlements as corroboration. For several contracts, the Bloomberg values instead align with daily settlement ticks. The proposed explanation is that the table may show the last trading day's daily settlement for some contracts and the final settlement on the settlement date for another. Checking the dates on the table's last rows could test that explanation. The diagnosis is plausible, but the document does not directly verify the Bloomberg field or dates for every contract.

Key ideas

  • Daily SOFR futures settlements use exchange tick increments, while final settlement is rounded to four decimal places.
  • Final settlement is based on compounded overnight SOFR fixings over the reference quarter.
  • The contract's final price equals 100 minus the rounded compounded annualized rate.
  • A historical price table may show a daily settlement for one contract and a final settlement for another.
  • Checking the final row dates and Bloomberg field can help identify which settlement type is displayed.

Tags

Full text
# How to calculate the 3month sofr contract settlement


# How to calculate the 3month sofr contract settlement












I'm trying to calculate the historical final settlement of some 3M SOFR futures contracts, but I'm having trouble matching the exact values. I pulled the historical SOFR rates from this page https://www.newyorkfed.org/markets/reference-rates/sofr and the values match those reported by Bloomberg.

I then followed this guide https://www.cmegroup.com/content/dam/cmegroup/education/files/sofr-futures-settlement-calculation-methodologies.pdf which is consistent with other sources (I used my own formulas to replicate the example on page 2 and I get the same result, which makes me believe my formulas are correct). I calculate what the settlement price should be for SFRH5, SFRM5, SFRU5, and SFRZ5. I then compared my results against the settlement values that Bloomberg gives me. However, there is still a small difference that I can't figure out. Any idea what might be causing this? Could there have been a revision to the series?

Below are the values I calculated vs. the ones from Bloomberg.

And here is an example of how I'm calculating SFRH5 — I'm attaching a spreadsheet with the calculations in case anyone wants to check as well.

Excel here: https://github.com/lucasdias-cloud/SFR-settlement

Adding sfrz5 image also

## Answer by pandashark (score 3)

https://quant.stackexchange.com/a/85565

What you are comparing on Bloomberg is almost certainly the wrong series.

The Bloomberg screenshot appears to be a `Historical Price Table` with `Period = Daily`, and the field shown is the contract's daily `Settlement Px`. For CME 3M SOFR futures, daily settlement prices are quoted on the contract tick grid. For nearby contracts that grid is `0.0025` IMM index points. In your screenshot, the Bloomberg values all lie on that lattice:

- 95.6500

- 95.6525

- 95.6550

- 95.6575

By contrast, final settlement is a separate calculation based on realized compounded SOFR over the reference quarter and rounded to `0.0001`, so it need not lie on the `0.0025` grid:

$$ R=\frac{360}{D}\left(\prod_i\left(1+\frac{r_i}{100}\frac{d_i}{360}\right)-1\right)\times 100 $$

Meaning:

- $r_i$ = SOFR fixing for business day $i$, quoted in percent

- $d_i$ = number of calendar days that fixing applies to

- $D = \sum_i d_i$ = total calendar days in the reference quarter

- $\prod_i$ = multiply all the daily accrual factors together

It takes the compounded realized overnight SOFR over the whole reference quarter and converts it into an annualized percent rate. Then the final settlement price is:

$$ \text{Final settlement price} = 100-\operatorname{round}(R, 0.0001) $$

So final settlement is rounded to `0.0001`, not forced onto the `0.0025` tick grid.

That explains your `SFRH5` mismatch:

- your spreadsheet: `95.6577`



`95.6575` is a valid daily settlement tick. `95.6577` is not a valid daily settlement tick, but it is perfectly valid as a final settlement price.

I checked this with QuantLib using the exact daily SOFR fixings from your spreadsheet for the `SFRH5` reference quarter (March 19, 2025 to June 18, 2025). QuantLib gives:

- price = `95.6577354707`

- annualized rate = `4.3422645293%`

which matches your spreadsheet calculation, not the Bloomberg daily settlement table.

So I do not think the issue is a SOFR revision. The issue is that the Bloomberg screenshot appears to be showing daily exchange settlement prices, while your calculation is for final contract settlement.

That would also explain why your Bloomberg values for `H5`, `M5`, and `U5` all land on `0.0025` ticks, whereas your computed final settlements do not.

If you can find the Bloomberg field for final settlement / cash settlement rather than daily `Settlement Px`, I'd expect it to line up much better.

Update — Lucas Dias raises a valid point in the comments about SFRZ5. Building on Attack68's verification, I've dug deeper.

#### Independent verification

I recomputed all four contracts from scratch using SOFR fixings pulled directly from the NY Fed SOFR page. Results:

| Contract | Ref Quarter | Computed Price | OP Price | Bloomberg |
| SFRH5 | 2025-03-19 to 2025-06-18 | 95.6577 | 95.6577 | 95.6575 |
| SFRM5 | 2025-06-18 to 2025-09-17 | 95.6240 | 95.6240 | 95.6250 |
| SFRU5 | 2025-09-17 to 2025-12-17 | 95.9134 | 95.9134 | 95.9150 |
| SFRZ5 | 2025-12-17 to 2026-03-18 | 96.3108 | 96.3108 | 96.3108 |

All four match Lucas Dias's calculations exactly. CME's own Final Settlements page confirms SR3Z5 = 96.3108 (dated 18 Mar 2026). The FMX Futures Exchange — a separate exchange that lists its own 3M SOFR contract with the same settlement mechanics — also publishes all four final settlement prices as 95.6577, 95.6240, 95.9134, 96.3108. Agreement is expected: final settlement is deterministic — 100 minus the compounded rate rounded to four decimal places per the CME methodology, applied to the same published NY Fed SOFR fixings.

#### What most likely explains H5/M5/U5 vs Z5?

Lucas Dias correctly observes that Bloomberg's SFRZ5 entry (96.3108) does not sit on the 0.0025 tick grid, while H5/M5/U5 do:

| Contract | BBG Price | On tick grid? | Last Trading Day | Settlement Date |
| SFRH5 | 95.6575 | Yes | 2025-06-17 | 2025-06-18 |
| SFRM5 | 95.6250 | Yes | 2025-09-16 | 2025-09-17 |
| SFRU5 | 95.9150 | Yes | 2025-12-16 | 2025-12-17 |
| SFRZ5 | 96.3108 | No | 2026-03-17 | 2026-03-18 |

The most likely explanation comes down to which date Bloomberg's last HP row corresponds to.

For 3M SOFR futures, the last trading day is the business day before the end of the reference quarter, and the settlement date is the next day (the 3rd Wednesday). There is no trading on the settlement date — the exchange simply publishes the final settlement price that morning.

- SFRZ5: As Lucas Dias noted, the last row has no trading activity. This is consistent with it being the settlement date (March 18, 2026) — the final settlement price, computed from the compounded SOFR formula, rounded to four decimal places, and not constrained to the tick grid.

- SFRH5/M5/U5: The Bloomberg values all sit on the 0.0025 grid. This is consistent with them being daily settlement prices from the last trading day. Near expiry (from the first business day of the delivery month), the minimum tick drops from 0.005 to 0.0025. The daily settlement on the last trading day is close to, but not identical to, the final settlement computed the following morning.

This is not Bloomberg being wrong per se — it appears to be showing a different settlement type (daily vs. final) depending on how recently the contract expired.

You can test this: check the date on the last row of Bloomberg's HP table for each contract. If H5/M5/U5 show the last trading day (Jun 17, Sep 16, Dec 16) while Z5 shows the settlement date (Mar 18), that confirms the two price types.

#### Bottom line

Your calculations are correct — confirmed by independent computation, CME's Final Settlements page, the FMX settlement report, and Attack68's verification. The Bloomberg discrepancy for H5/M5/U5 is a display issue: the HP table's last entry for those contracts appears to show the last daily settlement (on the tick grid) rather than the final contract settlement (rounded to 0.0001).

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.