Indicators

66 built-in indicators. Add by id; each registry entry validates its own params.

Adding an indicator

const instanceId = chart.addIndicator('rsi', { period: 14 }, 'bottom')
chart.updateIndicator(instanceId, { period: 21 })
chart.removeIndicator(instanceId)

Overlay indicators

Drawn on the main price pane.

idName
smaSimple Moving Average
emaExponential Moving Average
wmaWeighted Moving Average
hullMaHull Moving Average
mtfmaMTF Moving Average (higher-timeframe MA, non-repainting)
bollingerBandsBollinger Bands
keltnerChannelsKeltner Channels
donchianChannelsDonchian Channels
vwapVWAP
anchoredVwapAnchored VWAP
svwapSession VWAP (resets each day; optional ±σ bands via bands: 1–3)
parabolicSarParabolic SAR
supertrendSupertrend
ichimokuIchimoku Kinko Hyo
pivotPointsPivot Points (Classic)
zigzagZigZag
linearRegressionChannelLinear Regression Channel
chandelierChandelier Exit (ATR trailing-stop levels, long & short)
alligatorWilliams Alligator (3 displaced smoothed MAs: jaw/teeth/lips)

mtfma plots a moving average from a higher timeframe on the current chart — e.g. the daily 50-MA while viewing 1h bars. It averages only completed higher-timeframe closes, so it steps at each boundary and never repaints. Configure period and timeframe from the indicator's gear dialog (or addIndicator('mtfma', { period: 50, timeframe: '1d' })).

Panel indicators

Rendered in their own pane beneath the chart.

idName
rsiRelative Strength Index
macdMACD
stochasticStochastic
stochrsiStochastic RSI (stochastic of RSI; %K/%D, 20/80 bands)
atrAverage True Range
adxAverage Directional Index
cciCommodity Channel Index
mfiMoney Flow Index
williamsRWilliams %R
obvOn-Balance Volume
chaikinOscillatorChaikin Oscillator (exposes cumulative ADL)
voldeltaVolume Delta (directional volume; per-bar or cumulative)
vortexVortex Indicator (VI+ / VI−; trend direction & strength)
chopChoppiness Index (trend vs range, 0–100; >61.8 choppy, <38.2 trending)
uoUltimate Oscillator (3-timeframe momentum, 0–100; 30/70 bands)
fiForce Index (price change × volume, EMA-smoothed; zero-centered)
crsiConnors RSI (composite RSI + streak-RSI + percent-rank, 0–100; 10/90 bands)
coppockCoppock Curve (long-term momentum; WMA of two ROCs; zero-centered)
kstKnow Sure Thing (4 smoothed ROCs weighted 1:2:3:4 + signal line)
elderrayElder Ray (Bull Power / Bear Power vs an EMA of close)
stcSchaff Trend Cycle (MACD via double stochastic, 0–100; 25/75 bands)
kvoKlinger Oscillator (volume-force money-flow + signal line)
fisherFisher Transform (Gaussian-normalized price + trigger line)
dpoDetrended Price Oscillator (isolates cycles by removing the trend)
bopBalance of Power (buyers vs sellers per bar; SMA-smoothed)
massindexMass Index (range-bulge reversal detector; 26.5/27 bands)
cmoChande Momentum (−100…+100 net momentum; ±50 bands)
trixTRIX (triple-smoothed EMA rate of change + signal line)
emvEase of Movement (midpoint move per unit volume; SMA-smoothed)
pvtPrice Volume Trend (cumulative volume weighted by % price change)
wadWilliams A/D (cumulative accumulation/distribution line)
chaikinvolChaikin Volatility (% rate of change of an EMA of the high-low range; zero-centered)
rviRelative Vigor Index (close-vs-open vigor, range-normalized + signal line)
ppoPercentage Price Oscillator (MACD in % terms; line + signal + histogram)
acAccelerator Oscillator (Bill Williams; AO − SMA(AO,5) histogram)
rmiRelative Momentum Index (RSI with a momentum lookback; 30/70 bands)
disparityDisparity Index (% distance of close from its SMA; zero-centered)
qstickQstick (SMA of the close−open body; candlestick sentiment, zero-centered)
pgoPretty Good Oscillator (close−SMA in ATR units; ±3 breakout bands)
awesomeOscillatorAwesome Oscillator
momentumMomentum
rocRate of Change
volumeVolume bars
volumeRocVolume Rate of Change
standardDeviationStandard Deviation
trixTRIX

voldelta (Volume Delta) approximates buy/sell pressure from OHLCV — bars closing up add positive volume, down bars negative. Set mode: 0 for the per-bar delta histogram or mode: 1 for cumulative delta. (A true tick delta needs per-trade bid/ask data, which an OHLCV series doesn't carry.)

Resizable panes

Each panel indicator gets its own pane below the chart. Drag the divider between the main chart and a pane (or between panes) to resize it — the cursor switches to ns-resize on hover, and each pane keeps its own independent price scale. Resize programmatically with chart.setPanelSize:

const id = chart.addIndicator('rsi', { period: 14 }, 'bottom')
chart.setPanelSize(id, 180)   // pane height in px (clamped to a minimum)

Web Worker pipeline

For heavy indicator workloads, offload calculation off the render loop:

import { IndicatorWorkerHost } from '@tradecanvas/chart'

const host = new IndicatorWorkerHost()
await host.ping()
const result = await host.calculate('rsi', bars, { period: 14 })
host.terminate()

Pass null as the worker to use the synchronous fallback (SSR, tests).