ReadonlyperiodReadonlyplacementWhere the indicator renders (overlay vs. its own pane).
Optional ReadonlypriceWhich price scale an overlay-placement indicator projects through
(B2). 'right' (the default when undefined) is the primary scale
shared with the price series; 'left' binds the indicator to the
independent secondary scale, which the chart enables — reserving the
left axis strip — only while at least one indicator requests it.
Ignored for pane-placement indicators (they own their sub-pane axis).
Subclasses opt in by overriding this getter (or declaring a matching
readonly field).
Stable human-readable identifier, e.g. sma(20) or rsi(14). Used as
the cache key by the IndicatorRegistry and as a label in legends.
Read the buffer and return one or more aligned series. Every returned
Float64Array MUST have the same length as buffer.length so the
renderer can align values with candles index-for-index.
Memoized wrapper around compute. Returns the same cached array
reference while the SAME buffer's version and length are unchanged.
The buffer identity is part of the key so reusing one indicator
instance across two buffers (or swapping a chart's buffer) never
returns another buffer's stale series — important right after init when
distinct buffers can share version: 0 and the same length.
When the data did change but only via a single realtime tick — an
updateLast (same length) or one append (length + 1) on the SAME
buffer with an unmoved head (firstTime unchanged) — and the
subclass provides an updateTail hook, the tail is patched in O(tail)
instead of recomputing the whole series in O(n). firstTime is part
of the key precisely so a prepend/evictHead (which shifts the head
and renumbers every index) can never be mistaken for an append/update
and forces a full recompute.
Use this on render paths; use compute directly to force a fresh
computation.
ProtectedupdateIncremental tail patch. SMA at index i is just the mean of the
window [i-period+1, i], all of which are input closes still present
in the buffer — no dependence on any prior output value. So we copy
the untouched prefix and recompute the single touched index directly
from its window. If i is in the warmup region (i < period-1) the
value stays NaN (already present in the copied prefix on updateLast,
or appended explicitly here).
Simple Moving Average over the last
periodclosing prices. Renders as a line overlay on the main price pane.