A level and a title
The bare minimum.
https://chartmath.com/c?i=NVDA&h=hi:20:20d+high&t=NVDA+daily&by=example
A chart is one URL. Write it from memory, send it to anyone, and it renders live: no install, no account, no screenshot.
The grammar is plain query params. Nothing is base64, nothing is JSON, and a malformed item is skipped and counted rather than blanking the page.
A link can name ChartMath research by its screen slug, and the page draws the backtested entry, stop and target with the win rate and sample size attached.
That last part is the point: the AI never fabricates those numbers, because it never has to write them.
A blank chart with the drawing tools on. What you draw is the URL, and the URL is what you send.
chartmath.com/c/llms.txtopen itThe whole grammar in one plain-text page, under two thousand tokens. Everything below is the same thing, for people.
Each one renders live. Read the URL, then open it.
The bare minimum.
https://chartmath.com/c?i=NVDA&h=hi:20:20d+high&t=NVDA+daily&by=example
Tier 0: the author computes nothing; the viewer does.
https://chartmath.com/c?i=NVDA&tf=D&h=hi:20:20d+high&h=ema:50&box=range:30&tl=swing:hi&ind=ema20&by=example
Tier 1: a base as a box, an authored plan, a note.
https://chartmath.com/c?i=NVDA&tf=D&at=2026-09-04&w=90,20&box=2026-08-11,2026-09-04,207.25,234.75:Range&plan=230.3,222.9,245.1:Swing+long&v=2026-09-04:Screen+fired&n=Range+is+18+bars+at+13%25+height.+Entry+on+a+close+above+it,+stop+under+the+Sep+1+swing+low.&by=example
st= draws the backtested stop and target with win rate and sample size.
https://chartmath.com/c?i=NVDA&tf=D&at=2026-09-04&st=bull-flag-breakout-daily&ep=230.3&by=chartmath
NSE, a marker, anchored text.
https://chartmath.com/c?i=NSE-RELIANCE&tf=W&h=lo:50:50w+low&m=2026-07-20:Reversal+bar:below&txt=2026-06-08,1290:Volume+dried+up+here&by=example
Datetimes, a ray through swing lows, embed mode.
https://chartmath.com/c?i=BTCUSDT&tf=1h&at=2026-09-04T14:00&w=60,10&h=last&ray=swing:lo&theme=dark&e=1&by=example
What the chart is. One of each per URL.
| Param | What it means | Examples |
|---|---|---|
i= SYMBOL or EXCHANGE-SYMBOL | Instrument. A bare symbol resolves US, then India, then Crypto; first hit wins. EXCHANGE-SYMBOL is exact. Required. |
|
tf= D W M 1h 15m 5m 1m | Timeframe. Default D. |
|
at= TIME | Anchor bar. Named references are computed as of the anchor. st= places its entry marker here. Default last bar. |
|
w= before[,after] | Window in bars around the anchor. before ≤ 500, after ≤ 200. Optional; drawings outside it are still drawn but may sit off-screen, so set it to fit explicit dates. Default 120,10. |
|
ind= ema<N> sma<N> bb<N> rsi<N> atr<N> macd vwap, comma-separated | Indicators, max 6. Volume is always shown. |
|
t= text ≤80 | Title. |
|
n= text ≤500 | Note under the chart. Plain text, no links. |
|
by= [a-z0-9_.-]{1,32} | Author. Shown as "drawn by" and carried into the install link as ref=c-<by>. |
|
theme= dark or light | Colour scheme. Default site theme. |
|
e= 1 | Embed: chart only, no header, note, or panel. |
|
What is on the chart. Every one of these repeats, and they draw in the order they appear in the URL.
| Param | What it means | Examples |
|---|---|---|
h= PRICE[@TIME][:LABEL[:COLOR]] | Horizontal level. @TIME starts it at that bar (ray). Default amber. |
|
v= TIME[:LABEL[:COLOR]] | Vertical marker at a bar. Default blue. |
|
box= TIME,TIME,PRICE,PRICE[:LABEL[:COLOR]] or range:N[:LABEL[:COLOR]] | Shaded rectangle: from, to, low, high. Chip shows bars and % height automatically. Default blue. |
|
tl= TIME,PRICE,TIME,PRICE[:LABEL[:COLOR]] or swing:hi / swing:lo | Two-point segment. Chip shows % and bars automatically. Default purple. |
|
ray= same as tl | The same line extended right to the chart edge. |
|
m= TIME:TEXT[:above|below] | Bar marker with text. below (default) is an up-arrow under the bar, above a down-arrow over it. |
|
txt= TIME,PRICE:TEXT[:COLOR] | Anchored text with a pointer to its bar and price. |
|
plan= PRICE,PRICE,PRICE[:LABEL[:COLOR]] | Trade plan: entry, stop, target. Side is inferred from where the stop sits. Draws the three lines, red risk zone, green reward zone, and an R:R chip. Dashed: an authored plan. |
|
st= SLUG[:EXIT_ID] | A plan derived from a ChartMath screen's backtest: entry at ep (or the anchor close), stop and target from the strategy, chip with win rate and sample size. Solid lines. Slug as on chartmath.com/screens; the timeframe suffix may be omitted. One per URL. |
|
ep= PRICE (number) | Entry price for st. Default anchor close. |
|
An authored plan (plan=) is dashed and carries the author's label. A derived plan (st=) is solid and carries the backtest chip. The difference is deliberate: only st= carries evidence, so nobody can draw a level and call it a stop loss as if a backtest produced it.
Eight, fixed. Write the name instead of the number and the viewer computes it from live data, as of the anchor bar. The read layer computes them with the same code, so what an agent reads is what the viewer draws.
hi:N | Highest high of the N bars ending at the anchor. | any PRICE |
lo:N | Lowest low of the N bars ending at the anchor. | any PRICE |
ema:N | EMA of closes, period N, at the anchor. | any PRICE |
sma:N | Simple mean of the N closes ending at the anchor. | any PRICE |
last | Close of the anchor bar (live last price when the anchor is the last bar). | any PRICE or TIME |
range:N | The box spanning the N bars ending at the anchor: lo:N to hi:N. | box only |
swing:hi | Line through the two most recent swing highs (a bar higher than the three bars on each side). | tl and ray only |
swing:lo | Line through the two most recent swing lows. | tl and ray only |
Names only, and every primitive has a default, so you rarely need one: amber · blue · red · green · gray · purple · orange · cyan
40 drawings per URL, title 80 characters, note 500, label and marker text 40, 6 indicators, window 500 bars before the anchor and 200 after. Over a cap is truncated, never rejected.
Three GET endpoints, compact text by default and JSON with fmt=json. An agent that can fetch a URL can look at the bars and the computed structure first, then write explicit numbers.
One instrument: header, N bars (date o h l c v), a structure block (hi/lo 10 20 50, ema 9 20 50 200, sma 50 200, atr14, the last five swing highs and lows, and base: the tightest recent consolidation as from..to low..high, present only when one exists), and the screens it is in today, newest entry first, with the best strategy's win rate, n, SL%, TP% for the newest five. n ≤ 500. Add fmt=json for JSON.
https://chartmath.com/c/read?i=NVDA&tf=D&n=120Every screen: slug, name, timeframe, today's match count, side. Filters: tf, region.
https://chartmath.com/c/read/screens?tf=DToday's matches for one screen, one per line, with entry time, last price, and the best strategy.
https://chartmath.com/c/read/screen/bull-flag-breakout-dailyThe slug is the one on chartmath.com/screens. The timeframe suffix may be omitted, in which case the chart's own tf supplies it. The count is how many instruments are in that screen right now.
ChartMath tracks US equities (NYSE, NASDAQ), NSE, and crypto. Anything else is not tracked yet, and the page says so.
cm screens where NVDA --with-strategy (chartmath-cli) gives you the same research from a terminal.
Add by= with your name to anything you write, so we can see it was you. The full grammar for an agent lives at https://chartmath.com/c/llms.txt.