Interest rate expectations
⋅ 7 minute read
Contents
This morning, the top headline on the front page of my weekly newspaper was:
Bets rise on bumper rate cut by Fed
Investors have sharply increased their bets on half percentage point interest rate cut by the Federal reserve next week as the US central bank prepares to lower borrowing cost for the first time in more than four years. Traders in swaps markets are pricing in a 43 percent chance the Fed will opt for a bumper cut in a bid to prevent high rates damaging the economy. - FT Weekend (14.9.2024)
I often read news about expectations on how the Fed will set interest rates. I have a vague sense that it is related to the price of some interest rate related futures. I just asked myself if I wanted to look up what the market expectation is next week, where would I actually go to look? This detail is regularly glanced over in news articles. It turns out that the maths behind the expectation approximation is fairly simple. Let us work it out.
The Federal Funds Rate
Banks are required to put a certain percentage of their deposits into accounts at a Federal Reserve Bank. This is to maintain liquidity to cover depositor’s withdrawals in the short-term. This reserve requirement is loosely a percentage of the bank’s deposits at the end of the day averaged over a two-week period. If at the end of the day a bank has excess reserve balances it can lend it overnight to another bank that is undercapitalized. Banks do that a lot and negotiate an interest rate for this overnight loan. The weighted average of all these deals for day is the effective federal funds rate (EFFR).
The Fed’s federal funds rate (FFR) target range is set by the Federal Open Market Committee and is the desired range for the EFFR. While the Fed can’t directly impact the EFFR it can influence it via their own deposit interest rates or changes to the monetary supply. This tells us what today’s FFR range and EFFR are (both are published by the Fed). But how do we compute the market’s expectations on changes to the FFR range?
Federal Funds Futures
We can infer the expectations to FFR range changes at the next committee meeting by looking into how FFR future contracts are priced. Those are traded on the Chicago Mercantile Exchange (CME). You can view the monthly future quotes on the CME website .
These futures are used by banks and fixed-income portfolio managers to hedge against short-term interest rate fluctuations. The 30-day futures are monthly contracts that are settled on the last business day of every month. The contract price payable is the arithmetic mean of the daily EFFR during the contract month as reported by the Federal Reserve Bank of New York, subtracted from 100. For example if the average interest rate was 3.5% for a given month, then the contract price would be 100 - 3.5 = $96.5. Unfortunately, the minimum contract size is the price times 4167, which for this example would be $96.5 * 4167 = $416,796.5. A bit too high for my personal hedging needs.
What do the Federal Funds Future(s) hold?
Now that we know about the EFFR and Federal Funds futures, we can collect all ingredients to compute the expectations:
- The current FFR range was set in the July meeting to 5.25% - 5.5%.
- The dates of the next committee meetings are published here on federalsreserve.gov . The remaining meetings this year are scheduled for: 18.9.2024, 7.11.2024, 18.12.2024.
- The expected EFFR from the futures contracts for the month of the next committee meeting and the following month. For the remaining year they were on the 14.9.2024:
1import pandas as pd
1df = pd.DataFrame(
2 {
3 'MONTH' : ['09-2024', '10-2024', '11-2024', '12-2024'],
4 'PRICE' : [94.81, 95.03, 95.315, 95.58],
5 'MEETING': [18, None, 7, 18]
6 }
7).set_index('MONTH')
8display(df)
PRICE | MEETING | |
---|---|---|
MONTH | ||
09-2024 | 94.810 | 18.0 |
10-2024 | 95.030 | NaN |
11-2024 | 95.315 | 7.0 |
12-2024 | 95.580 | 18.0 |
The next month without a committee meeting is October. This means that October’s average EFFR can only be impacted by the September committee meeting. This means that the October future contract price of $95.03 is the expected average EFFR for October.
1r_october_avg = 100 - df.at['10-2024','PRICE']
2r_september_avg = 100 - df.at['09-2024','PRICE']
It is also the expected EFFR on the last day of September (and the first day of November).
1r_september_end = r_october_avg
We are interested in the implied difference in EFFR at the beginning and the end of the month. If there is a difference, then this would imply that the FED committee changed the FFR range.
Keep in mind that the contract price is the arithmetic mean of the realized EFFR on every day in September. Assume that the FED committee does lower the price on the 18th of the month, then we will have 18 days at a higher rate and 30-18 = 12 days at a lower rate. All of that is captured in the future price (the average EFFR) for September.
Therefore we can use:
\[ EFFR(\text{average of Sep}) = \frac{N}{30} EFFR(\text{start of Sep}) +\frac{30-N}{30} EFFR(\text{end of Sep}) \]
\[ \Leftrightarrow EFFR(\text{start of Sep}) = \left( EFFR(\text{average of Sep}) - \frac{30-N}{30}\cdot EFFR(\text{end of Sep}))\right) \cdot \frac{30}{N} \]
where \(N\) is the number of days before the committee meeting in September.
1days_month = 30
2days_before_meeting = df.at['09-2024','MEETING']
3days_after_meeting = days_month - days_before_meeting
4r_september_start = (r_september_avg - (days_after_meeting/days_month * r_september_end) ) * (days_month/days_before_meeting)
5print(f'The expected EFFR for the start of September is {r_september_start:.2f}%.')
The expected EFFR for the start of September is 5.34%.
Since today is the 14th of September, we can already look up the realized EFFR up until today. If today was the 25th of August, then we need to calculate the expected \(EFFR(\text{start of Sep})\) with the above formula.
1r_september_change = r_september_end - r_september_start
2print(f'Comparing the expected EFFR at beginning and end of month we have a delta of {r_september_change:.2f}.')
Comparing the expected EFFR at beginning and end of month we have a delta of -0.37.
The market’s expectation for September is that we will have 0.37bps lower EFFR at the end of the month. If we buy the futures contract today we will make money if the FED committee cuts the rate in such a way that the realized EFFR will decrease more than 0.37bps compared to the beginning of the month.
Traditionally, the committee changes the FFR range by 25bps (however 50 and 100 basis points change do occur, e.g. after 9/11, after the 2007-2008 housing market crash and during the COVID-19 pandemic).
However, we can see that the market prices in a 37bps lower EFFR. This means we can calculate the probability of a 25bps cut vs. a 50bps cut.
1print(f'The price implies {r_september_change / -0.25:.2f} x 25bps rate cuts.')
The price implies 1.47 x 25bps rate cuts.
1probability_of_25_bps_cut = 1 - (r_september_change/(-0.25) % 1)
2print(f'This implies a probability of {100 * probability_of_25_bps_cut:.2f}% that the commitee announces a 25bps rate cut.')
This implies a probability pf 53.33% that the commitee announces a 25bps rate cut.
1probability_of_50_bps_cut = (r_september_change/(-0.25) % 1)
2print(f'This implies a probability of {100 * probability_of_50_bps_cut:.2f}% that the commitee announces a 50bps rate cut.')
This implies a probability pf 46.67% that the commitee announces a 50bps rate cut.
The calculation confirms the newspaper article’s claim that the rate decision is priced as a coin flip between a 25bps and a 50bps rate cut.
Update 18.9.2024: The FOMC decided on a 50bps cut to a target range of 4.75% - 5.0%.
What about Europe?
If you are interested in the expectations for the interest rates set by the Bank of England, you can use One Month SONIA Index Futures . Similarly, for the ECB interest rates expectations you can check ECB Dated ESTR Futures .
Jupyter Notebook
You can find the jupyter notebook for this post here .
If you have any thoughts, questions, or feedback about this post, I would love to hear it. Please reach out to me via email.