OPEN-SOURCE SCRIPT
Aggiornato

Atty Expected Move Cone

227
A 0DTE option prices one thing: how far price can travel between now and this afternoon's settle. That number shrinks all day, because the time it is paying for is running out. This draws it.

The cone opens at the current price and reaches the session close. Its width there is the expected move still to come. As the session runs the cone re-anchors to price and the whole thing contracts, arriving at the closing bell with nothing left - the same shape an option's time value traces, for the same reason.

THE CLOCK IT USES

How much of a session's variance is still ahead is not the same as how much of the clock is still ahead. Measured on 997 ES sessions, 2021 to 2025:

first hour 28.0% of the session's variance
12:00 to 14:00 20.9%
last hour 16.0%
a flat clock would say 15.4% per hour

The opening fifteen minutes alone carry 8.5%, more than twice their share. So the cone decays on a variance clock built from that profile, not on the wall clock.

Tested against what actually happened, the variance clock keeps the normalised move far steadier across the day than clock time does - a dispersion of 0.029 against 0.064 over the fitting period, and it still wins on a year held back from the fitting. Clock time is available as an input for comparison, and it is the wrong answer: it draws the cone too wide at midday and too narrow into the close.

WHERE THE LEVEL COMES FROM

The shape is measured here. The level is whatever you feed it.

- 1-day volatility index. VIX1D is 1-day implied volatility on the S&P and is the right instrument for ES and SPX. Converted to a one-session move as index / 100 / sqrt(252).
- Manual expected move. Type the 0DTE straddle, in points or percent, from an options board. One number a morning.
- Realised trailing. Dispersion of the symbol's own open-to-close moves. No options needed, works on anything.

THE PREMIUM IS SHOWN, NOT HIDDEN

The table reports the implied move as quoted, the calibrated one, and the trailing ratio of realised to implied.

On ES that ratio sits near 0.40, and it matters what is inside it. Part is the volatility premium, which is real. Part is simply that VIX1D prices a whole calendar day while this cone spans the regular session only, so the index is answering a wider question than the one being asked. Calibration is therefore on by default: left off against a volatility index the cone is roughly two and a half times too wide for a regular session. A 0DTE straddle typed in by hand does not have that mismatch, since it expires at the settle and prices exactly this window.

I have not decomposed that ratio into its two parts. Doing so needs a history of the volatility index, and until it is done the calibration is an empirical correction that works rather than a number I can claim to understand.

THE BANDS

Drawn at measured containment rather than Gaussian multiples. Over 18,563 observations on the fitting period the 68th percentile of the outcome sits at 0.88 sigma and the 95th at 2.31, against the Gaussian 1.00 and 2.00 - sharply peaked with a long tail. The held-back year returned 0.80 and 2.07. Both are inputs; set them to 1.00 and 2.00 for plain Gaussian bands.

WHAT IS ASSUMED

That the variance profile measured on ES between 2021 and 2025 describes today. It is a four year average and a genuinely unusual session will not obey it. The profile is fixed in the code rather than learned live, so re-measure it before trusting this on another contract.

Nothing here forecasts direction. The cone is centred on the current price because that is the honest centre.

Runs on intraday charts. This measures and draws - there are no entries, stops, targets or signals, and nothing here is evidence of a trading edge.
Note di rilascio
v1.1 - the cone now learns from today. The variance the session has actually delivered is measured as it goes, from intrabar returns, which is what lets a 5-minute chart learn from 1-minute price action. It is blended into the ex-ante estimate with a weight that rises from 0.49 at the open to 0.89 at the close. On a year held back from the fitting, this lifted the rank correlation between the width drawn and the move that followed from 0.255 to 0.465. Weighting realised alone scored 0.485 on that year and 0.443 on the fitting period, a tie with the blend, so the shrinkage is kept as insurance for the first minutes rather than because it wins. Both weights are inputs. The cost, stated: the normalised residual becomes slightly less uniform across the hours of a day, 0.063 to 0.086 on that year. The cone tells one day from another much better, and is a little less even within a day. Also in this version: on a live bar the cone reads the wall clock rather than the bar timestamp, so it contracts smoothly instead of in whole-bar steps. Two table rows were added, reporting how today compares with a typical session and how much weight sits on realised. Where TradingView will not serve intrabar data the script falls back to chart-resolution returns and the table says so.
Note di rilascio
v1.3 - the realised lookback default changes from 20 sessions to 120, and four optional diagnostic rows are added.

WHY

The cone's level is the trailing ratio of realised move to implied move, applied to today's implied. That ratio is a ratio of dispersions, and 20 sessions is far too few to pin one down. Scored walk-forward on 825 ES sessions against VIX1D history, with a later period held back:

lookback 20 - ratio sd 0.124, 5th-95th spread 1.75x, 13.0% of sessions more than 2x too narrow
lookback 60 - 0.078, 1.41x, 10.7%
lookback 120 - 0.051, 1.29x, 9.3%
lookback 250 - 0.033, 1.15x, 8.7%

Every length from 40 up beats 20 on a proper scoring rule with the bootstrap confidence interval clear of zero. 120 is the new default because it is the only setting that came out unbiased in both the fitting period and the held-back one (1.00 and 0.99). Longer scores slightly better and runs about 5% wide.

To be clear about what was wrong: 20 was not biased. Averaged over 1,075 sessions it sized correctly. It was unstable, and the tail is what bites - a three-week lull in September 2026 put the 20-session ratio at 0.40, lower than any reading in 825 sessions, and the cone opened at roughly half the width the options market was paying for that day.

The ratio also decomposes now. On ES it sits near 0.70, which is about 0.74 for VIX1D pricing a whole calendar day against an RTH cone, multiplied by about 0.88 for realised coming in under implied. The earlier description quoted 0.40 as though it were the resting value. It was a short-window artifact.

DIAGNOSTICS

A new input, off by default, adds four rows: trailing realised absolute move, trailing implied absolute move, today's implied, and the number of completed sessions actually in the sample. The last one matters - the lookback quietly takes whatever the chart has, and a 5-minute chart may only reach back 75 sessions where a 30-minute chart reaches 437.

RECOMMENDED SETTINGS

Session - Auto. It picks the day session the contract actually keeps: 09:30-16:00 equity index, 09:00-14:30 crude, 08:20-13:30 gold.
Source - Auto. VIX1D on ES and NQ, realised dispersion on crude and gold, because a 1-day implied volatility index exists for equity index and nowhere else.
Realised lookback - 120, on a 15-minute chart or higher so the sample is actually there.
Calibrate to realised - on.
Learn from realised variance - on, intrabar timeframe 1 minute.
Bands - 0.88 and 2.31, which is measured containment. Set 1.00 and 2.00 for plain Gaussian.
If you have an options board, type the 0DTE straddle into Manual expected move instead. It expires at the settle, so it prices exactly this window and carries no coverage mismatch.

Measurement only. No entries, stops, targets or signals.
Note di rilascio
v1.3.1 - chart image only. The listing image was replaced with a clean chart: the cone on its own, no other indicators. No change to the code or the defaults.

Declinazione di responsabilità

Le informazioni e le pubblicazioni non sono intese come, e non costituiscono, consulenza o raccomandazioni finanziarie, di investimento, di trading o di altro tipo fornite o approvate da TradingView. Per ulteriori informazioni, consultare i Termini di utilizzo.