A Junior Quant's Guide to +EV Options Trading [Code Included]
It's a bird, it's a plane... it's a mathematically guaranteed profit!
Positive expected value (adj.); A condition in which the average outcome of an event yields a net gain over time.
You’ve heard about it, you’ve read about it, you need it, but how do you actually get it?
It’s an elusive question — ask it to 100 different traders and you’ll get 100 different answers. So today, we’re going to set the record straight.
We’ll be taking a practical deep dive into how a real-world quantitative trading operation can evaluate options and find +EV trades. At the end, we’ll also provide you with some tools that will allow you to play with some data and find these opportunities yourself.
So, without further ado, let’s get right into it:
Want EV? Get a View. Seriously, Get a View.
As a quant, the concept of positive EV is one you end up basing your entire life on:
Scenario: “I’m running a quick 10-minute errand, if I skip the $2 parking meter fee, I’ll save $2 — if I get caught, I’ll be fined $45. If there is a 10% chance of being caught and fined, will skipping the fee be an advantageous decision?”
Theoretical EV = (win_rate * gain) + (loss_rate * loss)
Theoretical EV = (.90* 2) + (.10* -45)
Theoretical EV = $-2.70
So, before taking any risk at all, we can know with near certainty that not paying the fee would be a terrible decision (by the way, this was a real scenario we calculated in a real life parking lot — maybe we’re a little too serious about this…).
Moving on, we can naturally extend this to option markets.
We know that implied volatility represents the 68% confidence interval for that security’s realized move. In other words, 68% of the time, realized volatility will be less than or equal to what’s implied — 32% of the time, it’ll be greater.
Now, let’s say we have a model that accurately predicts returns 51% of the time. Extreme amounts of money are made when you accurately predict the direction and get a larger-than-implied move, so let’s get a rough probability of this scenario taking place:
Theo Probability = (proba_of_rv_greater_than_iv * proba_of_accurate_direction)
Theo Probability = (.32 * .51)
Theo Probability = ~16%
So, on any given trade (assuming no edge), there’s about a 16% probability that we’ll accurately predict the direction and have the move be greater than implied. This means that we need at least a 6x return on the winning trades to break-even.
We can isolate the options that will have this payoff by simply simulating the future option price based on a given move:
We take the current price and implied volatility of an out-of-the-money option
We use an options pricing model (e.g., Black-Scholes) to get the price of the option if the stock price moves +/- the implied move.
For instance, say we’re looking at the 105 strike call. If the stock price is currently $100 and the implied move is 10% in a day, we price the 105 call using a stock price of 110.01 to see what it would be worth.
We make sure to also decrease the time to expiration of this theoretical option by 1-day.
We take the future theoretical price, subtract it from the price it’s currently trading at and use that as our theoretical PnL.
In theory, if we put together a large portfolio of options that all had a theoretical PnL of >6x the initial price, we would have a mathematical “guarantee” of profits, even at a win rate of ~16%.
We’ve got all the data in the world, so all we’d need to do is run through each weekly options chain, see what each would be worth if a greater than implied move occurred in the next day, then if it meets our PnL criteria, we add it to our portfolio.
So, let’s do it:
For a given day, we pull the options chain for a given stock.
We calculate the next-day future price as whatever the implied move is (IV / sqrt(252), plus $0.01.
So, if the stock price is $100 and the implied move is 10%, we price the available options as if the spot price tomorrow is $110.01/$89.99.
We use this because it’s a reasonable estimate of what the stock price will be if RV >IV.
Obviously, there will be options that return much higher than 6x if the realized move is 10x higher than implied, but realistically, we should model what happens if the realized move is just outside of implied.
Our core assumption is that there is a 32% chance of RV being greater than IV, that assumption starts to break down if we’re modeling the chances of RV being n times greater than IV.
If there are options that provide our desired theoretical PnL (~5.25x), we add it to the portfolio at near market close, then sell the portfolio at the next day’s market close.
Here’s an example of the output we’d see for a call strip:
The given date was a Thursday, so naturally, the options that expire OTM the next day would be worthless (-100%). Interestingly though, we see that we would nearly triple-up on the near-the-money strikes if the theoretical move occurred.
3x is pretty good, but remember, there’s only a 16% chance that it’s the right direction and the move actually occurs, so we need at least 5.25x. This strip won’t do, so we’ll run and check this for every single liquid stock.
Our standard practice is to use the actual NBBO timestamp bid/ask quotes, so we’re pretty confident in the prices we’re able to use/pull.
As you might already imagine, option markets are pretty efficient, making our search a bit more difficult. Here’s another snippet taken on a Monday that assumes a move happens by Tuesday, with plenty of time left to expiration:
Now, while we wouldn’t get our desired payoff if RV is just a hair above IV, what if we change our assumption to be that RV will be 2x greater than IV?:
Given that assumption, we start to see some better numbers.
However, if we assume a 2 standard deviation move, our theoretical probability changes from ~16% (.51*.32) to about ~3% (.51 *. 05), which would require at least a 33x return to at least break-even in the long-run.
This is yet another example of how crucial it is to have an independent view on volatility that differs from what’s implied. You won’t find +EV trades while using the market-implied assumptions as inputs.
The 16% and 3% probabilities assume that IV is true and an outlier move has a fair probability of 32%, however, if you have an information edge and have higher confidence in that information, the probabilities change significantly:
You have inside information and have an 85% probability of a positive move and a 50% probability of a 2-standard deviation move.
Your new probability of success goes from the market implied 16% to ~43%.
Since your new probability is 43%, you’d only need a ~2.32x return to come out ahead in the long-run.
At that point, you would have a massive edge, since the options market is underpricing that event and is offering a 5-6x return.
Now, of course, the hard part is just getting that proprietary view to begin with — difficult, but not impossible:
If you are regressing VIX values/returns to future SPX returns (this actually works btw), you may have your model output a 56% probability that the market will go up tomorrow. SPX options generally price ATM options at a 53% likelihood to the upside, but single-stocks are much closer to 50/50.
So, if there’s a stock that you expect to be decently correlated to the S&P 500, your 56% probability of it also going up might be the basis of your “edge”.
On the volatility front, if you use a forecast of SPX vol (e.g., VIX / sqrt(252)), you can take the estimate and multiply it by the beta of a given stock to get an expected move. For instance, if the market implies that SPX will move by 0.5% tomorrow and TSLA has a beta of 3.0, your vol estimate would be at least 1.5%.
Pairing those two estimates together will quantitatively define your view and allow you to start seeing +EV trades (*theoretically +EV, assuming view is right)
You would be surprised to know that many vol traders and option market makers apply a “fudge” factor, and create a view as simple as:
“Eh, I’ve had exposure to this security for awhile, vol looks pretty cheap/rich here…”
Recommended read: Volatility Trading by Euan Sinclair
Do Try This at Home
Playing around with options data and running experiments like this is a terrific way to not only better understand markets, but to also come up with new ideas to test.
So, we made it as easy as possible for you to replicate this exact experiment with any ticker you’d like, for anytime you’d like:
This single-file script includes the logic for pricing the options, back-solving for implied volatility, pulling option quotes, and making the theoretical calcs.
We strongly, strongly recommend using snippets from the file to use in testing some other ideas of your own. For instance, with the logic for calculating IV, perhaps iterate historically for a given ticker and see if there’s possibly any return predictability during high vol regimes.
Workflow
To begin, head over to our “theoretical-options” GitHub repo and download the “theo-move-prod.py” file:
Once downloaded, scroll to ~line 77/80 and insert your desired ticker symbol and move adjustment.:
The implied move will be calculated later, but the move_adjustment allows you to model what options will be worth if the next day’s realized vol is n times greater than what’s implied.
When you run the file, the desired output will be in the “full_options_data” variable:
The theo_future_price column is the current price +/- the implied move for each side, and the theo_pnl_pct represents what you’ll make on each respective option if the market closes at that price tomorrow.
To make this actionable, first calculate your theoretical probability of what you think will happen:
You think there’s an 80% chance Citigroup will go down and a 60% chance implied vol will be 2x the implied move. Your theoretical probability is ~ 48%(.8*.6)
You can take this probability and insert it into a moneyline calculator that takes in the probability and spits out the minimum odds:
If you see options in your direction that have a payoff greater than that, you have an edge (assuming your assumption is true).
So, take some time, hack around, and maybe even see if you can get a better use-case of this than we did. Have fun!
Now, before wrapping up there’s just one more matter of business:
Strategy Updates
At the time of writing, our strategies just wrapped up one of the most profitable weeks to date, most notably our TSLA strategy being on the right side of high realized volatility:
This week was a shining example of the complementary synergies of the strategies, with the TSLA strategy benefitting from the heightened volatility, and the SPX strategy benefitting from trending markets.
As of September 20th, 2024, the market entered a “low vol” regime, so our expectation is that the SPX strategy should continue to provide strong cashflows while the regime lasts. TSLA has also been drawing headlines on the geopolitical page, commanding lots of investor attention, so if its recent volatility continues, we can expect to fully maximize our EV.
If you’ve been replicating these strategies using the methodologies we outline in The Volatility Trading Bible, there's a strong chance you’ve already earned back the cost of the series and more, so congratulations and hats off to you 🫡!
If you’re not interested in taking trading risk, but are interested in replicating, modifying, and building experiments like the one we ran above, we strongly recommend checking out our vol trading bible as we cover everything from setting up the exact IDEs, databases, and servers we use to the code logic you can copy for building realistic backtests with option quotes, and more:
Happy trading! 😄
Great post QG - I think one could scan for those securites that observer non-normal historical spiking behaviour. IMHO this is the easiest way to filter for badly behaved / volatilie / non-normally distributed stocks. I refer to the approach in Microsoft Excel for Stock and Option Traders: Jeff Augen. There is a great tool in that book which allows traders to pick a stock and to see its historical price movement in SD terms - From there, one can easily count the number of times a stock spikes by more than, say, 4-5 SD's in a year. They then get ranked by their annual 'spikiness'. In theory, those stocks options prices can never price in their behaviour because the BS model assumes that 4-5 SD spikes never happen. One must obviously exclude earnings spikes but the tool is super easy to code up in python and deploy as a web app. Shout if you want mine and I'll upload it to Discord.