Is the Fed Adding Liquidity?
What M2 and the Fed’s balance sheet actually tell us
Bill Igoe · RainbowStats™ · Data reviewed August 31, 2026
M2 is rising. The Federal Reserve is buying Treasury bills. It is tempting to combine those observations into a single conclusion: the Fed is opening the liquidity taps.
There is evidence of an expansion, but the word liquidity needs more precision. Money held by households and businesses, reserves held by banks, and the financing available in securities markets are related. They are not interchangeable.
Our RainbowStats analysis illustrates the problem. Comparing monthly averages from January to July 2026, broad money, Fed assets, bank reserves, and a constructed net liquidity proxy all increased. Comparing July 2025 with July 2026, however, M2 increased while reserves and the proxy declined. Both statements are true.
The useful question is therefore: which liquidity, supplied through which mechanism, measured over which period?
First, identify what the chart measures
| Measure | What it tells us | What it does not establish |
|---|---|---|
M2 — WM2NS or M2SL |
A broad measure of currency, deposits, and retail money-market fund balances | How much of a change was caused by a particular Fed action |
Fed total assets — WALCL |
The size of the Federal Reserve’s asset holdings | The amount immediately available for household spending |
Reserve balances — WRESBAL |
Balances depository institutions hold at the Fed | The volume of new loans banks will make |
Overnight reverse repos — RRPONTSYD |
Use of the Fed’s overnight Treasury reverse-repo facility | All reverse-repo liabilities or all money-market liquidity |
Treasury General Account — WDTGAL |
Treasury cash held at the Fed | A discretionary monetary-policy decision |
| Net liquidity proxy | Fed assets less ON RRP and Treasury cash | An official, comprehensive measure of money or market liquidity |
These distinctions follow the definitions in the Fed’s H.6 description, reserve-balance series, and ON RRP documentation. Market liquidity—how readily a security can trade without moving its price—is a further question that these balance totals do not directly answer.
M2: the stock is rising, but look at the rate
WM2NS provides weekly M2 observations in billions of dollars, without seasonal adjustment. The observations are released in monthly updates; “weekly” does not mean that a fresh release arrives every week. FRED: WM2NS
The top panel shows the large pandemic-era increase, the subsequent retreat, and renewed growth. The lower panel puts the recent rise in perspective: it is substantially slower than the peak growth in 2020–21. A record nominal level is not, by itself, evidence of an extraordinary current injection.
The seasonally adjusted monthly series provides a useful independent check. In the August 25 H.6 release, M2 rose from $22.413 trillion in January to $23.218 trillion in July, an increase of 3.6%. Its July-to-July increase was 5.4%. Growth is therefore not merely an artifact of one unadjusted weekly observation. These official monthly values are distinct from the simple weekly averages used in our charts. H.6 release
M2 nevertheless cannot identify the source of that growth. Commercial banks create deposits when they extend loans; repayment can extinguish deposits. A new $100 loan typically creates a $100 deposit for the borrower, without requiring a simultaneous $100 purchase by the Fed. Lending remains constrained by profitability, credit risk, capital, funding, and monetary conditions. Bank of England: money creation
That makes M2 informative about broad money, but insufficient for attributing its increase to the central bank. These are also nominal balances: they do not measure purchasing power after inflation.
Fed assets and bank reserves are different sides of the balance sheet
Fed securities and loans are assets. Bank reserves are liabilities of the Fed and assets of the banks holding them. A Fed purchase generally credits reserve balances, all else equal, but Treasury transactions and changes in other liabilities also affect the reserve total. Federal Reserve liabilities
The distinction also matters when discussing lending. Customers spend bank deposits. Banks use reserves to settle payments with other banks. A larger reserve balance does not specify which borrower receives credit, whether a bank finds a loan attractive, or whether a customer wants to borrow.
The charts show why M2 should not be used as a substitute for the Fed’s balance sheet. Broad money can rise while central-bank assets change relatively little, and reserve balances can follow a different path again.
The Fed really has been buying—but composition matters
There is a factual basis for discussing greater Fed support for funding markets. The December 2025 implementation directive authorized purchases of Treasury bills, and if needed other short Treasury securities, to maintain ample reserves. December implementation note
Those purchases should be distinguished from reinvestments. Replacing a maturing or repaid asset can change the portfolio’s composition without increasing its total size. The New York Fed’s operating framework separately identifies reserve-management purchases and reinvestment of agency-security principal into Treasury bills. Purchase FAQs
Our calculation finds a $259.1 billion increase in average Treasury holdings between January and July, against a $90.2 billion decline in mortgage-backed securities. Total assets increased by $155.9 billion. The underlying series are TREAST, WSHOMCB, and WALCL.
Calling every purchase “QE” loses information about maturity, purpose, and scale. The New York Fed described reserve-management purchases as an implementation measure rather than a change in the underlying policy stance. That distinction does not imply the purchases have no market effects. John Williams’s explanation
Indeed, an August 2026 Fed staff note explains how bill purchases can both supply reserves and reduce the bills available to money-market funds, encouraging repo lending and easing pressure on repo rates. The route through market participants matters, not just the total dollars purchased. Fed staff analysis
Treasury cash and reverse repos complicate the picture
When Treasury spends from its General Account, funds generally move into banks’ reserve accounts and recipients’ deposits. Tax receipts moving into Treasury’s account work in the opposite direction, all else equal. Reserve availability can therefore change without a new Fed asset purchase. Treasury-account mechanics
ON RRP use also reflects choices by eligible counterparties, including money-market funds. Cash can move between that facility, Treasury bills, and private repo lending. A decline in ON RRP is not automatically new QE or a dollar-for-dollar increase in bank reserves; the destination and transaction counterparties matter. The Fed staff note discusses this reallocation explicitly. Repo-market analysis
These mechanisms motivate the indicator used here:
Net liquidity proxy = Fed total assets − overnight reverse repos − Treasury General Account.
The proxy rose by $171.9 billion between the January and July monthly averages. Most came from higher Fed assets; lower Treasury cash and ON RRP added another $16.0 billion.
But the proxy is not bank reserves. It does not subtract currency, foreign-official reverse repos, other deposits, and other liability or capital items. Nor does it measure dealer capacity, collateral availability, bid–ask spreads, or the willingness to extend credit. Its $5.905 trillion July level must not be described as that much cash waiting to enter the stock market. The omissions are visible in the Fed’s balance-sheet accounts.
The time horizon changes the conclusion
For the main comparison, we use arithmetic means of weekly observations within the same calendar months. All four chart series are unadjusted. This avoids comparing January M2 with one late-August reserve observation while calling both changes “year to date.”
| Monthly mean | January 2026, $bn | July 2026, $bn | January–July change | July 2025–July 2026 change |
|---|---|---|---|---|
| M2 | 22,483.95 | 23,153.73 | +2.98% | +5.45% |
| Fed assets | 6,581.86 | 6,737.75 | +2.37% | +1.22% |
| Bank reserves | 2,975.63 | 3,051.05 | +2.53% | −8.46% |
| Net liquidity proxy | 5,732.67 | 5,904.58 | +3.00% | −3.29% |
Calculations from the frozen RainbowStats exports. These simple averages of reported weekly observations need not equal official monthly averages.
The January comparison is consistent with renewed balance-sheet expansion and a recovery in reserves. The longer comparison shows that this recovery did not restore reserve balances to the previous July’s level. M2’s growth cannot be read as an equivalent increase in central-bank reserves.
Seasonality remains relevant, especially between January and July. Comparing the same month a year apart reduces that problem, without identifying causation. The separate adjusted-M2 check confirms broad-money growth, but does not remove seasonality from the other series.
The latest weekly reading is a useful update, not a replacement for this table. By August 26, reserve balances were $2.925 trillion and the proxy was $5.771 trillion, below their July monthly means. Those observations do not yet provide a complete August comparison with M2. WRESBAL, WALCL, WDTGAL, ON RRP
What can we conclude?
Broad money is expanding. The Fed has also been purchasing securities to support reserve availability. Neither observation establishes a uniform flood of financing into every market.
The next questions depend on the claim. For funding-market conditions, examine repo spreads and facility use. For credit availability, examine lending, underwriting, and borrower demand. For purchasing power, consider prices and income alongside nominal money. An M2 chart cannot answer all three.
Monetary policy influences financing conditions and can affect allocation through the assets the Fed chooses to hold. It does not dictate each subsequent private investment. Housing, business equipment, securities, and working capital have different risks, expected returns, and financing needs. Understanding those choices requires more than a single aggregate labeled “liquidity.”
Reproduce and inspect the analysis
The complete RainbowStats script loads the series, constructs the proxy, calculates monthly means and twelve-month M2 growth, and produces a nine-chart slideshow. Open and reproduce the saved RainbowStats analysis. The fixed July cutoff keeps the comparison consistent.
The publication charts regroup those outputs for readability. The accompanying methodology notes, frozen data, and rebuild-charts.py preserve the exact calculations and image files. The purpose is to make each definition and comparison inspectable, not to turn a convenient proxy into an unexplained forecasting rule.
Complete RainbowStats replication script
Copy this script into the RainbowStats editor. No separate script file is required to read it.
M2_Weekly=SERIES_BETWEEN(WM2NS,20190101,20260731);
M2_Monthly=SET_NAME(AGGREGATE_TO_PERIOD(M2_Weekly,MONTHLY,MEAN),"M2 NSA");
Fed_Assets=SERIES_BETWEEN(WALCL,20190101,20260731);
Fed_Reserves=SERIES_BETWEEN(WRESBAL,20190101,20260731);
Fed_TGA=SERIES_BETWEEN(WDTGAL,20190101,20260731);
Fed_Net=SERIES_BETWEEN(WALCL-RRPONTSYD-WDTGAL,20190101,20260731);
Assets_Monthly=SET_NAME(AGGREGATE_TO_PERIOD(Fed_Assets,MONTHLY,MEAN),"Fed Assets");
Reserves_Monthly=SET_NAME(AGGREGATE_TO_PERIOD(Fed_Reserves,MONTHLY,MEAN),"Bank Reserves");
Net_Monthly=SET_NAME(AGGREGATE_TO_PERIOD(Fed_Net,MONTHLY,MEAN),"Net Liquidity Proxy");
TGA_Monthly=SET_NAME(AGGREGATE_TO_PERIOD(Fed_TGA,MONTHLY,MEAN),"Treasury General Account");
RRP_Monthly=SET_NAME(AGGREGATE_TO_PERIOD(Fed_Assets-Fed_TGA-Fed_Net,MONTHLY,MEAN),"ON RRP on Fed Dates");
Treasuries_Monthly=SET_NAME(AGGREGATE_TO_PERIOD(SERIES_BETWEEN(TREAST,20190101,20260731),MONTHLY,MEAN),"Fed Treasuries");
MBS_Monthly=SET_NAME(AGGREGATE_TO_PERIOD(SERIES_BETWEEN(WSHOMCB,20190101,20260731),MONTHLY,MEAN),"Fed MBS");
M2_Growth=SET_NAME(100*(M2_Monthly/LAG(M2_Monthly,12)-1),"M2 12-Month Growth");
c1=SET_TITLE(LINE_CHART(M2_Weekly),"M2: Weekly Unadjusted Level");
c2=SET_TITLE(LINE_CHART(M2_Growth),"M2: Percent Change from 12 Months Earlier");
c3=SET_TITLE(LINE_CHART(Assets_Monthly),"Fed Total Assets: Monthly Mean");
c4=SET_TITLE(LINE_CHART(Reserves_Monthly),"Bank Reserves: Monthly Mean");
c5=SET_TITLE(LINE_CHART(Net_Monthly),"Net Liquidity Proxy: Monthly Mean");
c6=SET_TITLE(LINE_CHART(LIST(Treasuries_Monthly,MBS_Monthly)),"Fed Treasury and MBS Holdings");
c7=SET_TITLE(LINE_CHART(LIST(TGA_Monthly,RRP_Monthly)),"Treasury Cash and ON RRP");
m26=SERIES_BETWEEN(M2_Monthly,20260101,20260731);
a26=SERIES_BETWEEN(Assets_Monthly,20260101,20260731);
b26=SERIES_BETWEEN(Reserves_Monthly,20260101,20260731);
n26=SERIES_BETWEEN(Net_Monthly,20260101,20260731);
c8=SET_TITLE(LINE_CHART(INDEX_100(LIST(m26,a26,b26,n26))),"January 2026 = 100: Through July");
m25=SERIES_BETWEEN(M2_Monthly,20250701,20260731);
a25=SERIES_BETWEEN(Assets_Monthly,20250701,20260731);
b25=SERIES_BETWEEN(Reserves_Monthly,20250701,20260731);
n25=SERIES_BETWEEN(Net_Monthly,20250701,20260731);
c9=SET_TITLE(LINE_CHART(INDEX_100(LIST(m25,a25,b25,n25))),"July 2025 = 100: Through July 2026");
SLIDESHOW(c1,c2,c3,c4,c5,c6,c7,c8,c9);
Data and replication notes
Data and replication notes
Snapshot date: August 31, 2026. Main chart window: January 2019–July 2026. All percentage changes are simple percentage changes, not annualized, unless described as twelve-month growth.
Series, units, and observation conventions
| Code | Source | Native units | Convention |
|---|---|---|---|
| WM2NS | Federal Reserve H.6, via FRED / RainbowStats | Billions of dollars | Unadjusted weekly observations, week ending Monday; released monthly |
| WALCL | Federal Reserve H.4.1, via FRED / RainbowStats | Millions of dollars | Wednesday total assets |
| TREAST | Federal Reserve H.4.1, via FRED / RainbowStats | Millions of dollars | Wednesday Treasury holdings |
| WSHOMCB | Federal Reserve H.4.1, via FRED / RainbowStats | Millions of dollars | Wednesday MBS holdings |
| WRESBAL | Federal Reserve H.4.1, via FRED / RainbowStats | Millions of dollars | Weekly average reserve balances; week ending Wednesday |
| WDTGAL | Federal Reserve H.4.1, via FRED / RainbowStats | Millions of dollars | Wednesday Treasury General Account |
| RRPONTSYD | Federal Reserve Bank of New York, via FRED / RainbowStats | Billions of dollars | Daily overnight Treasury reverse repos |
| M2SL | Federal Reserve H.6 / FRED | Billions of dollars | Official seasonally adjusted monthly M2; narrative cross-check only |
- Monthly calculation. Each observation is assigned to the calendar month of its reported date, then averaged with equal weight. This is the native
AGGREGATE_TO_PERIOD(series,MONTHLY,MEAN)result. No daily weighting is implied. Monthly means of Wednesday stock observations and weekly-average reserve observations have different within-month sampling conventions. They are comparable calendar windows, not identical measurement schedules. They need not match official monthly figures. - Not TOMONTHLY. In the tested deployment,
TOMONTHLYselected each month's last available observation. It was not used for these means. - The proxy.
WALCL-RRPONTSYD-WDTGALis evaluated by RainbowStats before monthly averaging. The frozen export preserves the engine's date alignment. Daily ON RRP is aligned to the weekly Fed observation dates; where the source lacks a matching observation, the exported result may reflect the engine's alignment behavior. Do not treat every implied date as an independently observed ON RRP transaction. The complete historical audit inputs are included. - Unit conversion. RainbowStats handles the native billion/million conversion in that subtraction. This was numerically verified: August 26 equals 6,730,912 − 702 − 959,435 = 5,770,775 million dollars. Do not add a factor of 1,000 inside the RainbowStats expression. In external software, convert explicit raw units: WALCL − 1,000 × RRPONTSYD − WDTGAL. Python does not perform RainbowStats' automatic unit reconciliation.
- ON RRP contributions. The date-aligned amount used in the formula is recovered as assets − TGA − proxy, all in millions. Its monthly change is used for the contribution chart. A monthly average of all daily ON RRP observations would use a different sampling schedule and would not be the same decomposition.
- Growth. M2 growth is 100 × (monthly mean / monthly mean twelve observations earlier − 1). The two-horizon chart compares July 2026 with January 2026 and July 2025. All four measures in these charts are not seasonally adjusted. The year-over-year comparison reduces seasonal-composition concerns but does not eliminate every calendar effect.
- Holdings and purchases. Treasury, MBS, and residual asset changes add to total asset changes. Holdings changes can include repayments, valuation/accounting effects, and other changes. They are not gross purchase amounts. The other-assets series is a residual, not an independently named H.4.1 line.
- Validation. All 364 main monthly values (91 months × 4 series) were checked against native RainbowStats MEAN output. The asset and proxy decompositions were checked arithmetically. The final 32-equation, nine-panel RainbowStats slideshow executed successfully. Publication graphics use Matplotlib and package data; the live slideshow contains the same underlying series but uses RainbowStats' own formatting and panel organization.
Revised M2 data and the official cross-check
The Fed changed IRA/Keogh netting on July 28, 2026. The deductions moved from individual components to the total M2 calculation. Unadjusted total M2 was unchanged by this methodology change; adjusted M2 received small revisions. Do not interpret the higher component totals as new money, or assume the change raised unadjusted total M2. See the H.6 technical Q&A.
During preparation, the RainbowStats M2SL return retained older January–March 2026 values. Its January value was 22,420.1; the latest H.6 release reports 22,413.4. February was 22,620.3 versus 22,598.9, and March was 22,676.1 versus 22,640.4. We did not overwrite or change server data. Publication charts use WM2NS, not that cached M2SL history. The narrative adjusted-M2 check uses the current official H.6 values saved in data/official_h6_crosscheck.csv: January 22,413.4, July 23,218.0, and July 2025 22,025.5. The resulting changes are 3.5898% and 5.4142%. A cached or subsequently revised live run may differ slightly.
Scope and limits
The net liquidity proxy is an analyst construction, not an official aggregate. It omits currency, foreign-official reverse repos, other deposits, and other liabilities/capital. WRESBAL uses a weekly-average convention while the proxy uses Wednesday asset/TGA stocks; do not use their difference as a precise point-in-time balance-sheet reconciliation. Institutional money-market funds are not part of M2's retail-MMF component. No causal regression, trading rule, forecast, or claim about real purchasing power is estimated here. The post's conclusions are descriptive.
Files and exact reproduction
rainbowstats-script.txt: complete native script, fixed through July 2026. Run in a fresh editor session. Its nine panels correspond to the underlying data illustrated in five publication figures.data/rainbowstats_snapshot.json: native-unit source observations and the exported proxy, including later weekly observations for the separate August update.data/rainbowstats_monthly_check.json: native RainbowStats MEAN values used as independent aggregation checks.data/monthly_means.csv: all publication monthly values in native units; theWM2NScolumn is billions, most others millions.data/weekly_derived.csv: weekly aligned proxy inputs and other-assets residual, in millions.data/summary.json: unrounded endpoint calculations and contribution values.rebuild-charts.py: run with Python, pandas, NumPy, and Matplotlib to recreate every PNG/SVG and derived data table from the frozen snapshot, without network access.
Source snapshots freeze this publication's calculations. Live sources can revise history. The script's dates can be advanced after every input has a complete comparable month. H41RESPPALDKNWW (historical BTFP) and SWPT (weekly swap balances) are omitted from the main script because they are not needed for the formula; adding those assets again would double-count amounts already included in WALCL.