DocsType Referenceindicators

Indicator Results

Most indicators return a plain number[]. Some return an object with multiple arrays.

Simple Indicators (number[])

SMA, EMA, WMA, DEMA, TEMA, RSI, ATR, CCI, OBV, MFI, VWAP, PPO, WILLIAMSR, ROC, TRIX, PSAR, AO, ADL all return a single number[] array:

const emaValue = ctx.ind.ema[i]; // number

Before the indicator has enough data to compute, the value is NaN. Always check:

if (q.isNaN(ctx.ind.ema[i])) return;

Multi-Output Access Pattern

Multi-output indicators are stored as flat underscore-separated keys in ctx.ind:

// Declared as: ctx.indicator('macd', 'MACD', { ... }) // Accessed as: ctx.ind.macd_line, ctx.ind.macd_signal, ctx.ind.macd_histogram

MACDResult

interface MACDResult { line: number[]; // MACD line signal: number[]; // Signal line histogram: number[]; // MACD - Signal }
const line = ctx.ind.macd_line[i]; const signal = ctx.ind.macd_signal[i]; if (q.crossOver(ctx.ind.macd_line, ctx.ind.macd_signal, i)) { ctx.order.market('ASSET', 1, { signal: 'macd_bullish' }); }

BBandsResult

interface BBandsResult { upper: number[]; // Upper band middle: number[]; // Middle band (SMA) lower: number[]; // Lower band }
const upper = ctx.ind.bb_upper[i]; const lower = ctx.ind.bb_lower[i]; if (ctx.series.close[i] < lower) { ctx.order.market('ASSET', 1, { signal: 'bb_oversold' }); }

DonchianResult

interface DonchianResult { upper: number[]; // Highest high over period middle: number[]; // Average of upper and lower lower: number[]; // Lowest low over period }
const upper = ctx.ind.dc_upper[i]; const lower = ctx.ind.dc_lower[i]; if (ctx.series.close[i] > upper) { ctx.order.market('ASSET', 1, { signal: 'breakout' }); }

StochResult

interface StochResult { k: number[]; // %K (fast stochastic) d: number[]; // %D (slow stochastic) }
const k = ctx.ind.stoch_k[i]; const d = ctx.ind.stoch_d[i]; if (k < 20 && q.crossOver(ctx.ind.stoch_k, ctx.ind.stoch_d, i)) { ctx.order.market('ASSET', 1, { signal: 'stoch_oversold' }); }

StochRSIResult

interface StochRSIResult { k: number[]; // %K line d: number[]; // %D line }
const k = ctx.ind.stochRsi_k[i]; const d = ctx.ind.stochRsi_d[i];

ADXResult

interface ADXResult { adx: number[]; // ADX (trend strength 0-100) pdi: number[]; // +DI (positive directional indicator) mdi: number[]; // -DI (minus directional indicator) }
const adxValue = ctx.ind.adx[i]; // Primary (no suffix) const plusDI = ctx.ind.adx_pdi[i]; const minusDI = ctx.ind.adx_mdi[i];

KeltnerResult

interface KeltnerResult { upper: number[]; // Upper channel middle: number[]; // Middle (EMA) lower: number[]; // Lower channel }
const upper = ctx.ind.kc_upper[i]; const middle = ctx.ind.kc_middle[i]; const lower = ctx.ind.kc_lower[i];

IchimokuResult

interface IchimokuResult { tenkan: number[]; // Tenkan-sen (conversion line) kijun: number[]; // Kijun-sen (base line) senkouA: number[]; // Senkou Span A (leading span A) senkouB: number[]; // Senkou Span B (leading span B) chikou: number[]; // Chikou Span (lagging line) }
const tenkan = ctx.ind.ichimoku_tenkan[i]; const kijun = ctx.ind.ichimoku_kijun[i]; const cloudTop = Math.max(ctx.ind.ichimoku_senkouA[i], ctx.ind.ichimoku_senkouB[i]);
MACDBBANDSDONCHIANSTOCHSTOCHRSIADXKELTNERICHIMOKUresulthistogramsignalupperlowermiddle