[Drawings]
Interactive chart annotations in AXIS—tools, persistence, and how they differ from Pine script drawings.
Drawings
AXIS supports user drawings (interactive tools on the chart) and script drawings (objects returned by the engine). They share a canvas layer but different lifecycles.
Abstract
| Class | Origin | Cleared when | Persisted |
|---|---|---|---|
| User drawings | Drawing toolbar | Explicit delete / clear | Yes (store.drawings in pynescript.axis.v1) |
| Script drawings | Engine drawings[] | Next Run (re-applied) | No (recomputed) |
Conceptual model
Tools
| Tool id | Kind | Geometry |
|---|---|---|
cursor | — | Select / pan mode (not a drawable) |
hline | hline | Horizontal price |
trend | trend | Two points |
ray | ray | Two points (extends) |
rect | rect | Two corners |
fib | fib | Two points; levels 0, 0.236, 0.382, 0.5, 0.618, 0.786, 1 |
measure | measure | Two points (delta readout) |
text | text | Anchor + label |
Colors: default accent #939fff, up/down/measure variants in DRAWING_COLORS.
Interface surface
- Toolbar on chart host (
DrawingToolbar) - Active tool in store; layer sync via
createEffectonstore.drawingTool - Pane manager hosts price chart; drawings bind to time/price coordinates (not pixel-only)
Workflows
Annotate a level
- Select Horizontal line.
- Click price.
- Reload page—line remains (persisted drawings array).
Fibonacci between swing points
- Select Fib.
- Click swing low → swing high (or reverse).
- Levels render from
FIB_LEVELS.
After Run with Pine lines/labels
- Run script that emits drawings.
- Layer clears previous script drawings, then applies new set.
- User drawings remain.
Internals
| Path | Role |
|---|---|
frontend/src/chart/drawing-types.ts | Tool ids, types, fib levels |
frontend/src/chart/drawing-layer.ts | Interaction + render |
frontend/src/chart/DrawingToolbar.tsx | UI |
frontend/src/chart/pine-drawings.ts | Map engine drawings → layer |
frontend/src/chart/ChartHost.tsx | Mount / dispose |
Invariants
- User drawings ≠ strategy results; deleting drawings does not alter
lastRun. - Time base is bar time (unix-compatible chart times).
cursornever creates geometry.- Persistence omits bars/logs but includes drawings—large freehand-less sets only.
Failure modes
| Symptom | Fix |
|---|---|
| Clicks do nothing | Tool is cursor; chart empty (no bars/time scale) |
| Drawings vanish on Run | Those were script drawings—re-run or convert notes to user tools |
| Lost after wipe | Cleared site data / different browser profile |