What it isThe five markets that frame almost every macro conversation — gold,
bitcoin, the US 10-year yield, the S&P 500 and crude oil — drawn on ONE shared time axis so you can
see who moved first and who moved the other way.
Why each line is rescaledGold trades near $4,000, the 10-year near 4.6%, the
S&P near 7,400. On one raw axis four of the five would be flat lines. Every series is therefore given
its OWN scale and stretched to fill the canvas — the comparison is shape and timing, not level.
Reading real numbersThe left axis always prints the REAL values of the
ruler ticker with its unit ($/oz, %, index, $/bbl). Tap a line or a pill to move the ruler — that
ticker also becomes candles. Tap empty chart space to go back to all-lines with the S&P ruler.
Scale modesFill = each line stretched to its own high/low (shape). Z-score =
standard deviations on one shared axis, so "+2σ" means the same rarity for every market (divergence).
% = percent change since the window start (who moved most). The choice is saved.
The S&P and Nasdaq lines are FUTURESThe cash indices (^GSPC, ^NDX) print
only 09:30–16:00 New York — 6.5 hours out of 24 — which left 17.5 hours of holes in the line every
day. Since 2026-07-28 these two series are the continuous front-month CME futures, ES=F and NQ=F,
the same instrument TradingView calls ES1! / NQ1!: ~23 hours a session (276 five-minute bars on a Monday
versus the cash index's 78). The only holes left are the real CME daily break (17:00–18:00 New York)
and the weekend. History and daily bars are the same futures back to September 2000, so there is no
cash-to-futures seam anywhere in this app — nothing is stitched, shifted or basis-adjusted.
The 10-year yield is 24 hours^TNX is a CBOE cash index and prints
only 09:30–16:00 New York, so on a 24-hour chart it used to stop dead for 17.5 hours. Treasuries
themselves trade around the clock, so outside the cash session the line is continued from the CBOT
10-year note future (ZN=F): yield = last cash print + beta × (ZN price change). ZN is a
price in points and 32nds and moves inversely to yield, so it is not a substitute — it is a
conversion, and the conversion is stated. Beta (about −0.145 %-yield per price point, the on-the-run
10-year's DV01) is refitted from our own overlapping bars every response by least squares, and the
composite re-anchors at every cash print, so the approximation error (convexity, the cheapest-to-deliver
note changing — basis-point scale over one night) can never accumulate across days. Every synthesised bar
is drawn faded and tagged ZN-implied in the legend, the tooltip, the readout, the CSV and the
live-price tag. No silent blending.
The axis is SPLICED — dead sessions removedMarkets are shut most of the
week, and a true-clock axis spends that space drawing nothing. Any stretch where the ruler ticker has
no bars at all — the weekend, the daily CME halt — is cut out, so Friday's last candle and
Sunday's reopen sit side by side. Each cut is marked on the chart with a dashed line and a tag
(Sat-Sun, 1h halt), and the readout says how many seams and how much time were removed — you
can always see that time is missing. Everything else stays real time: tooltips, the date line, trend
lines and the window span (a "1 week" view still covers one real week, it is just drawn without the dead
space). The threshold is 45 minutes, measured: the live minute data shows ordinary quiet gaps of 2-5
minutes and one real 61-minute CME halt, so 45 min removes the halt and the weekend and nothing else.
… except when Bitcoin is onBitcoin trades straight through the weekend, so
while its pill is on the axis reverts to real clock time and Saturday and Sunday are drawn at
full width — compressing them would throw away the one thing Bitcoin is there to show. Toggling the
Bitcoin pill flips the axis live and re-fits the window. The Splice gaps button is the manual override
for everything else; while Bitcoin is shown it is disabled and says real time. Consequence, stated:
the axis follows the ruler ticker's sessions, so any other series that DID trade inside a spliced
stretch (USD live on a Sunday) has that trading compressed into the seam. Show Bitcoin, or switch splicing
off, to see those hours at full width.
Windows end at the last OPEN sessionNever at the wall clock. US markets are
shut most of the day, so a "last 4 hours" keyed off now would be blank three quarters of the time.
The readout prints the exact anchor timestamp and which instrument set it.
Candle resolutionEach window defaults to the finest candles the source can
actually cover: 1-minute out to a week, 5-minute to a month, hourly to a year, daily for 5 years.
Impossible combinations are greyed out with the reason; a forced downgrade is always printed.
The tape underneathSame data, second perspective. Rows are tickers, columns
are time, colour is that ticker versus its own history (or versus SPX / NAS100 / the rest of the board).
Lines give you the exact path; the tape shows correlation and divergence at a glance.
Trend lines are locked to the DATATurn Draw on, then drag to lay a
hairline. Handles adjust the ends, a tap selects it. Each line stores the time and the real price of
the ticker that owned the ruler when you drew it, and it is redrawn through that ticker's scale every
frame — so it stays glued to its data through zooming, panning, pinching, a window switch
(draw on 1d, it is in the same place on 4h and 1w) and a candle-ticker switch (lines belonging to
other tickers keep their own scale). Lines never expire and never disappear on their own.
Trend-line styleTap any line you drew — the tool does not even need to be on —
and a style bar opens beside it: colour, width (1 / 1.5 / 2 / 3 px), solid / dashed / dotted, opacity.
The next line you draw inherits that style. The style bar also names the ticker the line is locked to.
The default is a 1-px solid line in a colour no market on this chart uses, so an annotation can never be
mistaken for data. The tap zone stays finger-sized no matter how thin the line is, and the styles are
burned into Save-PNG and fullscreen.
Deleting linesOnly you delete a line. Delete removes the selected one;
Delete all lines clears every line on every window and every ticker at once. Both pop a 5-second
Undo at the bottom of the screen, so a mis-tap costs nothing. Everything is saved in this browser
(localStorage), so your lines are still there tomorrow.
Reset viewOne tap refits the selected window edge to edge: the x-axis becomes
exactly that window, the vertical scale returns to 1× with no offset, every line is re-fitted to the window and
the dateline / identified line / candle mode are cleared. Double-tapping the chart does the same (it used
to reset only the vertical view). The button sits in the control bar, in the collapsed phone bar and on the
chart while it is full screen, so it is always one tap away.
Live price lineTap any line and it becomes the identified series — a dashed
horizontal line is drawn at its current price with a colour-matched price tag pinned on the Y ruler,
flashing green or red as it ticks. Only that one series is polled, at the fastest cadence its vendor can
honestly sustain: Bitcoin and USD-live every second (real exchange prints), US equities every 2 s, the CME
futures every 5 s, Yahoo-quoted lines every 10 s. The header prints the actual cadence — no line ever fakes a
1-second tick on a 10-second feed. Tapping empty space removes both the line and its feed.
Pills are names onlyEvery pill is just the readable name — Gold (GC),
Bitcoin, US 10Y Yield, S&P 500 (ES fut), Nasdaq 100 (NQ fut), Crude Oil (WTI), NVIDIA, Semiconductors
(SMH), SK Hynix US, SK Hynix Korea, Dollar Index (DXY), USD Live (USDT/KRW). No exchange code, no price, no
extra buttons on the button. The exact symbol and the last price are in the pill's tooltip, in the legend
burned on the chart, in the readout row under it and in the CSV, so nothing is lost.
One opacity sliderThere is a single Opacity slider and it fades the
last pill you tapped — its label always names the target. Each line still remembers its own
opacity, so you can fade them one at a time and they stay that way. Before you have tapped any pill the
slider is disabled and says tap a pill.
Event dates — the red hairlinesA 1px vertical red line (60% transparent)
marks every FOMC decision day and every mega-cap earnings date. FOMC dates come from the Fed's
own calendar and are stamped on the second day of a two-day meeting, when the statement lands at
14:00 New York. Earnings dates come from Yahoo for AAPL, MSFT, NVDA, GOOGL, AMZN, META, TSLA and AVGO,
anchored on the 16:00 New York closing bell of the report date — they all report after the bell. Hover
or tap a line to name it (FOMC Jul 29, NVDA earnings Aug 26); several events on one date share
one line and stack their labels. An estimated date says (est).
Hiding the event layerThe Events button in the control bar turns the whole
layer off — zero lines, not faded ones — and the choice is saved in this browser. The dates
themselves live in a record-first store on the server: the Fed calendar is re-read weekly, the earnings dates
daily, and nothing is ever refetched or overwritten once it has happened.
Events and the spliced axisAn event line is projected through exactly the same
time map the price lines use, so it can never land a column out. The one special case is an event that falls
inside a stretch the axis removed (a weekend-dated print, a holiday): it snaps to the nearest kept
column — the last bar before the gap or the first after it — so a hairline always sits on
tradeable time rather than in the middle of a gap mark.
Fading everything but one lineThe Others slider fades every line
except the one you last clicked (or the last pill you tapped) — a one-motion spotlight. It
multiplies the per-line opacities rather than replacing them, so putting it back to 100% restores exactly
what you had. The S&P 500 and NAS100 reference lines are never faded by it, because a benchmark you
cannot see is not a benchmark.
Minimizing the boxesTwo things can be shrunk out of the way. Tickers ▾
collapses the whole pill box to a single tab that still says how many tickers are showing. Legend
cycles the box burned in the chart's bottom-left corner through full (name, price, feed, session),
min (colour chip and name only) and off. Both are saved in this browser, and whatever the
legend is showing is what a saved PNG contains.
Chips on the chart, not in a barThe actions that belong to the chart sit
on the chart, in its top-right corner, as tiny two- and three-letter chips: fit/z/% switches the
Y-scale mode (the chip shows the mode it will switch to), fs full screen, png saves the image,
rst resets the view and end appears only while the drawing tool is armed and leaves it. They
look tiny but their touch targets are full thumb size, and each one's plain-English meaning is in its
tooltip. They are HTML over the canvas, so a saved PNG never contains them.
Full screen really is full screenfs hands the chart the whole physical
screen through the browser's own full-screen mode, so the address bar and tabs disappear rather than just
being filled around. The tiny B at the top centre brings the browser back (Esc does too, on a
keyboard). Where a browser refuses — iOS Safari only grants full screen to video — the chart
falls back to filling the browser window and the B button's tooltip says so.
Scrolling the page on a phoneA finger on the chart pans and zooms the
chart, which used to leave nowhere comfortable to scroll a long page. The strip down the
left edge of each canvas — over the axis labels, where nothing is ever drawn — is
reserved for the page: swipe there and the page scrolls, never the chart. It is marked with a faint
↕.
ColoursThe lines you can see always wear the most distinct colours available —
red, blue, black, green, orange, purple, then greys and further-apart hues — and they are re-assigned every
time you switch a pill on or off, so two visible lines are never similar shades. The S&P 500 keeps its
reserved dark blue and the Nasdaq 100 its dark purple; no other line is allowed near those.
Touch — direct manipulationOne finger drags the chart both ways: sideways
through time and up/down to move the vertical view. Two fingers pinch or spread, and the gesture is split by
axis — spreading them apart sideways zooms time, up and down stretches the values, and a
diagonal does both at once, always anchored on the point between your fingers. A tap identifies a line, a tap
on empty space clears it, a long press drops the all-series date line, and a double tap is Reset view —
the whole window refitted edge to edge (it used to reset only the vertical scale).
MouseWheel = zoom time, shift + wheel = stretch the values about the cursor,
drag = pan both axes, shift-click = the all-series date line, double-click = Reset view (the window
refitted edge to edge). The Y slider in the control bar and the pinch gesture drive the same number and stay
in lockstep.
Where the live price comes fromGold, crude and now the S&P and Nasdaq
series themselves (ES=F / NQ=F) ride the paid Massive Futures Advanced real-time CME feed (~1–2
minutes behind the tape). Yahoo's same futures symbols are ~10 minutes behind, so Massive leads them by
about nine minutes. Bitcoin and the 10-year yield stay on Yahoo because that tier is not entitled to them
— Massive's crypto and index endpoints answer delayed or 403. That entitlement gap is one more
reason the index series are the futures: the futures ARE on the real-time feed, the cash indices never
were. The header names the live feed per ticker; hover it for the exact lag and the reason for each.
Data + storageEvery fetch tail-extends a local store
(data/bars/), so this app keeps more 1-minute and hourly history than Yahoo will ever
serve again. Each stored bar carries its own source tag, one row per time bucket — the two feeds can
never double-count a minute, and the real-time bar always wins. If Massive errors or rate-limits, that
symbol silently falls back to Yahoo for that cycle and the chart never blanks. The page re-polls a
light endpoint every ~25s without moving your view.