How to build an options volatility stock screen
To build an options volatility stock screen, compare current implied volatility with both its own history and the stock's realized volatility, then require enough options activity for the comparison to be usable. In Quantery, that means combining iv_rank, atm_iv, realized_vol, and options_oi in a thesis whose thresholds you can inspect and change.
The result isn't a forecast that the stock will rise or fall. It identifies cases where options prices embed an unusually large range of possible movement. You still have to decide what you think explains that gap, then test whether the numerical pattern has any relationship with the outcome you care about.
What does an options volatility screen measure?
Implied volatility is the volatility implied by option prices. It reflects the market's expectation for the magnitude of future price movement, without telling you the direction. Realized volatility measures how much the underlying stock actually moved over a past period. The Options Industry Council's volatility primer makes the distinction plainly: one comes from option prices and expectations, while the other comes from observed price changes.
That gives you a useful comparison. If implied volatility sits well above realized volatility, option prices are allowing for more movement than the recent stock record delivered. The arithmetic can't identify why the two measures differ.
atm_iv is Quantery's median near-the-money implied volatility reading. “Near the money” means the option strike is close to the current stock price. realized_vol is an annualized measure built from recent stock returns. Subtracting the second from the first creates a simple spread:
iv_spread = atm_iv - realized_vol
A positive spread says options imply more movement than the stock has recently shown. It doesn't say the options are mispriced. Realized volatility looks backward. Implied volatility looks forward and can rise for a perfectly sensible reason.
Why does IV rank belong beside the spread?
A raw implied-volatility level is hard to compare across companies. A stable utility and a development-stage biotechnology company can live in different volatility neighborhoods. The same current reading could be startling for one and routine for the other.
IV rank places today's implied volatility inside the stock's own trailing range. A value near the top means the current reading is close to the high end of that history. A value near the bottom means it is close to the low end. Quantery exposes that comparison as iv_rank.
Use IV rank and the implied-realized spread to ask different questions:
iv_rankasks whether current option pricing is elevated for this stock.iv_spreadasks whether current option pricing exceeds the stock's recent movement.
Requiring both prevents a common category mistake. A high implied-volatility level may still be normal for the company. A positive spread may occur while implied volatility sits in the middle of its own range. Neither condition is defective, but they describe different situations.
Don't treat IV rank as a universal percentile across the market. It is a within-stock comparison based on the history in your local data lake. If that history is short or broken, the rank can be absent. Let absence stay absent. Filling it with zero would convert “unknown” into “unusually low,” which is a claim the data didn't make.
How do you collect the inputs without refreshing everything?
Historical options data requires an Alpha Vantage connection. Quantery's data documentation says that provider supplies options history back to 2008, subject to the user's provider access. The starter data doesn't include options history, so a filing-driven template can work while an options feature remains empty.
Start with the market-data connection workflow, but keep the first collection narrow. Connect the provider, choose Options IV as the data job, and collect a short list of symbols you already understand. A small job tells you whether the key works, whether contracts exist for those names, and whether enough observations arrived to calculate the features.
Then inspect data coverage. Freshness and depth answer separate questions. A current options row can supply atm_iv, but IV rank also needs a useful trailing record. Open interest can be present while a longer-dated volatility field is empty because the available chain didn't contain suitable contracts. The coverage preflight shows why a dataset's start date and internal gaps matter before a historical test.
Quantery's local lake has one writer. If another collection job, scan, or backtest is running, the options job queues. Let it wait, use the queue banner's Run next button when the options pull should take priority, or turn on Notify when done and leave it alone. A queued job isn't a failed provider connection.
After the narrow pull works, expand to the universe your thesis actually uses. Don't collect options history for every available symbol just because the button permits it. The data dependency should follow the research question.
What should the first thesis look like?
Start with three conditions: elevated IV rank, a positive implied-realized spread, and usable open interest. Open interest is the number of outstanding option contracts represented in the chain data. It isn't a guarantee of a tight bid-ask spread or an easy fill, but it keeps the first pass from rewarding a volatility reading attached to almost no contract activity.
Don't confuse IV rank with IV percentile. Rank uses the position between the trailing low and high. Percentile counts how much of the trailing history sat below today's reading. One extreme observation can stretch the rank's range while leaving percentile less affected. Quantery exposes both, so substitute iv_percentile in a second version and compare membership before deciding that the choice is harmless.
The shape below is illustrative, and the bundled templates are the reference for exact fields. This example was checked against Quantery's thesis compiler during this run:
meta:
name: options-volatility-research
label: Options Volatility Research
description: Elevated implied volatility with usable options activity.
scale: { min: 0, max: 2 }
universe:
exchanges: [NYSE, NASDAQ, AMEX]
min_market_cap: 200000000
quality:
required:
price: no_price
atm_iv_value: no_current_iv
realized_vol_value: no_realized_vol
params:
iv_rank_strong: 0.80
iv_rank_ok: 0.60
spread_strong: 0.20
spread_ok: 0.10
oi_strong: 5000
oi_ok: 1000
features:
atm_iv_value: atm_iv
realized_vol_value: realized_vol
iv_spread: atm_iv_value - realized_vol_value
iv_rank_value: iv_rank
options_interest: options_oi
criteria:
elevated_iv:
rules:
- { when: "is_null(iv_rank_value)", score: 0, flag: no_iv_rank }
- { when: "iv_rank_value >= $iv_rank_strong", score: 2 }
- { when: "iv_rank_value >= $iv_rank_ok", score: 1 }
- { else: 0 }
volatility_spread:
rules:
- { when: "is_null(iv_spread)", score: 0, flag: no_iv_spread }
- { when: "iv_spread >= $spread_strong", score: 2 }
- { when: "iv_spread >= $spread_ok", score: 1 }
- { else: 0 }
options_liquidity:
rules:
- { when: "is_null(options_interest)", score: 0, flag: no_open_interest }
- { when: "options_interest >= $oi_strong", score: 2 }
- { when: "options_interest >= $oi_ok", score: 1 }
- { else: 0 }
gate:
mode: strict
Every number under params is a proposed research setting. It isn't a market fact. Keep the values round, run the thesis, and inspect the near-misses as closely as the survivors. If a tiny threshold change replaces most of the result, you've learned that the selection rule sits on a cliff.
The quality block also matters. Current implied volatility and realized volatility are required because the spread has no meaning without both sides. IV rank remains a criterion with an explicit null flag. That choice lets you see where the trailing options record is too thin instead of making the whole calculation look complete.
What should you inspect after the scan?
Open several results and read each criterion separately. Check the actual atm_iv and realized_vol values behind the spread. Then look at IV rank and open interest. A high total can come from very different shapes, and those shapes suggest different follow-up questions.
A company with a wide spread and middling IV rank may have been volatile for a while. A company with high IV rank and a smaller spread may have seen both implied and realized volatility rise together. A company that fails only the open-interest criterion may carry an interesting signal that isn't practical for options research. The gate makes those distinctions visible; it doesn't settle them.
Next, check the calendar. Quantery exposes days_to_earnings if you want to separate observations by their proximity to a scheduled earnings date. Add that feature only after you decide what question it should answer. Excluding near-term earnings tests one idea. Requiring them tests another.
This is where the hunch-to-thesis method earns its keep. Write the claim before adding a field. “High IV rank predicts high future stock returns” is different from “a large implied-realized spread predicts large absolute moves.” The first asks about direction. The second asks about magnitude. One scan shouldn't pretend to test both.
What can a backtest establish?
Choose one outcome and keep it measurable. If the thesis is about future movement, test absolute returns or event dispersion if the backtest output supports that analysis. If you're using ordinary portfolio returns, acknowledge that a volatility signal can be right about magnitude and still be useless about direction.
Run the baseline with the simple rule, then change one part at a time. Remove IV rank. Remove the spread. Tighten the open-interest floor. Separate observations near earnings from the rest. If the result appears only with one narrow threshold, don't polish the threshold until the chart improves. Record the failure.
Any Quantery backtest is hypothetical and excludes costs. That caveat bites harder here because option-chain activity doesn't guarantee executable stock or option prices, and the standard equity backtest doesn't model an options strategy's contract selection, spread, expiry, assignment, or volatility crush. It tests how the selected stocks behaved after the signal. It can't tell you what a particular options trade would have earned.
What makes a backtest honest still applies: point-in-time inputs, visible coverage, a fixed rule, and assumptions that don't move after you see the result. Options data adds another demand. Make sure the historical chain record existed on each simulated date and was fresh enough for the feature you're using.
The useful endpoint isn't a list of “expensive options.” It's a rule you can challenge: current volatility compared with its own history, current expectations compared with recent movement, and enough activity to make the reading worth inspecting. Change the thresholds, add the event control your claim needs, and rerun it. The rules are yours, including the rule that says the result isn't good enough yet.
Research tooling, not investment advice. Nothing here is a recommendation to buy, sell, or hold any security. Screens, scores, and backtests are informational only; backtested results are hypothetical, exclude costs such as commissions and slippage, and do not guarantee future results. Verify against primary filings and make your own decisions.
Want to try this on your own rules? Quantery is free for 14 days: the full app, no card required.
← All articles