Unofficial CME FedWatch — FOMC rate-change probabilities in one line of Python.
Project description
CME FedWatch Tracker
Unofficial CME FedWatch — FOMC rate-change probabilities in one line of Python.
The only open-source FedWatch that actually works out of the box. No data prep, no API keys, no Selenium.
Installation · Quick Start · CLI · API Reference · How It Works
Why This Project?
The CME FedWatch Tool is the gold standard for gauging market expectations of Fed rate changes. But accessing the data programmatically is painful:
| Existing approach | Problem |
|---|---|
| CME Website | Manual, no API, embedded in QuikStrike iframe |
| pyfedwatch | You must supply your own futures data — the library doesn't fetch anything |
| Selenium scrapers | Slow (~60s), fragile, requires browser + driver |
| CME DataMine API | Paid, enterprise-only |
This project solves all of that. One pip install, zero config:
from cme_fedwatch import get_probabilities
data = get_probabilities("next")
print(data)
{
"effr": 3.64,
"current_target": "3.50%-3.75%",
"meetings": [{
"date": "2026-04-29",
"contract": "ZQJ6",
"probabilities": {
"3.50%-3.75%": 84.0, # No change
"3.75%-4.00%": 16.0 # 25bp hike
}
}]
}
Data sources — all official, all free:
- Settlement prices from CME Group
- EFFR & target rate from FRED (Federal Reserve Bank of St. Louis)
- FOMC schedule from the Federal Reserve
Installation
pip install cme-fedwatch
Requires Python 3.9+. Single dependency: curl_cffi.
Quick Start
from cme_fedwatch import get_probabilities, get_history
# Next FOMC meeting
get_probabilities("next")
# All upcoming meetings
get_probabilities()
# Specific meeting
get_probabilities("2026-10-28")
# How expectations changed over the past 10 business days
# Includes 1d, 1w, 1m, 3m, 6m, 1y lookback comparisons
get_history("next", days=10)
CLI
# Default: next meeting probabilities
$ cme-fedwatch
EFFR: 3.64% Target: 3.50%-3.75%
Meeting Contract 3.50%-3.75% 3.75%-4.00%
------------------------------------------------------
2026-04-29 ZQJ6 84.0% 16.0%
# All upcoming meetings
$ cme-fedwatch all
EFFR: 3.64% Target: 3.50%-3.75%
Meeting Contract 3.25%-3.50% 3.50%-3.75% 3.75%-4.00%
----------------------------------------------------------------------
2026-04-29 ZQJ6 0.0% 84.0% 16.0%
2026-06-17 ZQM6 0.0% 95.7% 4.3%
2026-07-29 ZQN6 0.0% 98.0% 2.0%
2026-09-16 ZQU6 0.0% 88.0% 12.0%
2026-10-28 ZQV6 0.0% 38.0% 62.0%
2026-12-09 ZQZ6 8.1% 91.9% 0.0%
...
# Historical: how expectations evolved
$ cme-fedwatch history --days 5
EFFR: 3.64% Target: 3.50%-3.75%
Meeting: 2026-04-29 Contract: ZQJ6
3.50%-3.75% 3.75%-4.00%
-----------------------------------------
2026-03-16 97.0% 3.0%
2026-03-17 97.0% 3.0%
2026-03-18 100.0% 0.0%
2026-03-19 93.0% 7.0%
2026-03-20 84.0% 16.0%
Lookback:
1d 84.0% 16.0%
1w ... ...
1m ... ...
All CLI Options
| Command | Description |
|---|---|
cme-fedwatch |
Next meeting probabilities |
cme-fedwatch all |
All upcoming meetings |
cme-fedwatch next |
Explicit next meeting |
cme-fedwatch history |
Probability changes over time |
cme-fedwatch history --days 20 |
Last 20 business days |
cme-fedwatch --meeting 2026-10-28 |
Specific meeting |
cme-fedwatch --json |
JSON output |
cme-fedwatch --csv |
CSV output |
cme-fedwatch --rate 4.33 |
Override EFFR |
API Reference
get_probabilities(meeting=None, trade_date=None, current_rate=None)
Get rate-change probabilities for FOMC meetings.
| Parameter | Type | Description |
|---|---|---|
meeting |
str |
None (all), "next", or "YYYY-MM-DD" |
trade_date |
date |
Settlement date (default: most recent) |
current_rate |
float |
Override EFFR (default: fetched from FRED) |
Returns a dict with effr, current_target, and meetings list.
get_history(meeting=None, days=10, current_rate=None)
Track how probabilities changed over time with standard lookback periods (1d, 1w, 1m, 3m, 6m, 1y).
| Parameter | Type | Description |
|---|---|---|
meeting |
str |
"next" (default) or "YYYY-MM-DD" |
days |
int |
Business days of daily history (default: 10) |
current_rate |
float |
Override EFFR |
Returns a dict with history (daily) and lookback (1d/1w/1m/3m/6m/1y snapshots).
How It Works
Data Pipeline
FRED API ──→ Current EFFR + Target Rate (official Fed data)
CME API ──→ 30-Day Fed Funds Futures settlements (product 305)
↓
FedWatch Calculation Engine
↓
Per-meeting rate-change probabilities
Calculation
For each FOMC meeting, we derive the market-implied post-meeting fed funds rate from the futures settlement price, then compute the probability of each 25bp rate outcome:
implied_rate = 100 - settlement_price
post_meeting_rate = (implied × D - pre_rate × (d-1)) / (D-d+1)
expected_moves = (post_rate - pre_rate) / 0.25
Where d = meeting day, D = days in month, pre_rate = previous month's implied rate.
Accuracy
Results are based on daily settlement prices (not live mid-prices), so they may differ from CME QuikStrike by a few percentage points — especially for meetings near the end of a month where the calculation is sensitive to small price differences. The directional signal (hike/cut/hold) is consistent.
Reading the Output
The column headers show possible target rate ranges. Compare them to the current target displayed at the top:
EFFR: 3.64% Target: 3.50%-3.75% ← Current rate
Meeting Contract 3.25%-3.50% 3.50%-3.75% 3.75%-4.00%
↑ 25bp CUT ↑ NO CHANGE ↑ 25bp HIKE
- Column = current target → probability of no change
- Column > current target → probability of rate hike(s)
- Column < current target → probability of rate cut(s)
Disclaimer
This project is not affiliated with CME Group, the Federal Reserve, or FRED. Data is sourced from publicly available APIs. Probabilities are calculated using an approximation of the CME FedWatch methodology and may differ from official CME QuikStrike values.
This tool is for informational and educational purposes only. It is not financial advice.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cme_fedwatch-0.1.0.tar.gz.
File metadata
- Download URL: cme_fedwatch-0.1.0.tar.gz
- Upload date:
- Size: 14.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
28dc59bafaf1269ce1cd210a5c1ca849ba033c5c346098dbcb6e1d3afc8e2209
|
|
| MD5 |
9cc2bed23488bd12a160d79a5331295d
|
|
| BLAKE2b-256 |
df0d4561409516c9a6ecf54e2364ea34efa892e8c20b25575d57e08c3ad57a8d
|
Provenance
The following attestation bundles were made for cme_fedwatch-0.1.0.tar.gz:
Publisher:
publish.yml on tjdwls101010/CME-FedWatch
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cme_fedwatch-0.1.0.tar.gz -
Subject digest:
28dc59bafaf1269ce1cd210a5c1ca849ba033c5c346098dbcb6e1d3afc8e2209 - Sigstore transparency entry: 1154538540
- Sigstore integration time:
-
Permalink:
tjdwls101010/CME-FedWatch@a78f4649e067d5546d4ed36458aaf371b054c27d -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/tjdwls101010
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a78f4649e067d5546d4ed36458aaf371b054c27d -
Trigger Event:
release
-
Statement type:
File details
Details for the file cme_fedwatch-0.1.0-py3-none-any.whl.
File metadata
- Download URL: cme_fedwatch-0.1.0-py3-none-any.whl
- Upload date:
- Size: 13.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a7a3b2bac9770db138aab67bbfd8030490d2edb45b63d40c6f5987e42a857500
|
|
| MD5 |
ff4209a24abbb7c1f4a22fc819530d19
|
|
| BLAKE2b-256 |
8044c0514be92ca838eeadcdc9bf84555b97c4edbb001e88e596652da89f7763
|
Provenance
The following attestation bundles were made for cme_fedwatch-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on tjdwls101010/CME-FedWatch
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cme_fedwatch-0.1.0-py3-none-any.whl -
Subject digest:
a7a3b2bac9770db138aab67bbfd8030490d2edb45b63d40c6f5987e42a857500 - Sigstore transparency entry: 1154538541
- Sigstore integration time:
-
Permalink:
tjdwls101010/CME-FedWatch@a78f4649e067d5546d4ed36458aaf371b054c27d -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/tjdwls101010
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a78f4649e067d5546d4ed36458aaf371b054c27d -
Trigger Event:
release
-
Statement type: