Oil supply, demand and risk shocks
Last updated 25 October 2026 · Data to August 2026 · Notes on the data · Report a problem
Ready (2018) showed that a month’s change in the oil price can be split into three parts using only asset prices: a risk shock, the part explained by an unexpected move in the VIX; a demand shock, the part explained by the return on oil producers’ shares once that VIX move is taken out; and a supply shock, the rest. Producers gain when demand rises but are roughly hedged against supply disruptions, which is what makes their shares a useful control. The three shocks are uncorrelated and add up to the oil price change exactly.
The paper’s sample ends in 2011 and its inputs are Datastream and NYMEX series. Here the decomposition is rebuilt from free sources, checked against the paper over its own sample, and extended to August 2026.
- Cumulative since 1986: supply shock
- NBER recession
Sources: WTI spot price and the VIX from FRED; oil producer returns from Kenneth French’s data library; decomposition as in Ready (2018).
Hover over the chart, or select it and use the arrow keys, to read monthly values.
Show the last 24 months as a table
| Month | WTI, $ at month end | Oil price change, % | Supply shock | Demand shock | Risk shock | VIX innovation |
|---|---|---|---|---|---|---|
| Aug 2026 | 87.03 | +1.0 | −4.2 | +4.2 | +1.0 | −0.09 |
| Jul 2026 | 86.16 | +20.0 | +7.9 | +11.7 | +0.4 | −0.04 |
| Jun 2026 | 70.56 | −25.6 | −19.3 | −6.2 | −0.1 | +0.01 |
| May 2026 | 91.16 | −17.5 | −10.1 | −9.3 | +1.9 | −0.18 |
| Apr 2026 | 108.64 | +5.5 | +11.4 | −9.1 | +3.2 | −0.31 |
| Mar 2026 | 102.86 | +42.9 | +31.1 | +14.7 | −2.9 | +0.28 |
| Feb 2026 | 66.96 | +3.7 | −3.9 | +9.2 | −1.5 | +0.15 |
| Jan 2026 | 64.50 | +11.9 | +0.0 | +13.0 | −1.1 | +0.10 |
| Dec 2025 | 57.26 | −2.3 | −0.2 | −3.4 | +1.2 | −0.12 |
| Nov 2025 | 58.58 | −5.3 | −6.5 | +0.6 | +0.6 | −0.06 |
| Oct 2025 | 61.75 | −2.3 | −0.9 | −0.8 | −0.6 | +0.06 |
| Sep 2025 | 63.17 | −1.9 | −0.4 | −1.4 | −0.1 | +0.01 |
| Aug 2025 | 64.36 | −8.9 | −11.7 | +1.7 | +1.1 | −0.11 |
| Jul 2025 | 70.36 | +5.9 | +3.6 | +1.8 | +0.5 | −0.05 |
| Jun 2025 | 66.30 | +7.6 | +4.1 | +1.9 | +1.6 | −0.15 |
| May 2025 | 61.46 | +3.2 | +3.0 | −2.2 | +2.3 | −0.22 |
| Apr 2025 | 59.55 | −18.8 | −3.9 | −13.3 | −1.7 | +0.16 |
| Mar 2025 | 71.87 | +2.7 | −0.7 | +5.1 | −1.8 | +0.17 |
| Feb 2025 | 69.97 | −4.0 | −6.8 | +4.4 | −1.6 | +0.16 |
| Jan 2025 | 72.84 | +0.6 | +0.1 | +0.1 | +0.4 | −0.04 |
| Dec 2024 | 72.44 | +5.9 | +15.0 | −7.9 | −1.2 | +0.12 |
| Nov 2024 | 68.26 | −1.9 | −5.5 | −1.1 | +4.7 | −0.44 |
| Oct 2024 | 69.58 | +1.2 | +1.3 | +3.3 | −3.5 | +0.33 |
| Sep 2024 | 68.75 | −8.1 | −4.3 | −3.0 | −0.8 | +0.07 |
Shocks in log points (percentage points of the log change); the three add up to the oil price change. The VIX innovation is the residual of an ARMA(1,1) for the log VIX.
Download the data and code
- oil_shocks_monthly.csv488 months · 62 KBOne row per month: WTI price, oil price change, VIX innovation, the three shocks, their cumulative sums, realtime versions of the shocks and an NBER recession flag.Download CSV
- update_oilshocks.py10 KBPython script that downloads the inputs and rebuilds the file. Needs numpy, pandas and scipy.Download Python
- update_oilshocks.m10 KBMATLAB script that does the same. No toolboxes needed.Download MATLAB
- replicate_ready.py3 KBRebuilds the shocks over the paper’s 1986 to 2011 sample and prints them beside the paper’s Tables III and IV.Download
Both scripts download the inputs when they run and estimate the ARMA(1,1) by the same conditional least squares, so they give the same output to the six significant figures written in the file. The whole series is re-estimated each time: see the notes below.
Read the code
Loading the script…How the shocks are identified
Three monthly series go in: the log change in the oil price, Δp; the log return on an index of oil producers, Rprod; and the innovation to the VIX, ξVIX, the residual of an ARMA(1,1) fitted to the log of the index. Ready (2018, Section 3.1) writes the observed vector X = (Δp, Rprod, ξVIX)′ as X = AZ, where Z = (s, d, v)′ holds the supply, demand and risk shocks and
A = 1110a22a2300a33
The first row says the three shocks add up to the oil price change. The zeros say that producer returns do not respond to supply shocks, and that the VIX innovation responds only to the risk shock. The remaining three elements of A are chosen so that A−1ΣX(A−1)′ is diagonal, where ΣX is the covariance matrix of X: the shocks are uncorrelated by construction. This is the usual recursive identification of a structural VAR, renormalised so that the shocks are measured in units of the oil price rather than with unit variance. In regression terms, v is the fitted value of Δp on ξVIX; d is the fitted value of Δp on the part of Rprod that is orthogonal to ξVIX; and s is the residual.
Two details are choices made here. The demand and risk shocks are given a mean of zero, so the average drift in the oil price, 0.3% a month since 1986, sits in the supply shock; the covariances, and so A, are the same either way. And the ARMA and ΣX are estimated over the whole sample, as in the paper, so every value in the file is re-estimated when a month is added. The _realtime columns hold the shocks estimated only on data up to each month, from a first window of 120 months; they never change once published, and their correlations with the full-sample shocks are 0.99 for supply, 0.99 for demand and 0.72 for the much smaller risk shock.
Replication
Before extending anything, the decomposition was rebuilt over the paper’s own sample, January 1986 to December 2011, from the public inputs below. The paper’s summary statistics (Table III, Panel B) and its regression of the US market return on the shocks (Table IV, Panel A) are shown beside the same figures computed here. replicate_ready.py repeats the comparison.
| 1986 to 2011 | Paper | Here |
|---|---|---|
| Annualised volatility of oil price changes | 0.34 | 0.34 |
| Annualised volatility of the supply shock | 0.30 | 0.31 |
| Annualised volatility of the demand shock | 0.15 | 0.14 |
| Annualised volatility of the risk shock | 0.04 | 0.03 |
| Share of variance: supply / demand / risk | 78 / 21 / 1% | 81 / 18 / 1% |
| Correlation of each shock with the oil price change | 0.88 / 0.45 / 0.11 | 0.90 / 0.42 / 0.10 |
| Market return on the demand shock, slope (s.e.) | 0.370 (0.046) | 0.418 (0.051) |
| Market return on the supply shock, slope (s.e.) | −0.102 (0.021) | −0.097 (0.022) |
| Market return on the VIX innovation, slope (s.e.) | −0.184 (0.012) | −0.184 (0.011) |
| R² of that regression | 0.604 | 0.613 |
| Univariate R²: demand / supply / VIX innovation | 0.124 / 0.036 / 0.444 | 0.135 / 0.034 / 0.445 |
| Market return on the raw oil price change, slope (s.e.) | 0.031 (0.027) | 0.026 (0.038) |
Market return: the CRSP value-weighted index in the paper, Fama and French’s market return (Mkt-RF plus RF) here; both in logs with White standard errors. The paper’s regressions use 315 months, the rebuild 311 (February 1986 to December 2011).
The paper’s central result survives the change of inputs: on its own the oil price change has no relation to the stock market (R² of 0.3%), but once it is split, demand shocks are strongly positive for returns and supply shocks strongly negative. The industry pattern in the paper’s Table V also holds with the Fama–French ten industries: consumer durables, retail, non-durables and the “other” group load most negatively on supply shocks, energy not at all, and every industry loads positively on demand shocks.
Inputs and what changed
| Series | In the paper | Here | Effect |
|---|---|---|---|
| Oil price change | One-month log return on the second-nearest NYMEX WTI contract (Datastream) | Log change in the month-end WTI spot price at Cushing (FRED, DCOILWTICO) | The EIA stopped publishing NYMEX contract prices on 5 April 2024. Over February 1986 to March 2024, shocks built from the EIA’s contract-2 series and from the spot price have correlations of 0.97 (supply) and 1.00 (demand and risk). The paper’s own quarterly analysis also uses the spot WTI (with a stock-volatility series in place of the VIX) and reports shock correlations of 0.99 and 0.93 with its main series. |
| Oil producer return | Datastream World Integrated Oil & Gas Producers index | Fama–French 49-industry “Oil” portfolio, value-weighted, from Kenneth French’s data library (US-listed firms) | The paper reports (footnote 6) that other producer indices give similar results. The slope on the demand shock is somewhat larger here, 0.42 against 0.37. |
| VIX | CBOE VIX, “published back to 1986” | CBOE VIX at month end (FRED, VIXCLS) from January 1990; the older VXO (VXOCLS) for 1986 to 1989, the years the VIX itself does not cover | The two indices move together; the ARMA is fitted to the spliced log series. The innovation’s correlation with the market return is −0.67 in the paper and here; with producer returns it is −0.45 in the paper and −0.42 here. |
| VIX innovation | Residual of an ARMA(1,1) for the log VIX | The same, estimated by conditional least squares in both scripts | Correlation of 0.99999 with exact maximum likelihood residuals. |
What the shocks say about past episodes
| Episode | Oil price change | Supply | Demand | Risk |
|---|---|---|---|---|
| Gulf War, August to October 1990 | +54 | +61 | 0 | −7 |
| Financial crisis, July to December 2008 | −114 | −69 | −32 | −14 |
| Shale glut, July 2014 to January 2015 | −80 | −49 | −26 | −5 |
| Covid, January to April 2020 | −116 | −76 | −24 | −15 |
| Reopening, May to June 2020 | +71 | +73 | −3 | +1 |
| January to June 2022 | +36 | +11 | +33 | −8 |
| March 2026 | +43 | +31 | +15 | −3 |
Sums of the monthly log changes over each episode, in log points. The Gulf War is the paper’s own test case (its Section 3.3.a): a supply shock that oil producers’ shares shrugged off while the market fell.
Before you use it
- Everything is re-estimated each month. The ARMA(1,1) and the covariance matrix use the whole sample, as in the paper, so adding a month changes every earlier value a little. Use the
_realtimecolumns if you need shocks that were knowable at the time, and note that they start in December 1995, the end of the first 120-month window. - Timing. A shock for month t uses the oil price, producer return and VIX at the end of t. The producer return comes from Kenneth French’s library, which is updated with a lag of a month or two, so the latest month is published later than the oil price itself.
- Spot, not futures. The oil price change is the month-end spot WTI. It is more volatile than the futures return the paper used, and in April 2020 it reflects the Cushing storage squeeze (the month-end price stayed positive; the negative print was on 20 April).
- US producers, not world. The producer index covers US-listed oil firms, which include the big integrated majors but not state producers, as the paper’s index also did not.
- Means. The demand and risk shocks average zero; the supply shock carries the oil price’s average drift. If you want all three demeaned, subtract the mean of
s. - Units. Log changes as decimals in the CSV (0.01 = 1%); log points × 100 in the chart and the tables on this page.
- Data terms. The file holds the oil price (public, from the EIA via FRED), the VIX innovation and the shocks. The producer returns themselves are not redistributed; the scripts download them from Kenneth French’s library when they run.
Why it matters
Oil price changes and stock returns are almost uncorrelated, which has long looked like a puzzle given how much oil matters for the economy. Ready (2018) resolves it: supply-driven rises in the oil price are bad for stocks and for output, demand-driven rises are good for both, and the two cancel in the raw data. Because the shocks are identified from prices rather than from production data or news events, they are available monthly and in real time, which makes them usable in forecasting and asset-pricing work that quarterly SVAR shocks cannot support.
How to cite
If you use the shocks, please cite the paper that defined the method. A reference for this page is included in case it helps.
@article{Ready2018,
author = {Ready, Robert C.},
title = {Oil prices and the stock market},
journal = {Review of Finance},
volume = {22},
number = {1},
pages = {155--176},
year = {2018},
doi = {10.1093/rof/rfw071}
}
@misc{PybisOilShocks,
author = {Pybis, Sam},
title = {Oil supply, demand and risk shocks after {Ready} (2018), monthly, 1986 to August 2026},
year = {2026},
howpublished = {\url{https://sampybis.co.uk/updated-data/oil-shocks.html}},
note = {Updated 25 October 2026}
}Related research
- Forecasting Oil Prices at Month End: Which Predictors Work? and The Predictive Role of Extreme Weather Events: Evidence from the U.S. Coal Sector. My working papers on oil and energy return predictability, where shocks like these are a natural conditioning variable.
- Can financial uncertainty forecast aggregate stock market returns?. The risk shock here is the oil-price counterpart of the uncertainty channel in that paper (Financial Markets, Institutions & Instruments, 2024).
More updated datasets: Job openings-to-employment ratio · Large public-company bankruptcies · Technical trend indicators · all. Looking for something else? My guide to data for empirical finance covers more than 80 sources.
Provided as is for research and teaching; not a trading recommendation. Check the original sources before relying on the figures. The scripts are released under the MIT licence and the series built here under CC BY 4.0; the underlying sources keep their own terms and should be cited as above. If a figure looks wrong, please let me know.