DocsType Referenceindicators

Indicator Types

Indicators are declared in init() and computed automatically by the engine before onBar() runs. They are accessed via ctx.ind[name].

Available Indicators

Moving Averages

TypeNameResultKey Options
SMASimple Moving Averagenumber[]period, source
EMAExponential Moving Averagenumber[]period, source
WMAWeighted Moving Averagenumber[]period, source
DEMADouble Exponential Moving Averagenumber[]period, source
TEMATriple Exponential Moving Averagenumber[]period, source

Trend

TypeNameResultKey Options
MACDMoving Average Convergence DivergenceMACDResultfastPeriod, slowPeriod, signalPeriod
ADXAverage Directional IndexADXResultperiod
PSARParabolic SARnumber[]step, max
ICHIMOKUIchimoku CloudIchimokuResulttenkanPeriod, kijunPeriod, senkouBPeriod
TRIXTriple EMA Oscillatornumber[]period, source

Momentum / Oscillators

TypeNameResultKey Options
RSIRelative Strength Indexnumber[]period, source
STOCHStochastic OscillatorStochResultkPeriod, dPeriod
STOCHRSIStochastic RSIStochRSIResultrsiPeriod, stochPeriod, kPeriod, dPeriod
CCICommodity Channel Indexnumber[]period
WILLIAMSRWilliams %Rnumber[]period
ROCRate of Changenumber[]period, source
AOAwesome Oscillatornumber[]fastPeriod, slowPeriod
PPOPercentage Price Oscillatornumber[]shortGamma, longGamma, accuracy

Volatility

TypeNameResultKey Options
BBANDSBollinger BandsBBandsResultperiod, stdDev, source
ATRAverage True Rangenumber[]period
DONCHIANDonchian ChannelDonchianResultperiod
KELTNERKeltner ChannelsKeltnerResultperiod, multiplier

Volume

TypeNameResultKey Options
OBVOn-Balance Volumenumber[]
MFIMoney Flow Indexnumber[]period
VWAPVolume Weighted Average Pricenumber[]
ADLAccumulation/Distribution Linenumber[]

Common Options

interface IndicatorOptions { period?: number; source?: 'open' | 'high' | 'low' | 'close' | 'volume' | 'hl2' | 'hlc3' | 'ohlc4'; fastPeriod?: number; slowPeriod?: number; signalPeriod?: number; stdDev?: number; kPeriod?: number; dPeriod?: number; multiplier?: number; step?: number; max?: number; tenkanPeriod?: number; kijunPeriod?: number; senkouBPeriod?: number; rsiPeriod?: number; stochPeriod?: number; }
OptionUsed ByDescription
periodMost indicatorsLook-back window
sourceSMA, EMA, WMA, DEMA, TEMA, RSI, ROC, TRIX, BBANDSPrice source ('close' default)
fastPeriodMACD, PPO, AOFast component period
slowPeriodMACD, PPO, AOSlow component period
signalPeriodMACD, PPOSignal line period
stdDevBBANDSStandard deviation multiplier
kPeriodSTOCH, STOCHRSI%K period
dPeriodSTOCH, STOCHRSI%D period
multiplierKELTNERATR multiplier for band width
stepPSARAcceleration factor increment
maxPSARMaximum acceleration factor
tenkanPeriodICHIMOKUConversion line period
kijunPeriodICHIMOKUBase line period
senkouBPeriodICHIMOKUSenkou Span B period
rsiPeriodSTOCHRSIRSI calculation period
stochPeriodSTOCHRSIStochastic lookback period

Declaration Examples

function init(ctx) { // Moving averages — result is number[] ctx.indicator('sma20', 'SMA', { period: 20, source: 'close' }); ctx.indicator('dema', 'DEMA', { period: 21, source: 'close' }); // Oscillators — result is number[] ctx.indicator('rsi14', 'RSI', { period: 14 }); ctx.indicator('cci', 'CCI', { period: 20 }); ctx.indicator('willr', 'WILLIAMSR', { period: 14 }); // Volatility — result is number[] ctx.indicator('atr14', 'ATR', { period: 14 }); // Trend — compound result ctx.indicator('macd', 'MACD', { fastPeriod: 12, slowPeriod: 26, signalPeriod: 9, }); ctx.indicator('adx', 'ADX', { period: 14 }); ctx.indicator('psar', 'PSAR', { step: 0.02, max: 0.2 }); ctx.indicator('ichimoku', 'ICHIMOKU', { tenkanPeriod: 9, kijunPeriod: 26, senkouBPeriod: 52, }); // Bands — compound result ctx.indicator('bb', 'BBANDS', { period: 20, stdDev: 2, source: 'close' }); ctx.indicator('dc', 'DONCHIAN', { period: 20 }); ctx.indicator('kc', 'KELTNER', { period: 20, multiplier: 2 }); // Stochastic family — compound result ctx.indicator('stoch', 'STOCH', { kPeriod: 14, dPeriod: 3 }); ctx.indicator('stochRsi', 'STOCHRSI', { rsiPeriod: 14, stochPeriod: 14, kPeriod: 3, dPeriod: 3, }); // Volume — result is number[] ctx.indicator('obv', 'OBV', {}); ctx.indicator('mfi', 'MFI', { period: 14 }); ctx.indicator('adl', 'ADL', {}); }

Using Parameterised Periods

The most common pattern — use ctx.p so the optimizer can tune indicator periods:

function define(ctx) { ctx.param('period', { type: 'int', default: 14, min: 5, max: 50, optimize: true }); } function init(ctx) { ctx.indicator('ema', 'EMA', { period: ctx.p.period, source: 'close' }); }
indicatorSMAEMAWMADEMATEMARSIMACDBBANDSATRDONCHIANSTOCHSTOCHRSIADXCCIWMAVWAPOBVMFIPPOWILLIAMSRROCTRIXPSARKELTNERICHIMOKUADLAOtypes