Indicators & data
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
| Indicator | Code | Notes |
|---|---|---|
| Simple moving average | SMA(n) | |
| Exponential moving average | EMA(n) | |
| Weighted moving average | WMA(n) | |
| Double exponential MA | DEMA(n) | |
| Triple exponential MA | TEMA(n) | |
| Triangular MA | TRIMA(n) | |
| Kaufman adaptive MA | KAMA(n) | Default period 30 |
| T3 moving average | T3(n, vfactor) | Defaults 5, 0.7 |
| Parabolic SAR | SAR(acceleration, maximum) | Defaults 0.02, 0.2 |
| Supertrend | SUPERTREND(...) |
Momentum and oscillators
| Indicator | Code | Notes |
|---|---|---|
| Relative strength index | RSI(n) | Default 14 |
| MACD line / signal | MACD_LINE, MACD_SIGNAL | Defaults 12, 26, 9 |
| Percentage price oscillator | PPO(fast, slow) | |
| Absolute price oscillator | APO(fast, slow) | |
| Rate of change | ROC(n), ROCP(n) | |
| Momentum | MOM(n) | |
| Chande momentum oscillator | CMO(n) | |
| TRIX | TRIX(n) | Default 30 |
| Commodity channel index | CCI(n) | Default 20 |
| Williams %R | WILLR(n) | Default 14 |
| Money flow index | MFI(n) | Default 14 |
| Ultimate oscillator | ULTOSC(n1, n2, n3) | Defaults 7, 14, 28 |
| Stochastic | STOCH(...), STOCHF(...), STOCHRSI(...) | |
| Aroon / Aroon oscillator | AROON(n), AROONOSC(n) |
Directional movement
| Indicator | Code |
|---|---|
| Average directional index | ADX(n), ADXR(n) |
| Directional movement index | DMI(n), DX(n) |
| Plus / minus DI | PLUS_DI(n), MINUS_DI(n) |
Volatility and bands
| Indicator | Code | Notes |
|---|---|---|
| Bollinger Bands | BB_UPPER(n), BB_MIDDLE(n), BB_LOWER(n) | Default 20, 2 stdev |
| Keltner Channels | KELTNER_UPPER/MIDDLE/LOWER(...) | |
| Donchian Channels | DONCHIAN_UPPER/MIDDLE/LOWER(n) | Default 20 |
| Average true range | ATR(n), NATR(n) | Default 14 |
| True range | TRANGE | |
| Standard deviation | STDDEV(n, nbdev) |
Volume
| Indicator | Code |
|---|---|
| On-balance volume | OBV |
| Accumulation / distribution | AD, ADOSC(fast, slow) |
| Chaikin money flow | via knowledge-base signals |
| VWAP | VWAP |
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
| Reference | Code |
|---|---|
| Previous day high / low | PREV_DAY_HIGH, PREV_DAY_LOW |
| Pivot levels | PIVOT_*, pivot, supports, resistances |
| Opening range | Opening-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:
| Category | Patterns |
|---|---|
| Swing structure | Swing high, swing low, higher high, lower low |
| Market structure | Break of structure, bullish and bearish |
| Imbalance | Bullish and bearish fair value gaps (FVG) |
| Reversal | Double top, double bottom, head and shoulders, inverse head and shoulders |
| Continuation | Bull flag, bear flag, rising wedge, falling wedge |
| Triangles | Ascending triangle, descending triangle |
| Long-form | Cup and handle |
| Bars | Inside 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:
| Signal | What it does |
|---|---|
within_market_hours | True inside NSE hours, 09:15-15:30 IST. Use as a filter, do not trade pre- or post-market |
not_near_circuit | True when price is not near an upper or lower circuit limit. Prevents getting trapped at a 5/10/20% circuit |
nifty50_trend_filter | Broad-market trend filter on the index |
india_vix_low | India VIX below a threshold |
avoid_expiry_day | Excludes F&O expiry day |
high_delivery_volume | Delivery-volume condition |
not_near_circuit is genuinely useful and rarely thought ofA 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
| Limit | Consequence |
|---|---|
| Entitlement | Availability is per tenant. A metric you cannot reach is an entitlement question |
| Coverage | Not every metric exists for every instrument |
| History depth | Generally shallower than the price series |
| Frequency | A 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.
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.