SPY is not SPX ÷ 10, and on 0DTE that difference is a whole strike.
Opens straight in the browser. No install, no signup, no key.
The problem · Reading the screen · Pricing a strike · The ratio is a knob · Under the hood
SPY tracks the S&P 500 minus accrued dividends, so it does not sit at exactly one tenth of the index. The real ratio floats around 10.02 to 10.06 and drifts through every quarter.
Which means the reflex, SPX 7430, so SPY 743, is wrong by half a strike. SPY 743 is really SPX 7450. On a 30-day position, shrug. On 0DTE, where the whole trade lives inside two strikes of gamma, that is the difference between the contract you meant and the one you clicked.
TENFOLD does the division for you, against the live ratio, continuously.
Strikes ascend down the page, the way a broker chain reads. Green above spot, red below, so the side you are on is legible from across the room. DEPTH sets how many strikes sit each side of spot, anywhere from ±5 to ±50. The ladder scrolls, centres on spot when it loads or when you change depth, and remembers your choice.
Every quote carries how old the exchange says the print is: 2s ago under a live tick, amber once it drifts past 30 seconds, hours when the market is shut. The spot band carries its own age too, because that is the number people actually read. A figure that stopped updating should say so rather than sit there looking current.
The spot line rides between the two bracketing strikes and drifts inside the gap as price moves, so you watch spot creep toward a strike instead of a divider snapping five points at a time. Both spots sit in the pill.
Then there is the blue dot, which is the whole reason this exists:
SPY SPX EXACT
740 7,420 739.98 ●
740 7,425 740.48
─────── 7,428.78 740.86 ───────
741 7,430 740.98 ●
741 7,435 741.48
Two SPX strikes round onto the same SPY strike, and at a glance they look equally valid. They are not. 7430 → 740.98 is a clean SPY 741. 7435 → 741.48 is half a strike off and is nothing like the same contract. The dot marks the real pair, and its twin is dimmed so it cannot be misread.
Tap any row and it opens in place. No separate calculator, no losing your spot on the ladder.
Type what you paid on SPX and you get two numbers, because there are honestly two.
Divide the premium by the live ratio and you have the premium of an SPY option struck at k / ratio. That is not an approximation, because the payoff scales exactly. The catch is that 740.48 is not listed anywhere.
Moving to the strike your broker actually lists is where the error hides, and most converters silently round it away. Two things pin it down instead:
| The bound | Premium can never move faster than 1:1 with strike, so the listed premium sits within |gap| of the exact one. Calls fall as strike rises, puts rise. No model, no assumptions, always true. |
| The estimate | The bound is worst case. The real slope is dC/dK = −N(d₂), and the premium you just typed already determines the vol that fixes it. TENFOLD bisects Black-Scholes for σ against the 0DTE clock, reads the slope, and walks the gap. |
For the panel in the screenshot above, that is the difference between "somewhere in $0.33 to $0.82" and $0.60, off an implied 19.9% vol and a strike slope of 0.44.
The estimate is clamped inside the bound, and falls back to it whenever no vol solves the premium or the session is over. Treat the output as an anchor for sizing and comparison. It is not a quote.
Spot ÷ spot is only right while both legs quote live. Overnight it is not, because SPX options keep trading on Cboe Global Trading Hours while SPY options and the ^GSPC print stop at the close. An SPX quote taken at 9pm is hours newer than its SPY pair, and no formula reconciles two different timestamps.
So TENFOLD says so, with a banner whenever the session is shut, and the RATIO tile is editable. Calibrate it against any strike you can see quoted on both and every conversion on the page follows. It is persisted, with an auto link to hand control back.
This is also the fix if you are mirroring something other than SPX and SPY.
Because nothing free is fast enough to deserve them.
No public feed quotes options faster than once per second. Yahoo's chain is delayed and only refreshes on request. Everything genuinely real-time (Polygon, Tradier, CBOE, broker APIs) is keyed and paid. Painting delayed numbers in a layout that implies they are live is worse than showing nothing, so TENFOLD shows strikes.
Spot for SPX and SPY refreshes every 3 seconds and is near-real-time. If the relay starts refusing, the poll backs off rather than hammering it, and the status line tells you how long until the next try.
Want real option prices? Replace quote() in index.html with a keyed feed. It is the only function that touches the network.
git clone https://github.com/RatterAU/tenfold.git
cd tenfold
open index.htmlThat is the whole setup. No build, no dependencies, no package.json. Serve it with python3 -m http.server 8000 if you would rather, or drop index.html on any static host.
Sanity-check the maths anytime: open the console and run tenfoldCheck(). It asserts the strike mapping, the best-pair choice, the spot-line geometry, the normal CDF, an implied-vol round trip, the slope signs, the poll backoff schedule, and that the estimate never escapes its bound.
| Size | one file, ~28 KB, zero dependencies |
| Data | Yahoo Finance chart endpoint (^GSPC, SPY), 3s poll, backs off to 30s on failure |
| Ladder | ±5 to ±50 strikes, 5-point SPX grid, spot centred on load |
| SPY grid | $1 strikes, which is what SPY 0DTE actually lists near the money |
| Pricing | exact ratio scaling, plus Black-Scholes implied vol for the listed-strike step |
| Clock | America/New_York, DST handled |
| Theme | light and dark, remembered in localStorage |
| Mobile | responsive to 360px |
Change WIDTH at the top of the script for a different SPX strike spacing. The ladder HTML is diffed between polls, so a tick that changes nothing skips the re-render entirely.
On the CORS relay. Yahoo sends no CORS headers, so the browser reaches it through a public relay: cors.lol, then cors.sh, then allorigins, failing over automatically. Those are free, rate-limited, and run by strangers. Fine for personal use.
A failed poll costs eight requests, two symbols across four relays. At a fixed 3s that is 160 a minute into a service that already said no, which is how you stay throttled once you trip it. So the poll doubles its interval on each failure up to 30 seconds and snaps back to 3s on the first good tick. Returning to the tab retries immediately.
If this ever picks up real traffic the relays will throttle it regardless. The fix is a small Cloudflare Worker proxying Yahoo, then point RELAYS at it. The free tier covers far more than this needs.
No chains, no greeks beyond the one slope it needs, no P/L, no order entry. Strike and price geometry, nothing else.
And SPX and SPY options are comparable, not interchangeable. SPX is cash-settled, European-exercise, 1256-taxed, $100 multiplier. SPY is American-exercise with early-assignment and ex-dividend risk. TENFOLD maps the strikes. It does not claim the two positions are the same trade.
Little tool I built for myself. It is not financial advice, I am not liable for anything you do with it, and the numbers come from a free feed that can be wrong or stale. Check every strike on your broker before you send an order.
MIT licensed. Take it, fork it, do whatever.


