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

TypeKindNotes
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

CategoryWhat
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

ActionKeys
Copy
⌘/Ctrl + C
Paste
⌘/Ctrl + V
Duplicate
⌘/Ctrl + D
Delete
Del / Backspace
Undo
⌘/Ctrl + Z
Redo
⌘/Ctrl + Shift + Z
Select all
⌘/Ctrl + A

Canvas

ActionKeys
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

NodeFires
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-true fire places ONE order per rising edge; level restores fire-every-tick. signal<> inputs still strictly need an event (logic.edge).
  • sampleMode defaults to barClose (window, memory, sampled indicators): "period N" = N bars in every mode; change = per-tick opt-in.
  • ui.button fires at bar close by default — set emitOn: instant (+ fireOnBarClose: false on 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.js graphs can't be published to the marketplace, and file imports containing dev.js are rejected.