[Quick start]

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

Quick start

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

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

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.

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

2. Minimal script

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

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

Strategy smoke (events for Results → Strategy):

//@version=5
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

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.

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