The volatility risk premium: getting paid to insure the market
The VIX is the market’s price for the next month of S&P 500 movement. Most of the time it is higher than the movement that follows. I tested what happens if you sell that gap every month, and what it costs in the months when it goes wrong.
- What I did
- Every 21 trading days since 2 January 1990, I sold a one-month variance swap on the S&P 500, using the VIX as the price, and measured the profit against the volatility that then happened. I tried every possible start day, charged costs, and used blocks of months to measure how uncertain the results are.
- Why it matters to a trader
- Selling volatility is one of the oldest and most crowded trades in options. It pays a little in most months and loses a lot in a few. A desk needs to know how often it pays, when it does not, and how big to be. That is a sizing question more than a signal question.
- What I found
- The VIX was above the volatility that followed on 86% of days, by 4.1 points on average. Selling it made money in 83% of months, with a Sharpe ratio of 0.98 after costs, but its 95% range runs 0.44 to 2.10. The worst month lost 40 times an average month. Sized so that the worst start day costs 5% of an account, the average year earns about 0.5%.
- What I could not show
- That it can be traded like this. A real trade uses VIX futures, SPX options or a dealer variance swap, with costs and margin, and the VIX is not exactly the price of a swap. No filter reliably improved the result, and most of the conditions I checked have too few independent episodes to use.
The idea in plain words
Volatility is how much a market moves, written as a yearly percentage. A volatility of 16 means the index moves about 1% on a typical day. I call one percentage point a "vol point". Realised volatility is what really happened. The VIX is what the market charges, today, for the next 30 days of S&P 500 options. It is quoted in the same vol points.
The economic story is insurance. Investors who own shares pay for protection, through index puts and volatility products, and they pay more than the protection is worth on average. Whoever sells it is paid a premium for absorbing losses others do not want. That is a reason to test the trade. It is not proof that it pays.
To sell volatility in its purest form you sell a variance swap: you receive a fixed price (the strike) and pay the volatility that is actually realised. The strike of a 30-day swap is close to the VIX, so I use the VIX read at the close of the start day. For a "vega notional" of N dollars per vol point, the seller’s profit at expiry is N / (2K) × (K2 - RV2), where K is the VIX at the start and RV is the realised volatility over the next 21 trading days.
How it loses. If RV ends equal to K, you break even. If it ends below, you win about N for each point of gap. If it ends above, the loss grows with the square of RV. Volatility twice the strike costs 1.5 times the strike per unit of vega: at a VIX of 15, that is 22.5 points, when the average month in this study makes 2.3. Losses come in jumps, and in this data they cluster in crises.
Three words I use below. A Sharpe ratio is the average profit divided by how much it jumps around, scaled to a year (above 1 is good, around 0.3 to 0.5 is small). A drawdown is the fall from the highest point the profit had reached. Skewness is negative when a few large losses sit far from the typical result.
Sell one month of variance, every month
Loading the data
One vol point of vega notional is $1 of profit per point the strike is above the realised volatility. The account is $100,000. A month is 21 trading days, so there are about 12 a year.
The worst months in this selection
| Start | VIX | Realised | Per $1 of vega | At this size | Of account |
|---|
What the results say
Step 1: implied against realised. On every day since 2 January 1990 I compared the VIX with the realised volatility of the next 21 trading days. "Non-overlapping" keeps one day in 21, so the windows do not share days. "Range" is a 95% margin of error, worked out by reshuffling blocks of neighbouring months.
| Every day | Non-overlapping months | |
|---|---|---|
| Number of observations | 9,229 | 439 |
| Average gap, VIX minus realised (points) | 4.10 | 4.01 |
| 95% range for the average | 3.41 to 4.70 | 3.26 to 4.71 |
| Median gap | 4.71 | 4.68 |
| Share of cases where the VIX was higher | 85.9% | 84.3% |
| 5th percentile of the gap | -4.8 | -4.6 |
| 1st percentile of the gap | -19.7 | -18.7 |
| Average of the worst 5% | -15.0 | -15.3 |
| Worst case | -72.0 | -53.2 |
The gap is positive most of the time, but its left tail is long: one day in 100 the volatility that followed was 20 points above the VIX. The average VIX was 19.4 and the average realised volatility 15.3.
Step 2: the trade. Per 1 unit of vega notional, in "vega points" (multiply by your dollars per vol point). The cycles are 21 trading days, one after the other. The simple case has no cost. The stress case takes 2 vol points off the strike, a cost closer to a stressed market than to a calm one.
| No cost | Cost 0.5 | Stress, cost 2 | |
|---|---|---|---|
| Monthly cycles | 439 | 439 | 439 |
| Sharpe ratio | 1.19 | 0.98 | 0.37 |
| 95% range for the Sharpe | 0.60 to 2.46 | 0.44 to 2.10 | -0.01 to 1.11 |
| Winning months | 84.3% | 82.7% | 75.2% |
| Average month (vega points) | 2.72 | 2.29 | 0.93 |
| Median month | 3.90 | 3.56 | 2.37 |
| Worst month | -88.9 | -90.5 | -95.7 |
| Skewness | -6.1 | -6.1 | -5.9 |
| Worst drawdown | 119.7 | 122.9 | 153.5 |
| Months to get back to the old peak | 19 | 21 | not yet |
The trade wins 83% of months and the average month earns 2.3 vega points, but the median is higher (3.6) than the average, which tells you that a few big losses pull the average down. Skewness is -6.1. The worst month on this path, the cycle opened on 5 Mar 2020, lost 90.5 vega points: the VIX was 39.6 and realised volatility then came in at 92.8. The worst drawdown was 123 vega points, from January 2020 to March 2020. It took 21 months from the low to get back, and 26 months was the longest stretch below a previous high.
The worst month depends on which day the cycle starts. Here are the worst 21-day windows over every possible start day, one line per distinct episode:
| Opened | VIX | Realised after | Result per $1 of vega | What happened |
|---|---|---|---|---|
| 14 Feb 2020 | 13.7 | 84.2 | -262.3 | Covid crash, March 2020 |
| 12 Sept 2008 | 25.7 | 75.3 | -100.1 | Lehman failure and the 2008 crash |
| 25 Mar 2025 | 17.2 | 48.3 | -61.6 | US tariff announcements, April 2025 |
| 22 Jul 2011 | 17.5 | 45.9 | -53.3 | US downgrade, August 2011 |
| 10 Aug 2015 | 12.2 | 30.8 | -34.6 | China devaluation sell-off, August 2015 |
| 11 Jan 2018 | 9.9 | 24.4 | -27.0 | Volatility spike of 5 February 2018 |
| 28 Jun 2002 | 25.4 | 42.6 | -23.9 | no event I can name with certainty |
| 3 Dec 2018 | 16.4 | 31.8 | -23.7 | no event I can name with certainty |
The three periods everyone asks about. For September or October 2008, the worst window opened on 12 Sept 2008, at a VIX of 25.7, and lost 100 vega points. For January or February 2018 it opened on 11 Jan 2018, at 9.9, and lost 27. For February or March 2020 it opened on 14 Feb 2020, at 13.7, and lost 262. Losses of 2008 were smaller than those of 2020, partly because the VIX was already high: a higher strike pays more and shrinks the loss per point. The window around the Russian default of 1998 cost only 16, probably for the same reason.
Sizing. Sell for $1 of vega per vol point and the worst start day loses 262 dollars. To keep that day at 5% of a $100,000 account, you can sell only $19 per vol point. At that size the average month earns $43, or about 0.5% of the account a year. Sizing to the average month would give a much bigger number and would be a mistake: it is the worst month, and not the average, that sets the size. The worst month in the data is also only a lower bound on what can happen. My data starts in 1990, so it does not contain the crash of October 1987.
In which situations could it make sense?
Each point is marked Tested when I measured it in this data, or Idea when it is how the market works in theory and I did not test it. The groups below were fixed before I looked at any result. I checked 21 groups and 6 filter variants in all, so a lucky one is likely among them. Read the numbers lightly.
When it could make sense
- Idea The insurance premium and who pays it. Holders of shares buy index puts and volatility products to protect themselves, and pay more than the protection is worth on average. The seller is paid to carry the risk they do not want.
- Tested Implied above realised. The VIX was above what followed on 86% of days, by 4.1 points on average, and the range for the average stays above zero (3.26 to 4.71).
- Tested When the VIX is well above the volatility of the last 21 days. With a gap of 5 points or more the Sharpe was 1.65 (178 months), against 0.26 when the VIX was below recent realised volatility. The ranges overlap, so this is a hint and not a rule.
- Tested After the VIX has just fallen. When it had dropped more than 10% in 5 days the Sharpe was 2.11, against 0.68 after a rise. Again the ranges overlap.
- Tested Steady rates. In the 122 months after a year with fed funds moving less than 0.25 points the Sharpe was 1.60, against 1.27 in rising phases and 0.74 in falling ones. There are only 18, 9 and 10 separate stretches, so this is thin.
- Idea Events that resolve. Implied volatility tends to rise into a CPI, FOMC or ECB announcement and fall after it, so a swap that spans the event is priced for it. I did not test events: I did not build an event calendar.
When it can hurt
- Tested A jump from a calm start. The worst window opened on 14 Feb 2020 with the VIX at 13.7: realised volatility over the next 21 days was 84.2 and the swap lost 262 vega points. The windows opened before February 2018 (VIX 9.9) and August 2015 (VIX 12.2) had the same shape: a VIX below 14, then a jump.
- Tested Low VIX hides the tail. From a VIX below 14 the worst monthly cycle on this path lost only 28 vega points, but the worst window over all start days lost 262. The path I happened to draw is not the worst path.
- Tested Inverted curve, when the 3-month VIX is below the 1-month VIX. The average month lost 2.6 vega points and the Sharpe was -0.4, but that is only 27 months, too few to use.
- Tested Recessions, in hindsight. In the 35 months inside an NBER recession, from only 4 separate recessions, the Sharpe was -0.3. NBER dates a recession many months after it starts, so nobody could use this on the day.
- Tested Crisis clustering. The trade lost money in 6 calendar years (2002, 2008, 2015, 2018, 2020, 2022). Losses sit next to each other: 2008 lost 93 vega points over the year and 2020 lost 59.
- Tested Costs in stress. With a cost of 2 vol points the Sharpe falls from 0.98 to 0.37. Real costs are widest exactly when you most want to trade.
- Idea Rate policy and liquidity. Central banks tend to cut into a crisis, so falling policy rates are often a symptom of stress and not a cause of calm. Volatility sellers rely on easy funding and deep markets, and both can vanish together.
- Idea Crowding and dealer positioning. When many investors sell volatility and dealers are short options, a small shock forces them to buy volatility back at the same time. Short-volatility products lost most of their value in a single day in February 2018. I did not test the mechanism, only that the loss window exists in the data.
- Idea Term structure and roll. With VIX futures the seller earns the roll when the curve is in contango and pays it when inverted. A variance swap has no roll, but the same curve shape reflects the same stress. I did not model futures.
- Idea Margin and leverage. A position sized to the average month is forced out by margin calls before a loss is over. This is why the sizing rule above uses the worst window.
The groups, one by one
For each group I show the number of monthly cycles, the number of separate stretches ("episodes": a run of neighbouring cycles in the same group counts once), the Sharpe with its 95% range, the average and the worst month on this path, and the worst window over all start days. The last column says whether the group’s Sharpe differs from all other months, judged by the same resampling. "Too thin" means fewer than 30 months or fewer than 8 episodes.
| Situation at the start | Months | Episodes | Sharpe | 95% range | Average | Worst month | Worst start day | Reading |
|---|---|---|---|---|---|---|---|---|
| Level of the VIX | ||||||||
| VIX below 14 | 110 | 32 | 1.04 | 0.2 to 3.0 | 1.40 | -27.7 | -262 | Unclear |
| VIX 14 to 20 | 167 | 63 | 1.13 | 0.3 to 3.1 | 2.21 | -60.2 | -261 | Unclear |
| VIX 20 to 30 | 128 | 48 | 1.77 | 0.8 to 3.4 | 3.33 | -35.0 | -163 | Unclear |
| VIX 30 and above | 34 | 16 | 0.28 | -0.6 to 5.9 | 1.63 | -90.5 | -123 | Unclear |
| Level of the VIX (thirds) | ||||||||
| Lowest third of VIX | 145 | 41 | 1.35 | 0.5 to 3.2 | 1.65 | -27.7 | -262 | Unclear |
| Middle third of VIX | 147 | 71 | 1.10 | 0.3 to 3.2 | 2.30 | -60.2 | -247 | Unclear |
| Highest third of VIX | 147 | 36 | 0.90 | 0.2 to 2.8 | 2.91 | -90.5 | -163 | Unclear |
| VIX minus realised vol of the last 21 days | ||||||||
| VIX below recent realised vol | 54 | 37 | 0.26 | -0.7 to 3.6 | 0.94 | -60.2 | -123 | Unclear |
| VIX 0 to 5 points above | 206 | 97 | 0.89 | 0.2 to 3.5 | 2.04 | -90.5 | -262 | Unclear |
| VIX 5 or more points above | 178 | 103 | 1.65 | 0.9 to 2.8 | 3.00 | -35.0 | -163 | Unclear |
| 3-month VIX minus VIX (curve) | ||||||||
| Curve inverted | 27 | 19 | -0.39 | -1.2 to 2.2 | -2.62 | -90.5 | -163 | Too thin |
| Curve 0 to 2 points in contango | 90 | 45 | 1.36 | 0.5 to 3.0 | 2.51 | -32.3 | -262 | Unclear |
| Curve 2 or more points in contango | 107 | 39 | 0.87 | 0.0 to 3.2 | 1.99 | -60.2 | -60 | Unclear |
| Change of the VIX over 5 days | ||||||||
| VIX fell over 10% in 5 days | 76 | 60 | 2.11 | 1.0 to 4.6 | 3.39 | -27.7 | -262 | Unclear |
| VIX moved less than 10% | 286 | 96 | 0.89 | 0.3 to 2.7 | 2.10 | -90.5 | -261 | Unclear |
| VIX rose over 10% in 5 days | 76 | 61 | 0.68 | -0.1 to 2.4 | 1.95 | -53.6 | -247 | Unclear |
| Fed funds over the last 12 months | ||||||||
| Fed funds falling | 169 | 10 | 0.74 | 0.0 to 3.6 | 2.36 | -90.5 | -262 | Unclear |
| Fed funds flat | 122 | 18 | 1.60 | 0.8 to 3.3 | 2.87 | -35.0 | -53 | Unclear |
| Fed funds rising | 148 | 9 | 1.27 | 0.6 to 2.4 | 1.72 | -23.6 | -27 | Unclear |
| Recession (known only later) | ||||||||
| Expansion | 404 | 5 | 1.66 | 1.1 to 2.4 | 2.63 | -35.0 | -262 | Too thin |
| NBER recession | 35 | 4 | -0.26 | -1.2 to 4.1 | -1.65 | -90.5 | -123 | Too thin |
What to take from this table. No group differs from the others by the resampling test, so nothing here is a rule. The groups that look best (a VIX that just fell, a VIX far above recent volatility, steady fed funds) have ranges that overlap the others. The groups that look worst (inverted curve, recession) are the two thinnest: 27 and 35 months, 19 and 4 episodes. The rate groups have only 10 to 18 stretches each, because rate phases last for years. The recession split also cannot be used in real time.
Where are we today?
This section is computed in your browser from a small file with the latest VIX, the 3-month VIX and recent S&P 500 closes. It describes conditions, and how similar past days turned out. It is not a forecast.
The latest reading
Loading the latest data
The numbers at build time. When this page was built (28 September 2026), the VIX was 16.07, realised volatility over the last 21 days was 10.61 and the gap 5.46 points, with the curve in contango. For rate context, the effective fed funds rate averaged 3.63% in August 2026, down 0.70 points over 12 months as I measure it, and the 3-month Treasury bill yielded 4.10% on 28 Sept 2026. I read nothing into those two numbers.
The data lag. The VIX and the S&P 500 come from FRED, which normally publishes a close one business day late. The study itself uses complete 21-day cycles, so its last cycle opened on 12 Aug 2026 and its history stops there. Nothing in this section is a price you could have traded on today.
One simple filter
Choosing a filter after seeing which one works is how backtests lie. So I wrote down one filter before running anything: do not sell when the VIX curve is inverted, meaning the 3-month VIX is below the 1-month VIX. It has no number to tune. I also tried a second family with one number, "do not sell when the VIX is below a floor" (floors of 12, 14, 16, 18 and 20), which I tested walk-forward: each month the floor is chosen using only earlier months. That makes 6 variants in all. A caveat: I know from history that curves inverted in 2008 and 2020, so the first filter is not blind.
| Sell every month | Skip when inverted | |
|---|---|---|
| Period (the 3-month VIX starts in December 2007) | December 2007 to August 2026 | |
| Months sold, out of 224 | 224 | 197 |
| Sharpe ratio, after costs | 0.54 | 0.99 |
| 95% range for the difference in Sharpe | -0.15 to 1.11 | |
| Average month (vega points) | 1.64 | 1.96 |
| Worst month on this path | -90.5 | -60.2 |
| Worst drawdown | 122.9 | 63.2 |
| Start days (out of 21) where the filter improved the Sharpe | 18 of 21 (median gain 0.36) | |
| Worst start day, whole range | -262 | -262 |
| Walk-forward: adopt the filter only if it was ahead so far (164 months from December 2012) | 0.59 | 1.08 |
Reading. On this path the filter lifts the Sharpe from 0.54 to 0.99, and it did so in 18 of 21 start days. But the 95% range for the difference (-0.15 to 1.11) includes zero, and the gain comes from a handful of months: it skipped 27 months, of which 21 would have won, and avoided 4 losses of more than 20 vega points, among them the cycle opened on 5 Mar 2020. It would also have skipped the window of 12 Sept 2008 (curve at -0.64). It did nothing for the worst start day: on 14 Feb 2020 the curve was in contango (1.82), and on 11 Jan 2018 too (2.28), so the filter would have sold, and the loss stays at 262 vega points. The walk-forward version, which had to decide in real time, adopted the filter in 100% of months from December 2012 and had a Sharpe of 1.08 against 0.59 (range for the difference -0.34 to 1.09). For the floor filter, the walk-forward chose "no floor" in 100% of months: every floor I tried lowered the Sharpe.
The sizing consequence. Because the worst start day is unchanged, the size that keeps it at 5% of the account is also unchanged: $19 per vol point. At that size the filter lifts the average year from 0.31% to 0.36% of the account. A filter that helps on the average month does not change how big you can afford to be.
How much should you trust it?
The start day matters. The headline uses cycles that open on day 1. There are 21 possible start days, and the Sharpe ranges from 0.47 to 1.04 across them, with a median of 0.88. The worst month ranges from -262 to -67 vega points. Try the "Start day" slider above: the reason is that the loss of February to March 2020 lands inside one cycle or is split between two.
Costs. Sharpe by cost taken off the strike, at start day 1 and as the median over the 21 start days:
| Cost (vol points) | Day 1 | Median |
|---|---|---|
| 0.0 | 1.19 | 1.06 |
| 0.5 | 0.98 | 0.88 |
| 1.0 | 0.77 | 0.70 |
| 2.0 | 0.37 | 0.32 |
Was it the same in every period? No. The 1990s were far better than every later period. The 1990s figure comes from the VIX as the exchange back-calculated it before 2003, as I understand it, and I did not check the method, so I would not lean on it.
| Period | Months | Sharpe | Average | Winning months | Worst month |
|---|---|---|---|---|---|
| 1990-1999 | 120 | 3.16 | 3.64 | 88% | -23.6 |
| 2000-2009 | 120 | 0.60 | 1.53 | 78% | -60.2 |
| 2010-2019 | 119 | 1.16 | 2.20 | 82% | -35.0 |
| 2020-2026 | 80 | 0.43 | 1.53 | 83% | -90.5 |
Trying to break it. I removed the best and worst months and years, and started later:
| Test | Months | Sharpe | Average |
|---|---|---|---|
| All months | 439 | 0.98 | 2.29 |
| Without the worst month | 438 | 1.28 | 2.50 |
| Without the worst 3 months | 436 | 1.76 | 2.77 |
| Without the worst 5% of months | 417 | 3.94 | 3.64 |
| Without the best year (2009) | 427 | 0.92 | 2.17 |
| Without the worst year (2008) | 427 | 1.25 | 2.57 |
| Since 2000 only | 319 | 0.68 | 1.78 |
| Since 2010 only | 199 | 0.72 | 1.93 |
Removing the best year hardly matters. Removing the worst three months lifts the Sharpe to 1.76, and removing the worst 5% lifts it to 3.94. That is the point: the whole risk of the trade is in a few months, and the Sharpe ratio, which treats a large loss like a large gain, hides it.
Other checks. The window for realised volatility is 21 trading days. With 19, 20, 22 and 23 days the Sharpe is 0.86, 1.03, 0.52, 0.55. The 95% range for the Sharpe is 0.43 to 2.08 with blocks of 3 months, 0.44 to 2.10 with 6 and 0.46 to 2.13 with 12. Using the S&P 500 closes from FRED instead of Yahoo for the last ten years, the Sharpe is 0.516 and 0.516, and no day’s realised volatility moves by more than 0.07 vol points.
What I did not model.
- A real trade. It uses VIX futures, SPX options or a dealer variance swap, each with a bid-offer spread, margin and financing. I used a flat cost off the strike.
- The gap between the VIX and the swap’s true price. The VIX is a formula on option prices with limited strikes, so it can differ from a swap strike by a fraction of a point in calm markets and more in stress. It can go either way.
- Margin calls and forced exits. A real position is closed when margin runs out, often at the worst point.
- Options on events, skew, dividends, and any other underlying than the S&P 500.
- The years before 1990. The crash of October 1987 is not in the data.
- Trading before the close. I read the VIX and trade at the same close.
What this is not
This is research. Nothing here has been traded, and nothing here is advice. The trade made a little in most months in the past and lost a lot in a few. That is not a promise about the future.
Source and tests at
github.com/Nicolas8330/vol-risk-premium.
Every figure on this page comes from one run of
examples/make_results.py. The last VIX used for the text
is from 28 September 2026, and the last complete cycle opened on
12 August 2026.