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]);
Related
MACDBBANDSDONCHIANSTOCHSTOCHRSIADXKELTNERICHIMOKUresulthistogramsignalupperlowermiddle