weather

gold · BTC · US 10Y yield · S&P 500 · crude oil — plus New York City and Seoul air temperature as toggleable background series, on the same shared time axis hubbasicsdecouplandscapefxratioxyzweather loading…
Weather — gold · BTC · US 10Y · S&P 500 · crude + NYC & Seoul temperature on one shared time axis The /basics macro board with two air-temperature series added. The markets are priced in completely different units ($4,000 gold vs a 4.6% yield vs a 7,400 index) and temperature is not a price at all, so every line is rescaled — what you are comparing is shape and timing. The numbers down the left edge are the real values of the ruler ticker (the one in candles). The temperature lines always keep their own °C scale and can be broken out into their own indicator pane under the chart.
Chart controls — drawing, scale, splice, events, legend, reset, full screen and PNG are ON each chart, top-right
100% 70% 100%
↕ drag to resize chart height
Temperature pane — NYC & Seoul air temperature (°C)
↕ drag to resize temperature pane height
Stretch tape — every ticker vs its own history
↕ drag to resize tape height
How to read this — and where every number comes from
What it isThe /basics macro board — gold, bitcoin, the US 10-year yield, the S&P 500 and crude oil (plus semis, the dollar index and a live USD gauge) — with the air temperature in New York City and Seoul drawn on the same shared time axis.
Two temperature pillsNYC and Seoul are ordinary toggleable series: tap the pill to show or hide, drag its slider for that one line's opacity, tap the line to identify it. They are drawn as thin 1-px solid background lines in deliberately muted colours no market on this chart uses, so a temperature can never be mistaken for a price.
Overlay or its own paneThe Temperature control switches between Overlay (temperatures drawn on the price chart, the house SPX-background pattern) and Pane (broken out into their own flush-stacked indicator pane with a real °C axis and its own height grip). The pane reuses the stock plot's exact horizontal bounds, so the same timestamp lands on the same pixel. Pan, zoom and the date line stay shared across every canvas either way. The choice is saved.
The °C scaleTemperature never joins the price scale. Shared °C puts both cities on ONE °C axis so NYC and Seoul are directly comparable (the default). Own fill stretches each city to its own high and low, which compares shape only. Either way the axis ticks print real °C.
Observations only — no forecastOpen-Meteo will happily return tomorrow. Every point at or after the current time is dropped, deliberately: this is an observation chart, and no price series next to it has a forward leg either.
ResolutionMax detail uses the highest available: 15-minute points out to a week, hourly out to a quarter, and the ERA5 daily mean (with that day's max/min) for 1-year and 5-year windows. Daily avg forces one mean temperature per day for every window. The readout prints how many points a window expected versus how many it got.
15-minute honestyOpen-Meteo only has a native 15-minute model over North America and Central Europe. NYC's 15-minute points are real model output (HRRR); Seoul's are interpolated from the hourly model — the payload and the readout say so per city rather than letting you assume Korea has a 15-minute observation network.
How live is "current"Open-Meteo's current-conditions field refreshes about every 15 minutes at source. The header shows the age of the last observation and calls it near-live — it is never labelled real time, because it is not.
Deep historyThe 5-year window is real ERA5 reanalysis, not a stub. The reanalysis lands a few days behind, so the most recent days are derived from the hourly observations we already hold and today is flagged partial — the line reaches the live edge without pretending today is a finished day.
Where the market data comes fromStraight from /apps2/basics/data.php — the same endpoint and the same store the /basics page uses. Gold, crude and the ES / NQ futures legs ride the paid Massive Futures Advanced feed, US equities ride Alpaca, bitcoin's edge is the Coinbase last trade and the USD gauge is Upbit; Yahoo carries history and everything not entitled. Nothing is fetched twice.
Why each market 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, °C). Tap a line — or its row on the tape — to move the ruler; that series also becomes candles. Tap empty chart space to go back to all-lines with the S&P ruler. The pills just switch a series on or off.
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. The only holes left are the real CME daily break and the weekend. Daily history is the same futures back to September 2000, so there is no cash-to-futures seam anywhere — 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. Temperature has no session, so it simply runs to the newest observation inside the same window.
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). Temperature joins the tape in the two scale-free modes (own history, vs own mean) and is left out of the ratio-based modes, where a "% change" on a °C scale that crosses zero would be meaningless.
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 value of the series that owned the ruler when you drew it, and it is redrawn through that series' 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 never expire and never disappear on their own.
Deleting linesOnly you delete a line. Delete removes the selected one; Delete all lines clears every line on every window and every series 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.
Pills are names onlyEvery pill is just the readable name — no exchange code, no price, no extra buttons on the button. The exact symbol and the last value are in the pill's tooltip, in the legend burned on the chart, in the readout row under it and in the CSV. There is a single Opacity slider and it fades the last pill you tapped (its label names the target); each line still remembers its own opacity.
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 default is a 1-px solid line in a colour no series on this chart uses, so an annotation can never be mistaken for data.
Reset viewOne tap refits the selected window edge to edge on every canvas: the x-axis becomes exactly that window, both vertical scales (price chart and temperature pane) return to 1× with no offset, every line is re-fitted and the dateline / identified line / candle mode are cleared. Double-tapping either 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 a chart while it is full screen.
Live value lineTap any line and it becomes the identified series — a dashed horizontal line is drawn at its current value with a colour-matched tag pinned on that canvas's ruler, flashing green or red as it moves. Only that one series is polled, at the fastest cadence its source can honestly sustain: Bitcoin and USD-live every second, US equities every 2 s, CME futures every 5 s, Yahoo-quoted lines every 10 s, and a temperature every 60 s because Open-Meteo itself only refreshes about every 15 minutes. The header prints the real cadence — nothing fakes a tick it does not have. Tapping empty space removes the line and its feed.
Names, not codesEvery series is labelled with its readable name — NYC °C, Seoul °C, Gold (GC), Bitcoin, US 10Y Yield, S&P 500, Nasdaq 100, Crude Oil (WTI), NVIDIA, Semiconductors (SMH), SK Hynix US, SK Hynix Korea, Dollar Index (DXY), USD Live (USDT/KRW) — in the pills, on the chart, in the tooltip, in the tape rows and in the readout. The exact exchange symbol stays in small print beside the name and in the CSV.
Event dates — the red hairlinesA 1px vertical red line (60% transparent) marks every FOMC decision day and every mega-cap earnings date, on the price chart and on the temperature pane (they share one x-axis). 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. 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 turns the whole layer off — zero lines, not faded ones — and the choice is saved in this browser. The dates come from the same record-first store /basics uses (../basics/events.php): one writer, one store, both pages. The Fed calendar is re-read weekly, the earnings dates daily, and nothing is refetched 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. An event that falls inside a stretch the axis removed (a weekend-dated print, a holiday) 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.
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.
Minimizing the boxesSeries ▾ collapses the whole pill box to a single tab that still says how many series are showing. Legend cycles the box burned in each chart's bottom-left corner through full, 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 a chart sit on it, 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 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 canvas 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 a canvas pans and zooms that chart, which used to leave nowhere comfortable to scroll a long page. The strip down the left edge of every canvas — over the axis labels, where nothing is 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 — 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. The two temperatures stay deliberately muted while they sit on the price canvas as a background series, and join the distinct palette in Pane mode, where they are first-class lines on their own canvas.
Touch — direct manipulationOne finger drags a canvas 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 — apart sideways zooms time, up and down stretches the values, diagonal does both, 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.
Each canvas has its own vertical scaleStretching or dragging the price chart moves the price scale; doing it inside the temperature pane moves the °C scale — they never fight each other. Time is always shared: a sideways pinch or drag on any canvas moves all of them together, and the date line lands on the same moment everywhere.
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 on the price chart drive the same number, in lockstep.
Data + storageTemperature is stored record-first in weather/data/bars/, tail-extended by floored timestamp with a per-point source tag (Open-Meteo forecast API vs ERA5 reanalysis). Open-Meteo only serves 92 past days at any resolution, so the store accrues 15-minute history the vendor will not re-serve — exactly like the /basics candle store.
apps2 · weather — S&P 500 = ES=F and Nasdaq 100 = NQ=F (continuous front month, ~23h a session); the 10Y is 24h: ^TNX cash + ZN-implied off-session · market data read from /apps2/basics's endpoint and store (single writer, never fetched twice) · temperature from Open-Meteo (max-detail 15-minute / hourly or selectable daily average; ERA5 archive daily), observations only, no forecast bars · apps2 hub