Cheatsheet
Quick reference for Strategy Studio — port types, node categories, keyboard shortcuts, and the stateful/clock/gate node list.
A one-page reference. For full detail see the Node Reference and Core Concepts.
Port types
| Type | Kind | Notes | |
|---|---|---|---|
number | level | scalar value/state | |
`number\ | candle` | level | indicator value input; candle reduced via source |
boolean | level | sustained true/false | |
candle | level | one OHLCV bar | |
series<candle> | level | candle history | |
orderIntent | level | from exec.* → risk barrier | |
signal<boolean> | event | one-tick pulse | |
signal<number> | event | one-tick value | |
any | — | escape hatch |
Connect rule: identical OK · any ↔ anything · number\|candle ← number/candle · signal<T> → matching level OK · level → signal<T> REJECTED (use logic.edge).
Node categories
| Category | What |
|---|---|
Data | data.candles, data.mid, data.prices, data.orderbook, data.position, data.balance, data.spotBalance, data.runStats, data.fundingRate, data.fundingCountdown, data.openInterest, data.takerPressure, data.liqVolume, data.timeframe |
Indicator | moving averages (sma/ema/wma/dema/tema/hma/kama/vwma; vwma with hlc3 = rolling VWAP), vwapSession, macd, oscillators (rsi/stochRsi/stoch/cci/willr/mfi/tsi/trix/roc/momentum), stats (zscore/stdev/rvol/realizedVol/percentRank/linreg/highest/lowest; highest/lowest take offset), bands (bollinger/keltner/donchian; donchian takes offset), trend (atr/adx/aroon/vortex/supertrend/psar/obv/ichimoku), pivots, crossover |
Logic | compare ( tolerance for ==/!=), equals, and/or/not, math, constant, text, select, count, edge, cross, barssince, rising, falling, valuewhen |
Clock | bar, everyMs, everyN ( reset input), session (start/end minutes), boundary (new hour/day/week/month), now |
Math | expr, window, clamp, abs, batch |
Gates | gate, latch, toggle (SR latch, reset wins), cooldown (bars/ms pulse throttle), hold, sustain, delay, delayValue |
State | memory, var, extreme (running high/low since reset), first (first live value) |
Risk | killSwitch (cancels resting orders on trip), stop, maxPositionSize, maxFillSize, maxDailyLoss, maxTradesPerDay, preTradeValidate |
Execution | market (fill outputs, retry until filled, total cap), limit (+ managed mode), twap ( pause, fill outputs), targetPosition, closePosition, stopMarket, stopLimit, takeProfit, trailingStop, bracket, sizeByRisk, sizeByEquityPct, notionalToSize |
Debug | probe, plot, log, note |
Order form | number, balance, boolean, string, slider, select, coin, side, button, timeframe, readout, status, gauge |
Developer | dev.js, helper.input, helper.output |
Order nodes share Trigger (fireMode: Once when it turns true (default), Every bar while true, First time only, Every N minutes while true), Only at bar close (fireOnBarClose) and, on market and limit orders, Use available balance.
Keyboard shortcuts
Edit
| Action | Keys |
|---|---|
Copy | ⌘/Ctrl + C |
Paste | ⌘/Ctrl + V |
Duplicate | ⌘/Ctrl + D |
Delete | Del / Backspace |
Undo | ⌘/Ctrl + Z |
Redo | ⌘/Ctrl + Shift + Z |
Select all | ⌘/Ctrl + A |
Canvas
| Action | Keys |
|---|---|
Pan | Wheel / Space + drag |
Zoom | ⌘/Ctrl + Wheel |
Fit to view | F |
Add node | Right-click |
Nudge selection | Arrow keys |
Snap to grid | Toggle ⊞ (toolbar) |
Cancel / deselect | Esc |
This help | ? |
liveStateful nodes (state survives intra-bar ticks)
Timers: clock.everyMs, clock.everyN, clock.boundary. Edges/gates: logic.edge, logic.gate, logic.latch, logic.toggle, logic.cooldown, logic.hold, logic.sustain, logic.delay, logic.delayValue, logic.count. Risk: risk.killSwitch, risk.stop, risk.maxDailyLoss. Exec: every fire-driven exec.* including exec.targetPosition (its fire-edge latch and fill tracking; exec.twap also keeps its slice schedule). State: state.memory, state.var, state.extreme, state.first. Stream-sampled: data.candles, math.window, math.batch, ind.crossover, and several rolling indicators (roc, momentum, zscore, stdev, highest, lowest).
Everything else commits state only at bar close.
Clocks
| Node | Fires |
|---|---|
clock.bar | once per bar close (or HTF override close) |
clock.everyN | once every N bar closes; reset re-anchors the counter (held reset = counter pinned at 0) |
clock.everyMs | on each N-ms wall-clock boundary (intra-bar); warmup-safe |
clock.session | active while inside a time-of-day window (minute precision; overnight wrap follows the START day) |
clock.boundary | once on the first bar close of each new hour, day, week (Mon) or month, on any timeframe |
Event-emitting nodes (no logic.edge needed)
logic.cross (up/down/any), logic.edge (out), clock.bar/everyN/everyMs/boundary (tick), ui.button (pressed), ind.pivots (newHigh/newLow), ind.crossover (cross, a signal<number>).
Gotchas
- Exec nodes default to
fireMode: "edge"— a held-truefireplaces ONE order per rising edge;levelrestores fire-every-tick.signal<>inputs still strictly need an event (logic.edge). sampleModedefaults tobarClose(window, memory, sampled indicators): "period N" = N bars in every mode;change= per-tick opt-in.ui.buttonfires at bar close by default — setemitOn: instant(+fireOnBarClose: falseon the exec) for click-to-trade.- Crosses (
logic.cross,ind.crossover) step on bar-close ticks only. - HTF override must be coarser + integer multiple of the graph timeframe.
- Order under $10 notional is rejected (reduce-only orders are exempt, so dust is closable).
- Funding accrues 0 in backtest — use paper for funding strategies.
dev.jsgraphs can't be published to the marketplace, and file imports containingdev.jsare rejected.