How Order Flow Moves Implied Volatility
How does order flow move implied volatility? Walk one strike from a balanced book to one-sided call buying, with real daily vol and volume figures.
Order flow moves implied volatility one quote at a time. A market maker quoting an option is not taking a view on where the stock is heading: they post a price on both sides, and when the buying keeps arriving on the same side, they lift the volatility they are willing to offer until the flow slows or the cost of carrying the position is covered. The stock itself can sit still through the whole sequence, and often does.
What a market maker is actually quoting
An option has a dollar bid and a dollar offer, but the desk on the other side of it works in volatility. Implied volatility is the annualized percentage move that an option's price is consistent with, given the strike, the days left to expiry, the stock price, and the interest rate. Put a price into a pricing model and the volatility number falls out. Put the volatility in and the price falls out. Implied volatility is a price restated in different units, which is why options are quoted in volatility between professionals rather than in dollars.
Take a hypothetical to fix the idea. A $220 call with a month to run is offered at $5.20 in the morning. By the afternoon the same contract is offered at $5.60, the stock is still $220, and there is one day less on the clock. The strike did not change, the rate did not change, and the passage of a day pushes an option's price the other way. Those extra 40 cents live in the volatility input, and nowhere else.
How order flow moves implied volatility at a single strike
The panel below takes every AAPL option within 5% of the stock price carrying 20 to 45 days to expiry, and measures each session three ways: the share of that day's contract volume that traded in calls, the average implied volatility those near-the-money contracts carried, and where the stock closed against its level on the first day of the window.
The exact SQL behind every number
WITH
(
SELECT toFloat64(close)
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'AAPL'
AND date >= '2026-05-01'
ORDER BY date
LIMIT 1
) AS start_close
SELECT
toString(date) AS date,
round(100 * sumIf(volume, startsWith(lower(toString(option_type)), 'c')) / sum(volume), 1) AS call_share_pct,
round(100 * avg(implied_volatility), 1) AS atm_iv_pct,
round(100 * (toFloat64(any(underlying_close)) / start_close - 1), 1) AS stock_pct_vs_start
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date BETWEEN '2026-05-01' AND '2026-06-30'
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 20 AND 45
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
GROUP BY date
ORDER BY dateAcross 41 sessions in May and June 2026, call share opened the window at 71% of near-the-money volume and finished it at 80.7%. The volatility on those same contracts went from 22.5% to 27.8%, over a stretch in which the stock ended 3.2% from where it started.
The two lines do not track each other session by session, and that is the honest version of the mechanic. One day of lopsided buying nudges a quote by a tick. A run of days moves the level, since the maker is being asked to hold more of the same position each morning at a price that has not yet slowed the demand. Nothing in that sequence requires the stock to go anywhere.
Why one strike prints a higher IV than its neighbours
Freeze a single session and look across strikes instead of across days. The panel below holds the date and the expiry fixed, and walks the busiest expiration on that session from below the stock price to above it.
The exact SQL behind every number
WITH
(
SELECT max(date)
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date <= '2026-06-30'
) AS session_date,
(
SELECT expiration_date
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date = session_date
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 20 AND 45
GROUP BY expiration_date
ORDER BY sum(volume) DESC
LIMIT 1
) AS busy_expiry
SELECT
concat('$', toString(toUInt32(round(toFloat64(strike_price))))) AS strike,
round(100 * avg(implied_volatility), 1) AS offered_iv_pct,
sum(volume) AS contract_volume
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date = session_date
AND expiration_date = busy_expiry
AND iv_converged = 1
AND volume > 0
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) <= 0.06
GROUP BY strike_price
ORDER BY strike_priceEvery contract in that panel sits on the same stock, on the same day, expiring on the same date. The strike is the only thing changing from row to row, and the offered volatility changes with it: 26.2% at the $275 strike against 23.3% at $305, across 7 strikes in all. That spread from one strike to the next is the volatility skew, and the balance of buying and selling is one of the things that shapes it. Demand does not arrive evenly across a chain. It arrives at the strike somebody wants, and the quote at that strike is the one that moves.
Splitting the same session by option type sharpens the picture, since calls and puts at matched distances from the stock price are quoted by the same desk at the same moment.
The exact SQL behind every number
WITH
(
SELECT max(date)
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date <= '2026-06-30'
) AS session_date
SELECT
multiIf(bucket = 0, 'at spot',
bucket < 0, concat(toString(abs(bucket)), '% below'),
concat(toString(bucket), '% above')) AS strike_vs_spot,
round(100 * avgIf(iv, is_call), 1) AS call_iv_pct,
round(100 * avgIf(iv, NOT is_call), 1) AS put_iv_pct
FROM
(
SELECT
implied_volatility AS iv,
startsWith(lower(toString(option_type)), 'c') AS is_call,
round(((toFloat64(strike_price) / toFloat64(underlying_close)) - 1) * 100 / 2.5) * 2.5 AS bucket
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date = session_date
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 20 AND 45
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) <= 0.10
)
GROUP BY bucket
HAVING countIf(is_call) > 0 AND countIf(NOT is_call) > 0
ORDER BY bucketAt 7.5% below the puts were carrying 30% against 27.6% on the calls. At 10% above the same two measurements printed 33.3% and 25.7%. Same stock, same minute, same model. The differences live in the strikes people keep asking for.
The maker keeps quoting the other side
Marking an offer higher is not a refusal to trade. A desk that keeps selling calls into steady demand ends up short those calls, and the standard defence is to buy stock against them. That is delta hedging: a stock position sized to offset the option's directional exposure, adjusted as the stock moves. The hedge is not free. Rebalancing costs money every time the stock travels, and the part of the risk that stock cannot offset, the position's sensitivity to volatility itself, grows with every contract sold.
The higher offer is the price of taking on one more unit of the same risk. The bid moves up with it, since the desk would happily buy those calls back at a better level, and the spread between the two sides is how market makers make money rather than any bet on direction.
What an electronic quote can and cannot see
On the trading floor, an order arrived as a person. A broker walked into the crowd, and the makers standing there could see the size and the firm behind it. That context was part of the price they gave. Screens removed it. A modern maker reads the shape of the flow off the tape afterwards: volume by strike and expiry, the overnight change in open interest (the count of contracts still outstanding), how quickly a resting offer gets lifted, and whether the buying comes back once the volatility is marked up. Most of the time there is no way to separate an institutional order from a retail one. The quote adjusts to the pattern of the trading, never to the identity of the trader.
The exact SQL behind every number
WITH
(
SELECT max(date)
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'KO', 'SPY')
AND date <= '2026-06-30'
) AS session_date
SELECT
underlying_symbol AS symbol,
round(100 * sumIf(volume, startsWith(lower(toString(option_type)), 'c')) / sum(volume), 1) AS call_share_pct,
round(100 * avg(implied_volatility), 1) AS atm_iv_pct
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'KO', 'SPY')
AND date = session_date
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 20 AND 45
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
GROUP BY underlying_symbol
ORDER BY call_share_pct DESCOn that session, AMZN sat at the top of the group with 91.9% of its near-the-money volume in calls, and near-the-money vol of 38.7%. Read the two columns down the panel and they do not line up row for row. A day of flow is one input into a surface that also carries each name's own trading history and whatever position the desk is already sitting on.
What this does not mean
A quote is not a forecast. A higher offer says the desk wants more compensation for the next contract it sells, and it says nothing about where the stock is going next. Implied volatility is a price, set by what people are paying, and the gap between implied and historical volatility is where a reader can watch how often the price and the outcome disagree. A strike quoted at 40% vol has not predicted a 40% move. It has been bid up by somebody who wanted that contract.
How these panels are measured
Every panel filters to contracts where the model's volatility solution converged and where the contract actually traded that day, then keeps only near-the-money strikes with 20 to 45 days to expiry, the standard window for reading a volatility level without the distortions of very short or very long dated contracts. Averages are unweighted across contracts in the bucket. The call share counts contracts traded, not the direction of the customer, since the tape does not label a trade as a buy or a sell.
FAQ
Does buying options push implied volatility up?
Sustained one-sided buying at a strike coincides with a higher offered volatility at that strike. The desk on the other side is selling contracts it then has to hedge, and the offer is where it prices the next one. A single small order rarely moves a liquid name's volatility in any visible way.
Do market makers take a directional view?
Quoting a two-sided market is a business built on the spread between the bid and the offer, with the stock exposure hedged rather than held. A maker who ends up long or short is usually there from filling other people's orders.
Why do two strikes on the same stock have different implied volatilities?
Each strike is its own contract with its own supply and demand. Skew is the name for the pattern that leaves downside and upside strikes quoted at different volatilities on the very same expiry.
Does rising implied volatility mean the stock will move?
No. Implied volatility is the price of an option restated in percentage terms, and a price is what people are paying today. Realized moves land below or above what the option market charged for them all the time.
Can a market maker tell who is buying?
Electronically, usually not. The tape shows contracts, strikes, expiries, and time stamps, with no customer name attached. On the floor a maker could see the broker in the crowd, and that context went away with the move to screens.
Every panel above ships with the SQL that produced it, so the same measurement can be pointed at any other name or any other week. Ask it in plain English on the Strasmore terminal.