Historical FED Policy Rates vs Expectations¶
© 2026 Jim Domeij & Marek Ozana
This chart reconstructs how expectations for the Fed funds rate evolved over time. Each line is a year-end snapshot (AS_OF_DATE) of Bloomberg’s median economist path for future policy rates, shown alongside realized settings. Solid segments indicate historical (actual) policy rates, while dashed segments show the forecast that was in place on that snapshot date.
Out[1]:
In [ ]:
Copied!
# Get historical and forecast policy rates for FED and other central banks
import polars as pl
from polars_bloomberg import BQuery
with BQuery() as bq:
lst = []
for year in range(2014, 2026):
df = bq.bql(
f"""
let(#policy_rate = policy_rate(pr=range(2014Q4, 2027Q2),
pt=Q, act_est_data=AE);)
get(#policy_rate)
for(['US'])
with(dates='{year:d}-12-31')
preferences(
dropCols=[
'TICKER',
'REVISION_DATE',
'RATE_TYPE',
'REPORTED_DATE',
'CONCEPT',
'ECO_SOURCE',
'ACT_EST_SOURCE',
'PERIOD',
'PERIOD_END_DATE',
'SEASONALITY'
]
)
"""
).combine()
lst.append(df)
df_tot = pl.concat(lst)
df_tot.head()
# Get historical and forecast policy rates for FED and other central banks
import polars as pl
from polars_bloomberg import BQuery
with BQuery() as bq:
lst = []
for year in range(2014, 2026):
df = bq.bql(
f"""
let(#policy_rate = policy_rate(pr=range(2014Q4, 2027Q2),
pt=Q, act_est_data=AE);)
get(#policy_rate)
for(['US'])
with(dates='{year:d}-12-31')
preferences(
dropCols=[
'TICKER',
'REVISION_DATE',
'RATE_TYPE',
'REPORTED_DATE',
'CONCEPT',
'ECO_SOURCE',
'ACT_EST_SOURCE',
'PERIOD',
'PERIOD_END_DATE',
'SEASONALITY'
]
)
"""
).combine()
lst.append(df)
df_tot = pl.concat(lst)
df_tot.head()
Out[ ]:
shape: (5, 5)
| ID | #policy_rate | PERIOD_REFERENCE_DATE | AS_OF_DATE | ACT_EST_DATA |
|---|---|---|---|---|
| str | f64 | date | date | str |
| "US" | 0.25 | 2014-12-31 | 2014-12-31 | "A" |
| "US" | 0.25 | 2015-03-31 | 2014-12-31 | "E" |
| "US" | 0.4 | 2015-06-30 | 2014-12-31 | "E" |
| "US" | 0.650001 | 2015-09-30 | 2014-12-31 | "E" |
| "US" | 0.950001 | 2015-12-31 | 2014-12-31 | "E" |