Skip to main content

Indicators & data

Who it’s for
Anyone building a condition, and anyone who thought the platform only had four indicators
Assumes
You know what an indicator is
Correcting earlier documentation

Earlier docs listed four indicators, RSI, EMA, Bollinger Bands and MACD. The engine carries more than sixty technical indicators, twenty candlestick and chart patterns, thirty-one named knowledge-base signals, and a catalogue of alternative and fundamental data addressed by code.

If you assumed a rule was not expressible, check here first.


Moving averages and trend

IndicatorCodeNotes
Simple moving averageSMA(n)
Exponential moving averageEMA(n)
Weighted moving averageWMA(n)
Double exponential MADEMA(n)
Triple exponential MATEMA(n)
Triangular MATRIMA(n)
Kaufman adaptive MAKAMA(n)Default period 30
T3 moving averageT3(n, vfactor)Defaults 5, 0.7
Parabolic SARSAR(acceleration, maximum)Defaults 0.02, 0.2
SupertrendSUPERTREND(...)

Momentum and oscillators

IndicatorCodeNotes
Relative strength indexRSI(n)Default 14
MACD line / signalMACD_LINE, MACD_SIGNALDefaults 12, 26, 9
Percentage price oscillatorPPO(fast, slow)
Absolute price oscillatorAPO(fast, slow)
Rate of changeROC(n), ROCP(n)
MomentumMOM(n)
Chande momentum oscillatorCMO(n)
TRIXTRIX(n)Default 30
Commodity channel indexCCI(n)Default 20
Williams %RWILLR(n)Default 14
Money flow indexMFI(n)Default 14
Ultimate oscillatorULTOSC(n1, n2, n3)Defaults 7, 14, 28
StochasticSTOCH(...), STOCHF(...), STOCHRSI(...)
Aroon / Aroon oscillatorAROON(n), AROONOSC(n)

Directional movement

IndicatorCode
Average directional indexADX(n), ADXR(n)
Directional movement indexDMI(n), DX(n)
Plus / minus DIPLUS_DI(n), MINUS_DI(n)

Volatility and bands

IndicatorCodeNotes
Bollinger BandsBB_UPPER(n), BB_MIDDLE(n), BB_LOWER(n)Default 20, 2 stdev
Keltner ChannelsKELTNER_UPPER/MIDDLE/LOWER(...)
Donchian ChannelsDONCHIAN_UPPER/MIDDLE/LOWER(n)Default 20
Average true rangeATR(n), NATR(n)Default 14
True rangeTRANGE
Standard deviationSTDDEV(n, nbdev)

Volume

IndicatorCode
On-balance volumeOBV
Accumulation / distributionAD, ADOSC(fast, slow)
Chaikin money flowvia knowledge-base signals
VWAPVWAP
Volume is not always present or usable

The engine checks whether a series carries usable volume before evaluating a volume-dependent indicator, and there are volume-free fallbacks for specific studies.

A rule conditioned on volume for an instrument with no usable volume series is a rule whose condition cannot be evaluated, worth checking on the instrument before you build it. See Asset Explorer.

Session and price levels

ReferenceCode
Previous day high / lowPREV_DAY_HIGH, PREV_DAY_LOW
Pivot levelsPIVOT_*, pivot, supports, resistances
Opening rangeOpening-range high and low series

Opening range and previous-session references are what make an opening-range breakout expressible directly.


Candlestick and chart patterns

Candlestick patterns

The engine resolves TA-Lib candlestick pattern functions by alias, doji, engulfing, hammer, shooting star, morning and evening star, harami, marubozu and the rest of the standard set.

Chart and structure patterns

Computed patterns, not aliases:

CategoryPatterns
Swing structureSwing high, swing low, higher high, lower low
Market structureBreak of structure, bullish and bearish
ImbalanceBullish and bearish fair value gaps (FVG)
ReversalDouble top, double bottom, head and shoulders, inverse head and shoulders
ContinuationBull flag, bear flag, rising wedge, falling wedge
TrianglesAscending triangle, descending triangle
Long-formCup and handle
BarsInside bar

Pattern detection is deterministic with configurable tolerances, and pattern-based signals emit on confirmed pivots rather than on provisional ones, which is why a pattern condition does not flicker.


Knowledge-base signals

Thirty-one named, ready-made signals, composite conditions with sensible defaults, usable directly as entry conditions or filters.

Trend and momentum

ema_above, ema_below, ema_cross_up, ema_cross_down, is_above_sma, macd_bullish_cross, macd_bearish_cross, macd_positive, macd_negative, adx_strong_trend, adx_bullish_di, adx_bearish_di, psar_bullish, psar_bearish, supertrend_bullish, supertrend_bearish

Oscillators

stoch_overbought, stoch_oversold, cci_overbought, cci_oversold, mfi_overbought, mfi_oversold, williams_r_overbought, williams_r_oversold, bb_pct_b_high, bb_pct_b_low

Volatility and volume

atr_high_volatility, atr_low_volatility, bb_squeeze, keltner_breakout_up, keltner_breakout_down, obv_rising, obv_falling, chaikin_money_flow_positive, chaikin_money_flow_negative

Session and gaps

gap_up_open, gap_down_open, inside_bar and opening_range_breakout

India-specific

The set most worth knowing about, because nothing else on the platform provides it:

SignalWhat it does
within_market_hoursTrue inside NSE hours, 09:15-15:30 IST. Use as a filter, do not trade pre- or post-market
not_near_circuitTrue when price is not near an upper or lower circuit limit. Prevents getting trapped at a 5/10/20% circuit
nifty50_trend_filterBroad-market trend filter on the index
india_vix_lowIndia VIX below a threshold
avoid_expiry_dayExcludes F&O expiry day
high_delivery_volumeDelivery-volume condition
not_near_circuit is genuinely useful and rarely thought of

A position in an Indian equity locked at a circuit limit cannot be exited. Your stop cannot fill, your exit cannot fill, and the position stays open at the last price until trading resumes. Adding not_near_circuit as an entry filter avoids opening a position into that situation.

Use them by name: "buy when the supertrend turns bullish and we are within market hours and not near a circuit".


Custom and alternative data

Beyond price: fundamentals, valuation, corporate events, news, economic and on-chain data, addressed by GROUP:KEY codes such as INDIA_EQUITY_FINANCIALS:CURRENT_RATIO.

How it works

You name a metric in ordinary words and the builder searches your tenant's active, entitled catalogue for it:

build a strategy on RELIANCE that only buys when the current ratio is above 1
and revenue is growing

Registry categories: FUNDAMENTAL, VALUATION, CORPORATE_EVENTS, NEWS, ECONOMIC, ONCHAIN, MARKET_DERIVED.

Three rules the builder follows

It never invents a code. If a metric is not in your entitled catalogue, it says so. A fabricated code would resolve to NaN and make your entry false on every bar with no error.

It does not search when you already gave a code. Writing INDIA_EQUITY_FINANCIALS:CURRENT_RATIO or a bare catalogue key as a compare operand (CURRENT_RATIO > 1) resolves automatically.

Multiple worded metrics go in one search. "Current ratio, debt to equity" is one lookup, not two.

What limits it

LimitConsequence
EntitlementAvailability is per tenant. A metric you cannot reach is an entitlement question
CoverageNot every metric exists for every instrument
History depthGenerally shallower than the price series
FrequencyA quarterly fundamental gives you a handful of observations over the backtest window, which bounds what a rule conditioned on it can demonstrate

That last one is the one to think about. A rule gated on a quarterly metric over a two-and-a-half-year window has about ten observations of that gate. See Historical data

There is also a custom indicator service with its own reviewer role and an /indicators surface for browsing groups and their contents.


Higher-timeframe gates

A condition can be gated on a higher timeframe than the strategy trades. Every gate's condition must pass on its most recently closed higher-timeframe bar before a lower-timeframe entry is allowed to fill.

"Buy on the 5-minute RSI cross, but only when the daily trend is up" is directly expressible. See Advanced strategies.


Relative strength and reference series

Conditions can read a reference instrument, relative-strength comparisons and REF_* terms.

A reference condition must name its reference symbol

If it does not, the engine loads no reference series, those terms are NaN on every bar, and you get a silent zero-trade strategy. Validation catches this. See Validation system.


Periods and parameters

State the period and it is used: RSI(21), EMA(9), BB_UPPER(20). Omit it and a sensible default applies, 14 for RSI and ATR, 20 for Bollinger and CCI, 12/26/9 for MACD.

Warm-up matters. A 200-period indicator needs 200 bars before it produces a value, and near the 1 January 2024 data floor the warm-up padding is clamped. See Historical data.


Next