Quick start

First historical load, first Pine Run, live stream, and reading the Results drawer in AXIS.

This page

Quick start

Fifteen-minute path from empty AXIS to plots, strategy stats, and optional live updates.

AXIS is a charting app you run in the browser (or install as a PWA / desktop app). You pick where candles come from, whether they keep updating, who runs your Pine Script™, and where scripts are saved. The status bar uses short chips for those four planes:

ChipMeans
SRCSource — historical candles (Binance REST, CSV, mock, …)
STRStream — live ticks while Live is on (WebSocket or mock poll)
ENGEngine — who calculates (this tab / a local server / a Worker)
STOStorage — where scripts live (this browser, cloud, or git)

Abstract

  1. Ensure AXIS is running (Installation).
  2. Load bars for a symbol.
  3. Paste or write a minimal indicator / strategy.
  4. Run → inspect chart overlays + Results.
  5. Optionally enable Live.

Conceptual model

Diagram

Rendering…

Interface surface

1. Load history

Topbar fields that matter:

ControlDefault-ishNotes
SymbolBTCUSDTVenue-specific for binance-rest
Interval1dWatchlist + chart share interval vocabulary
Sourcebinance-restOr mock / CSV
Streambinance-wsPaused until Live
Engineserver or pyodideSettings for endpoint

Click Load (or pick a watchlist row). Status bar should move through loading → ready with bar count context.

AXIS after Load: BTCUSDT candles, volume, and RSI pane Load history then Run an RSI script

CSV path: Source = CSV upload → pick file when prompted → bars inject via upload store.

Deep history: for multi-page backfill to a past date (background, with gap validation), open the Data panel — see Data Source Manager.

2. Minimal script

Open the editor (docked right by default). Example indicator:

//@version=6
indicator("AXIS smoke", overlay=true)
plot(close, "close")
plot(ta.sma(close, 20), "sma20")

Strategy smoke (events for Results → Strategy):

//@version=6
strategy("AXIS strat smoke", overlay=true)
longCond = ta.crossover(ta.sma(close, 10), ta.sma(close, 30))
if longCond
    strategy.entry("L", strategy.long)
if ta.crossunder(ta.sma(close, 10), ta.sma(close, 30))
    strategy.close("L")

Language semantics: PYNE runtime.

3. Run

Run (topbar or editor). Pipeline:

  1. Active engine run({ script, bars, config })
  2. lastRun stored in memory (not fully persisted)
  3. Results drawer opens
  4. Chart applies overlay lines, trade markers, Pine drawings

Success: status “Completed in Nms”; plots on price pane (or dedicated indicator pane if non-overlay).

4. Read Results

Results Strategy tab after an SMA Cross run: stats, equity, closed trades

Tabs:

TabContent
EventsNormalized entry/exit/order stream
StrategyClosed trades + win rate, PF, max DD
PlotsSeries names, point counts, last value
MetricsRuntime, engine, bar count, errors
RawFull JSON payload

Export: JSON run dump; trades CSV. Click a trade to scroll the chart to entry/exit time.

5. Live (optional)

Toggle Live. Stream plugin pushes bars; AXIS may re-run silently when needsRerun is set. Stream = None freezes time. Mock poll works offline after engine warm-up.

6. Save a script (optional)

Manager → Script Library → name → Save. Backend is active storage (local default = IndexedDB). See Script library. Editor Pull / Push uses the same storage when configured for git/cloud.

7. Power tools (optional)

ToolWherePurpose
⌘/Ctrl+KGlobalCommand palette — panels, Run, layout, editor toggles
Workers ManagerTopbar activity · ⌘KBackend health, presets, PYNE Agent install
LayoutsTopbarMulti-chart 1 / 2H / 2V / 4 + recipes
ReplayTopbarScrub history (full bars, cursor on last)
CompareTopbarSecond symbol overlay
Price decimalsPrice-pane scaleAuto or 0–8 — Charting
Debug / PinsEditor headerLine chips vs chart markers — Debugging
Layers / AlertsPanel togglesDrawings list; local price alerts
v6 starter packScript Library → Importexamples/script-library-starter.json

Worked example: offline lab

SettingValue
Sourcemock-walk
Streammock-poll
Enginepyodide
Storagelocal

Load → Run smoke indicator → toggle Live. No Flask required.

Worked example: desk + Flask

SettingValue
Sourcebinance-rest
Streambinance-ws
Engineserver
Endpointhttp://localhost:5002
Storagelocal

make run in repo root; Vite or static AXIS as installed.

Invariants

  • Empty editor Run is a no-op.
  • Errors set status error and still populate Results Metrics/Raw when payload exists.
  • Switching source auto-aligns default stream (e.g. mock-walk → mock-poll).

Failure modes

SymptomAction
CORS on /runFix ALLOWED_ORIGINS / use Pyodide
No trades in StrategyNeed entry+exit pair events; open strategy script
Live no updatesStream not none; network; check logs drawer
Pyodide first run slowExpected warm-up; assets self-hosted under origin

See also