Skip to content

Indicators Overview

Wickra ships 295 indicators organised into nineteen families. Each family collects indicators that answer the same kind of question, so the taxonomy here maps one-to-one onto the crates/wickra-core/src/indicators/ source layout.

Every indicator is an O(1) state machine that consumes one input at a time and produces either Option<f64> (Rust), float | None (Python), or number | null (Node). Inputs are either a f64 close price or an OHLCV Candle (Rust) / dict-or-tuple (Python) / column arrays (Node). The full trait surface and warmup-period semantics are covered in Quickstart: Rust and Warmup Periods.

The "Output range" column is the value bounds an indicator emits once warm; "unbounded" means it tracks the price scale of the input. The "Warmup" column quotes warmup_period() as the indicator reports it — the exact first-emission index: the first non-None output lands on input warmup_period() (0-indexed warmup_period() - 1).

The eighteen families:

#FamilyCountWhat it answers
1Moving Averages19Where is the smoothed trend line?
2Momentum Oscillators21How fast is price changing; is it overbought?
3Trend & Directional13Is there a trend, and which way?
4Price Oscillators11Difference-of-averages momentum around zero.
5Volatility & Bands18How wide is the range; where are the envelopes?
6Bands & Channels11Price-envelope overlays beyond the volatility staples.
7Trailing Stops12Where is the stop-loss for this trend?
8Volume19Is volume confirming the move?
9Price Statistics19Per-bar price transforms and rolling regressions / statistics.
10Ehlers / Cycle (DSP)16Cycle-extracting DSP filters and phase-aware tools.
11Pivots & S/R7Session-anchored pivot levels and swing detectors.
12DeMark12Tom DeMark's exhaustion / setup / countdown family.
13Ichimoku & Charts2Japanese cloud chart and smoothed candles.
14Candlestick Patterns60Classical 1- / 2- / 3-bar candle patterns.
15Market Profile5Session value-area / opening-range / IB levels.
16Risk / Performance17Risk-adjusted return, drawdown, and tail-risk metrics.
17Microstructure13Order-book, trade-flow, price-impact and footprint analytics.
18Derivatives12Funding, open-interest, positioning, flow and basis on a perp/futures feed.
19Alt-Chart Bars3Price-driven Renko / Kagi / Point & Figure bar builders.

Moving Averages

Smooth the price series to surface direction. All are single-input, single-output (f64 → f64) except Vwma, which weights by volume.

IndicatorOne-linerInputOutputRangeDefaultsWarmupDeep dive
SmaEqual-weighted rolling mean over period closes.f64f64unbounded (price scale)periodperiodIndicator-Sma
EmaEMA with α = 2 / (period + 1), SMA-seeded.f64f64unbounded (price scale)periodperiodIndicator-Ema
WmaLinear weights 1, 2, …, period; newest bar matters most.f64f64unbounded (price scale)periodperiodIndicator-Wma
DemaMulloy's 2·EMA − EMA(EMA); removes first-order EMA lag.f64f64unbounded (price scale)period2·period − 1Indicator-Dema
TemaMulloy's 3·EMA − 3·EMA(EMA) + EMA(EMA(EMA)).f64f64unbounded (price scale)period3·period − 2Indicator-Tema
HmaHull's near-zero-lag WMA(2·WMA(n/2) − WMA(n), √n).f64f64unbounded (price scale)periodperiod + round(√period) − 1Indicator-Hma
KamaKaufman's adaptive average; efficiency ratio picks α per bar.f64f64unbounded (price scale)(er_period=10, fast=2, slow=30)er_period + 1Indicator-Kama
SmmaWilder's RMA: SMA-seeded exponential average, 1/period factor.f64f64unbounded (price scale)periodperiodIndicator-Smma
TrimaA period-window SMA applied twice; triangular weights.f64f64unbounded (price scale)periodperiodIndicator-Trima
ZlemaEMA of the de-lagged series 2·price − price[lag].f64f64unbounded (price scale)periodlag + periodIndicator-Zlema
T3Tillson's six-EMA cascade recombined with a volume factor v.f64f64unbounded (price scale)(period, v=0.7) (Python)6·period − 5Indicator-T3
VwmaRolling mean of closes weighted by each bar's volume.Candlef64unbounded (price scale)periodperiodIndicator-Vwma
AlmaGaussian-weighted MA, kernel centred at offset · (period − 1).f64f64unbounded (price scale)(period=9, offset=0.85, sigma=6.0)periodIndicator-Alma
McGinleyDynamicSelf-adjusting MA, MD + (price − MD) / (0.6 · period · (price / MD)⁴).f64f64unbounded (price scale)period (10 in Python)periodIndicator-McGinleyDynamic
FramaEhlers' fractal-dimension-adaptive EMA over close-only window halves.f64f64unbounded (price scale)period=16 (even)periodIndicator-Frama
VidyaEMA whose alpha scales with |CMO(cmo_period)| / 100.f64f64unbounded (price scale)(period=14, cmo_period=9)cmo_period + 1Indicator-Vidya
JmaJurik MA — three-stage filter reconstruction.f64f64unbounded (price scale)(period=14, phase=0, power=2)1Indicator-Jma
AlligatorThree Smmas of (high + low) / 2: Jaw / Teeth / Lips.CandleAlligatorOutput (3)unbounded (price scale)(jaw=13, teeth=8, lips=5)max(jaw, teeth, lips)Indicator-Alligator
EvwmaElastic volume-weighted recurrence over a rolling window.Candlef64unbounded (price scale)period (20 in Python)periodIndicator-Evwma

Momentum Oscillators

Measure the rate of price change. Several are bounded by construction (0–100 / ±100 oscillators), the rest are difference-driven.

IndicatorOne-linerInputOutputRangeDefaultsWarmupDeep dive
RsiWilder's RSI; smoothed gain / (gain + loss) × 100.f64f64[0, 100]period = 14 (Python)period + 1Indicator-Rsi
AnchoredRsiCumulative RSI from a user-set anchor bar (RSI of the whole leg).f64f64[0, 100](set anchor via set_anchor())2Indicator-AnchoredRsi
Stochastic%K = (close − low_n)/(high_n − low_n) × 100, smoothed into %D.Candle(k, d)each in [0, 100](k_period=14, d_period=3) (Python)k_period + d_period − 1Indicator-Stochastic
Cci(typical − SMA(typical)) / (0.015 · mean_dev).Candlef64unbounded (typically ±100±200)period = 20 (Python)periodIndicator-Cci
Roc(price − price_n) / price_n × 100; raw percentage change.f64f64unbounded around zeroperiodperiod + 1Indicator-Roc
WilliamsR−100 × (high_n − close) / (high_n − low_n).Candlef64[−100, 0]period = 14 (Python)periodIndicator-WilliamsR
Mfi"Volume-weighted RSI": Wilder smoothing of money-flow ratios.Candlef64[0, 100]period = 14 (Python)periodIndicator-Mfi
AwesomeOscillatorSMA(median, fast) − SMA(median, slow); zero-line crossover.Candlef64unbounded around zero(fast=5, slow=34) (Python)slow_periodIndicator-AwesomeOscillator
Momprice − price[period]; raw price-difference momentum.f64f64unbounded around zeroperiod = 10 (Python)period + 1Indicator-Mom
CmoChande Momentum Oscillator; 100·(Σgain − Σloss)/(Σgain + Σloss).f64f64[−100, 100]period = 14 (Python)period + 1Indicator-Cmo
TsiTrue Strength Index; double-EMA-smoothed momentum ratio.f64f64[−100, 100](long=25, short=13) (Python)long + shortIndicator-Tsi
PmoDecisionPoint Price Momentum Oscillator; doubly-smoothed ROC.f64f64unbounded around zero(smoothing1=35, smoothing2=20) (Python)2Indicator-Pmo
StochRsiStochastic Oscillator applied to the RSI series.f64f64[0, 100](rsi_period=14, stoch_period=14) (Python)rsi_period + stoch_periodIndicator-StochRsi
UltimateOscillatorLarry Williams' weighted three-timeframe buying-pressure oscillator.Candlef64[0, 100](short=7, mid=14, long=28) (Python)max(short,mid,long) + 1Indicator-UltimateOscillator
RviSMA(close − open, period) / SMA(high − low, period).Candlef64unbounded (typically (−1, 1))period = 10 (Python)periodIndicator-Rvi
Pgo(close − SMA(close, period)) / EMA(TR, period).Candlef64unboundedperiod = 14 (Python)periodIndicator-Pgo
KstPring's 1·RCMA_1 + 2·RCMA_2 + 3·RCMA_3 + 4·RCMA_4, plus SMA signal.f64(kst, signal)unbounded9 periods, see deep-divelongest roc_i + sma_i + signal − 1Indicator-Kst
SmiBlau's doubly-EMA-smoothed close-vs-range displacement.Candlef64[−100, 100](period=5, d=3, d2=3)period + d + d2 − 2Indicator-Smi
LaguerreRsiEhlers' 4-stage Laguerre filter with RSI up/down accumulator.f64f64[0, 100] (clamped)gamma = 0.51Indicator-LaguerreRsi
ConnorsRsiAverage of RSI(close), RSI(streak), percentile-rank of returns.f64f64[0, 100](3, 2, 100)max(period_rsi+1, period_streak+2, period_rank+1)Indicator-ConnorsRsi
InertiaLinearRegression(RVI(rvi_period), linreg_period).Candlef64unbounded(rvi=14, linreg=20)rvi_period + linreg_period − 1Indicator-Inertia

Trend & Directional

Answer whether a trend exists and which way it points — directional systems, crossover packages and trend-versus-range filters.

IndicatorOne-linerInputOutputRangeDefaultsWarmupDeep dive
MacdIndicatorEMA(fast) − EMA(slow) plus a signal EMA and the histogram.f64(macd, signal, histogram)unbounded around zero(fast=12, slow=26, signal=9) (Python)slow + signal − 1Indicator-MacdIndicator
AdxWilder's directional system: +DI, −DI and the ADX strength index.Candle(plus_di, minus_di, adx)each in [0, 100]period = 14 (Python)2·periodIndicator-Adx
AdxrWilder's ADX-rating: average of ADX_t and ADX_{t − (period − 1)}.Candlef64[0, 100]period = 14 (Python)3·period − 1Indicator-Adxr
AroonBars-since-high and bars-since-low scaled to [0, 100].Candle(up, down)each in [0, 100]period = 14 (Python)period + 1Indicator-Aroon
TrixRate of change of a triple-smoothed EMA, × 10000.f64f64unbounded around zeroperiod = 15 (Python)3·period − 1Indicator-Trix
AroonOscillatorAroonUp − AroonDown; the two Aroon lines as one gauge.Candlef64[−100, 100]period = 14 (Python)period + 1Indicator-AroonOscillator
VortexVortex Indicator VI+ / VI−; crossings mark trend onset.Candle(plus, minus)each >= 0period = 14 (Python)period + 1Indicator-Vortex
RwiPoulos' Random Walk Index: actual displacement vs ATR_i · sqrt(i).Candle(high, low)each >= 0period = 14 (Python)periodIndicator-Rwi
TiiShare of recent SMA-deviations that are positive, scaled to [0, 100].f64f64[0, 100](sma_period=60, dev_period=30) (Python)sma_period + dev_period − 1Indicator-Tii
WaveTrendLazyBear: 3-stage EMA cascade through the typical-price channel index.Candle(wt1, wt2)typically [-100, +100](channel=10, average=21, signal=4) (Python)2·channel + average + signal − 3Indicator-WaveTrend
MassIndexDorsey's range-expansion sum of the EMA-of-range ratio.Candlef64> 0(ema_period=9, sum_period=25) (Python)2·ema_period + sum_period − 2Indicator-MassIndex
ChoppinessIndexSummed true range over the high-low span, log-scaled.Candlef64[0, 100]period = 14 (Python)periodIndicator-ChoppinessIndex
VerticalHorizontalFilterNet price move divided by total move over period.f64f64[0, 1]period = 28 (Python)period + 1Indicator-VerticalHorizontalFilter

Price Oscillators

Difference-of-averages and intrabar oscillators that swing around a zero line.

IndicatorOne-linerInputOutputRangeDefaultsWarmupDeep dive
PpoPercentage Price Oscillator; 100·(EMA_fast − EMA_slow)/EMA_slow.f64f64unbounded around zero (percent)(fast=12, slow=26) (Python)slowIndicator-Ppo
DpoDetrended Price Oscillator; price[t − period/2 − 1] − SMA(period).f64f64unbounded around zeroperiod = 20 (Python)max(period, period/2 + 2)Indicator-Dpo
CoppockCoppock Curve; WMA(ROC(long) + ROC(short), wma_period).f64f64unbounded around zero(roc_long=14, roc_short=11, wma_period=10) (Python)max(roc_long, roc_short) + wma_periodIndicator-Coppock
AcceleratorOscillatorAO − SMA(AO, signal); the acceleration of momentum.Candlef64unbounded around zero(ao_fast=5, ao_slow=34, signal_period=5) (Python)ao_slow + signal_period − 1Indicator-AcceleratorOscillator
BalanceOfPower(close − open) / (high − low); intrabar buyer/seller control.Candlef64[−1, +1](no parameters)1Indicator-BalanceOfPower
ApoAbsolute Price Oscillator; raw EMA_fast − EMA_slow.f64f64unbounded around zero(fast=12, slow=26) (Python)slowIndicator-Apo
AwesomeOscillatorHistogramAO − AO_{t-1}; differenced Awesome Oscillator.Candlef64unbounded around zero(fast=5, slow=34) (Python)slow + 1Indicator-AwesomeOscillatorHistogram
CfoChande Forecast Oscillator; 100·(close − linreg_endpoint)/close.f64f64unbounded around zero (percent)period = 14 (Python)periodIndicator-Cfo
ZeroLagMacdMACD with ZLEMA in place of EMA; faster, slightly noisier.f64(macd, signal, histogram)unbounded around zero(fast=12, slow=26, signal=9)~50Indicator-ZeroLagMacd
ElderImpulseAlexander Elder's (EMA-slope, MACD-hist-slope) regime classifier.f64f64 (-1, 0, +1){-1, 0, +1}(ema_period=13, macd...) (Python)slow + signal − 1Indicator-ElderImpulse
StcSchaff Trend Cycle; double-stochastic of MACD.f64f64[0, 100](fast=23, slow=50, cycle=10) (Python)~slow + cycleIndicator-Stc

Volatility & Bands

Indicators that measure dispersion / range and those that draw an envelope around price.

IndicatorOne-linerInputOutputRangeDefaultsWarmupDeep dive
AtrWilder-smoothed True Range; per-bar absolute volatility.Candlef64[0, ∞) (price scale)period = 14 (Python)periodIndicator-Atr
BollingerBandsSMA middle band with ±multiplier × population_stddev bands.f64(upper, middle, lower, stddev)unbounded (price scale)(period=20, multiplier=2.0) (Python)periodIndicator-BollingerBands
KeltnerEMA middle band with ±multiplier × ATR bands.Candle(upper, middle, lower)unbounded (price scale)(ema_period=20, atr_period=10, multiplier=2.0) (Python)max(ema_period, atr_period)Indicator-Keltner
DonchianHighest high and lowest low over period bars.Candle(upper, middle, lower)unbounded (price scale)period = 20 (Python)periodIndicator-Donchian
Natr100·ATR/close; ATR as a percentage.Candlef64[0, ∞) (percent)period = 14 (Python)periodIndicator-Natr
StdDevRolling population standard deviation of price.f64f64[0, ∞) (price scale)period = 20 (Python)periodIndicator-StdDev
UlcerIndexRMS of trailing-high drawdowns; downside-only risk.f64f64[0, ∞) (percent)period = 14 (Python)2·period − 1Indicator-UlcerIndex
HistoricalVolatilityAnnualised sample stddev of log returns.f64f64[0, ∞) (annualised percent)(period=20, trading_periods=252) (Python)period + 1Indicator-HistoricalVolatility
BollingerBandwidth(upper − lower) / middle of the Bollinger Bands.f64f64[0, ∞)(period=20, multiplier=2.0) (Python)periodIndicator-BollingerBandwidth
PercentB(price − lower) / (upper − lower); price position in the bands.f64f64unbounded (01 inside)(period=20, multiplier=2.0) (Python)periodIndicator-PercentB
TrueRangemax(H−L, |H−prevC|, |L−prevC|); raw single-bar volatility.Candlef64[0, ∞) (price scale)(no parameters)1Indicator-TrueRange
ChaikinVolatilityRate of change of an EMA-smoothed high-low spread.Candlef64unbounded around zero (percent)(ema_period=10, roc_period=10) (Python)ema_period + roc_periodIndicator-ChaikinVolatility
DetrendedStdDevStandard deviation of OLS residuals — noise around the trend.f64f64[0, ∞) (price scale)periodperiodIndicator-DetrendedStdDev
RVIVolatilityRSI-shaped volatility direction gauge built on rolling stddev.f64f64[0, 100]period = 10 (Python)2·period − 1Indicator-RviVolatility
ParkinsonVolatilityHigh-low realised vol; ~5× more efficient than C2C stddev.Candlef64[0, ∞) (annualised percent)(period=20, trading_periods=252) (Python)periodIndicator-ParkinsonVolatility
GarmanKlassVolatilityOHLC realised vol; ~7.4× efficient, biased under drift.Candlef64[0, ∞) (annualised percent)(period=20, trading_periods=252) (Python)periodIndicator-GarmanKlassVolatility
RogersSatchellVolatilityDrift-free OHLC realised vol; exact under arbitrary Brownian drift.Candlef64[0, ∞) (annualised percent)(period=20, trading_periods=252) (Python)periodIndicator-RogersSatchellVolatility
YangZhangVolatilityDrift- and gap-robust OHLC blend of overnight, open-close and Rogers-Satchell.Candlef64[0, ∞) (annualised percent)(period=20, trading_periods=252) (Python)period + 1Indicator-YangZhangVolatility

Bands & Channels

Price-envelope overlays beyond the volatility-housed Bollinger / Keltner / Donchian trio. Eleven additional bands organised by what drives their width: fixed percent, ATR, range, regression-residual stddev, fractal swings, or volume-weighted stddev.

IndicatorOne-linerInputOutputRangeDefaultsWarmupDeep dive
MaEnvelopeSMA centerline with fixed-percent envelope.f64(upper, middle, lower)unbounded (price scale)(period=20, percent=0.025) (Python)periodIndicator-MaEnvelope
AccelerationBandsPrice Headley's momentum-biased bands; width scales with (H − L) / (H + L).Candle(upper, middle, lower)unbounded (price scale)(period=20, factor=0.001) (Python)periodIndicator-AccelerationBands
StarcBandsStoller Average Range Channel — SMA(close) ± k·ATR.Candle(upper, middle, lower)unbounded (price scale)(sma_period=6, atr_period=15, multiplier=2.0) (Python)max(sma_period, atr_period)Indicator-StarcBands
AtrBandsClose-anchored envelope close ± k·ATR; stop/target bracket.Candle(upper, middle, lower)unbounded (price scale)(period=14, multiplier=3.0) (Python)periodIndicator-AtrBands
HurstChannelSMA centerline wrapped by the rolling high-low range.Candle(upper, middle, lower)unbounded (price scale)(period=10, multiplier=0.5) (Python)periodIndicator-HurstChannel
LinRegChannelOLS endpoint ± k · σ of regression residuals.f64(upper, middle, lower)unbounded (price scale)(period=20, multiplier=2.0) (Python)periodIndicator-LinRegChannel
StandardErrorBandsOLS endpoint ± k · stderr (n − 2 denominator).f64(upper, middle, lower)unbounded (price scale)(period=21, multiplier=2.0) (Python)periodIndicator-StandardErrorBands
DoubleBollingerTwo concentric Bollinger envelopes (±k_inner·σ, ±k_outer·σ).f645 bandsunbounded (price scale)(period=20, k_inner=1.0, k_outer=2.0) (Python)periodIndicator-DoubleBollinger
TtmSqueezeBB-inside-KC squeeze flag + detrended-close momentum (LinReg).Candle(squeeze, momentum)squeeze ∈ {0,1}; momentum unbounded(period=20, bb_mult=2.0, kc_mult=1.5) (Python)periodIndicator-TtmSqueeze
FractalChaosBandsStep-function envelope of the latest Bill Williams 5-bar fractals.Candle(upper, lower)unbounded (price scale)k = 2 (Python)2k + 1 plus first fractal of each kindIndicator-FractalChaosBands
VwapStdDevBandsCumulative VWAP ± k·σ (volume-weighted standard deviation).Candle(upper, middle, lower, stddev)unbounded (price scale)multiplier = 2.0 (Python)1Indicator-VwapStdDevBands

Trailing Stops

ATR-driven stop-loss trackers: per-bar levels that follow a trend and flip when price closes through them.

IndicatorOne-linerInputOutputRangeDefaultsWarmupDeep dive
PsarWilder's Parabolic Stop-and-Reverse; flips sides on a crossing.Candlef64unbounded (price scale)(af_start=0.02, af_step=0.02, af_max=0.20) (Python)2Indicator-Psar
SuperTrendATR-banded trailing stop with explicit flip logic.Candle(value, direction)value price scale; direction ±1(atr_period=10, multiplier=3.0) (Python)atr_periodIndicator-SuperTrend
ChandelierExithighest_high − k·ATR (long) and lowest_low + k·ATR (short).Candle(long_stop, short_stop)unbounded (price scale)(period=22, multiplier=3.0) (Python)periodIndicator-ChandelierExit
ChandeKrollStopTwo-stage ATR stop: extreme-based, then smoothed.Candle(stop_long, stop_short)unbounded (price scale)(atr_period=10, atr_multiplier=1.0, stop_period=9) (Python)atr_period + stop_period − 1Indicator-ChandeKrollStop
AtrTrailingStopA single line trailing the close by k·ATR, ratcheting.Candlef64unbounded (price scale)(atr_period=14, multiplier=3.0) (Python)atr_periodIndicator-AtrTrailingStop
HiLoActivatorSMA(high) / SMA(low) state-machine trail (Crabel-style).Candlef64unbounded (price scale)period = 3 (Python)period + 1Indicator-HiLoActivator
VoltyStopKase's extreme-close-anchored ATR trail (no give-back on pullbacks).Candlef64unbounded (price scale)(atr_period=14, multiplier=2.0)atr_period + 1Indicator-VoltyStop
YoyoExitLong-only ATR trail with passive re-entry trigger above the trail.Candlef64unbounded (price scale)(atr_period=14, multiplier=2.0)atr_period + 1Indicator-YoyoExit
DonchianStopTurtle exit channel: lowest low / highest high over period.Candle(stop_long, stop_short)unbounded (price scale)period = 10periodIndicator-DonchianStop
PercentageTrailingStopFixed-percentage flip-on-close-through trail.f64f64unbounded (price scale)percent = 5.01Indicator-PercentageTrailingStop
StepTrailingStopGrid-snapped trail; ratchets in discrete step_size increments.f64f64unbounded (price scale, snapped)step_size = 1.01Indicator-StepTrailingStop
RenkoTrailingStopRenko-brick-anchored trail; anchor moves only after full-brick advance.f64f64unbounded (price scale)block_size = 1.01Indicator-RenkoTrailingStop

Volume

Price moves weighted or confirmed by traded volume. All take Candle input.

IndicatorOne-linerInputOutputRangeDefaultsWarmupDeep dive
ObvOn-Balance Volume: cumulative signed volume.Candlef64unbounded (drifts with volume)(no parameters)1Indicator-Obv
VwapCumulative volume-weighted average price from the stream start; a sibling RollingVwap(period) is exposed for a finite window.Candlef64unbounded (price scale)(no parameters)1 (cumulative); period (rolling)Indicator-Vwap (cumulative + rolling)
AdlAccumulation/Distribution Line; cumulative range-weighted volume.Candlef64unbounded (drifts with volume)(no parameters)1Indicator-Adl
VolumePriceTrendCumulative volume · ROC; volume weighted by percentage move.Candlef64unbounded (drifts with volume)(no parameters)1Indicator-VolumePriceTrend
ChaikinMoneyFlowSummed money-flow volume over summed volume across period bars.Candlef64[−1, +1]period = 20 (Python)periodIndicator-ChaikinMoneyFlow
ChaikinOscillatorEMA(ADL, fast) − EMA(ADL, slow); the MACD of the ADL.Candlef64unbounded around zero(fast=3, slow=10) (Python)slowIndicator-ChaikinOscillator
ForceIndexEMA((close − prev_close) · volume, period).Candlef64unbounded around zeroperiod = 13 (Python)period + 1Indicator-ForceIndex
EaseOfMovementSMA of distance travelled per unit of volume.Candlef64unbounded around zero(period=14, divisor=1e8) (Python)period + 1Indicator-EaseOfMovement
RollingVwapVWAP over a finite rolling window (vs the cumulative Vwap).Candlef64unbounded (price scale)periodperiodIndicator-RollingVwap
AnchoredVwapCumulative VWAP from a user-set anchor bar (event-anchored fair price).Candlef64unbounded (price scale)(set anchor via set_anchor())1 post-anchorIndicator-AnchoredVwap
AdOscillatorWilliams' Accumulation/Distribution — volume-less cumulative price flow.Candlef64unbounded(no parameters)2Indicator-AdOscillator
KvoKlinger Volume Oscillator — long/short EMAs of trend-aware volume force.Candle(kvo, signal)unbounded around zero(34, 55, 13)slow + signal − 1Indicator-Kvo
VolumeOscillator100·(SMA(vol,fast) − SMA(vol,slow))/SMA(vol,slow).Candlef64unbounded above −100(fast=14, slow=28)slowIndicator-VolumeOscillator
VzoVolume Zone Oscillator — 100·EMA(signed vol)/EMA(|vol|).Candlef64[−100, +100]period = 14period + 1Indicator-Vzo
TsvTime Segmented Volume — rolling sum of (close-change · volume).Candlef64unbounded around zeroperiod = 18period + 1Indicator-Tsv
NviNegative Volume Index — cumulative; updates only on volume contraction.Candlef64unbounded (anchored at 1000)(no parameters)2Indicator-Nvi
PviPositive Volume Index — mirror of NVI; updates only on volume expansion.Candlef64unbounded (anchored at 1000)(no parameters)2Indicator-Pvi
DemandIndexSibbet's EMA-smoothed buying-vs-selling pressure ratio.Candlef64unbounded (typically [-100, +100])period = 20period + 1Indicator-DemandIndex
MarketFacilitationIndexWilliams' (high − low) / volume per-bar facilitation.Candlef64[0, ∞)(no parameters)1Indicator-MarketFacilitationIndex

Price Statistics

Per-bar price transforms and rolling least-squares regressions.

IndicatorOne-linerInputOutputRangeDefaultsWarmupDeep dive
TypicalPrice(high + low + close) / 3.Candlef64unbounded (price scale)(no parameters)1Indicator-TypicalPrice
MedianPrice(high + low) / 2.Candlef64unbounded (price scale)(no parameters)1Indicator-MedianPrice
WeightedClose(high + low + 2·close) / 4.Candlef64unbounded (price scale)(no parameters)1Indicator-WeightedClose
LinearRegressionEndpoint of the rolling least-squares line.f64f64unbounded (price scale)period = 14 (Python)periodIndicator-LinearRegression
LinRegSlopeSlope of the rolling least-squares line.f64f64unbounded around zeroperiod = 14 (Python)periodIndicator-LinRegSlope
ZScore(price − SMA(n)) / population_stddev(n).f64f64unbounded around zeroperiod = 20 (Python)periodIndicator-ZScore
LinRegAngleThe rolling regression slope as a degree angle.f64f64(−90°, +90°)period = 14 (Python)periodIndicator-LinRegAngle
VarianceRolling population variance (second central moment).f64f64[0, ∞)periodperiodIndicator-Variance
CoefficientOfVariationStdDev / Mean — dimensionless dispersion.f64f64[0, ∞)periodperiodIndicator-CoefficientOfVariation
SkewnessRolling Pearson skewness (third standardised moment).f64f64unboundedperiodperiodIndicator-Skewness
KurtosisRolling excess kurtosis (fourth standardised moment − 3).f64f64[-2, ∞)periodperiodIndicator-Kurtosis
StandardErrorStandard error of the rolling OLS line; trend-detrended volatility.f64f64[0, ∞)periodperiodIndicator-StandardError
RSquaredR² of the rolling OLS fit; fraction of variance explained.f64f64[0, 1]periodperiodIndicator-RSquared
MedianAbsoluteDeviationRobust dispersion: median(|x − median|).f64f64[0, ∞)periodperiodIndicator-MedianAbsoluteDeviation
AutocorrelationRolling lag-k Pearson autocorrelation.f64f64[-1, +1](period, lag)periodIndicator-Autocorrelation
HurstExponentRescaled-range (R/S) Hurst exponent estimate.f64f64typically (0, 1)(period, chunks)periodIndicator-HurstExponent
PearsonCorrelationRolling Pearson correlation of two synchronised series.(f64, f64)f64[-1, +1]periodperiodIndicator-PearsonCorrelation
BetaRolling OLS sensitivity of asset to benchmark.(f64, f64)f64unboundedperiodperiodIndicator-Beta
PairwiseBetaRolling OLS slope of one asset's log-returns on another's.(f64, f64)f64unboundedperiodperiod + 1Indicator-PairwiseBeta
PairSpreadZScoreZ-score of the log-spread ln(a) − β·ln(b) of a pair.(f64, f64)f64unbounded(beta_period, z_period)beta_period + z_period − 1Indicator-PairSpreadZScore
LeadLagCrossCorrelationOffset that maximises |corr(a[t], b[t+k])| — which asset leads.(f64, f64){lag, correlation}lag ∈ [−max_lag, max_lag](window, max_lag)window + 2·max_lagIndicator-LeadLagCrossCorrelation
CointegrationEngle–Granger hedge ratio + ADF stationarity test on the spread.(f64, f64){hedge_ratio, spread, adf_stat}adf_stat unbounded(period, adf_lags)periodIndicator-Cointegration
RelativeStrengthABRatio line a / b with its moving average and RSI.(f64, f64){ratio, ratio_ma, ratio_rsi}ratio_rsi ∈ [0, 100](ma_period, rsi_period)max(ma_period, rsi_period + 1)Indicator-RelativeStrengthAB
SpearmanCorrelationRolling rank correlation; monotone-relationship robust.(f64, f64)f64[-1, +1]periodperiodIndicator-SpearmanCorrelation

Ehlers / Cycle (DSP)

John Ehlers' family of DSP cycle filters, phase-extraction tools, and adaptive smoothers. All take f64 price input.

IndicatorOne-linerInputOutputRangeDefaultsWarmupDeep dive
MamaMESA Adaptive MA — adaptive alpha from Hilbert phase.f64(mama, fama)unbounded (price scale)(0.5, 0.05)~30Indicator-Mama
FamaScalar wrapper exposing only MAMA's slow follower line.f64f64unbounded (price scale)(0.5, 0.05)~30Indicator-Fama
FisherTransformMin/max-normalises price + 0.5·ln((1+x)/(1-x)).f64f64unbounded; mostly [-2, +2]periodperiodIndicator-FisherTransform
InverseFisherTransformtanh(scale · input); bounded squash.f64f64[-1, +1]scale1Indicator-InverseFisherTransform
SuperSmootherEhlers' 2-pole Butterworth lowpass filter.f64f64unbounded (price scale)period2Indicator-SuperSmoother
HilbertDominantCycleTruncated-Hilbert phase-derived dominant cycle period.f64f64[6, 50](no parameters)~50Indicator-HilbertDominantCycle
SineWavesin(phase) from Hilbert phase; pair with lead() for cross.f64f64[-1, +1](no parameters)~50Indicator-SineWave
Decyclerprice − HighPass(price) — low-lag trend extractor.f64f64unbounded (price scale)period2Indicator-Decycler
DecyclerOscillatorDifference of fast and slow Decyclers — MACD-shape.f64f64unbounded around zero(fast, slow)2Indicator-DecyclerOscillator
RoofingFilterHigh-pass + SuperSmoother = cycle-band bandpass.f64f64unbounded around zero(lp, hp) (default 10, 48)2Indicator-RoofingFilter
CenterOfGravityLinear-weighted price barycenter, near-zero-lag.f64f64unbounded around zeroperiodperiodIndicator-CenterOfGravity
CyberneticCycle4-tap pre-smoother + 2nd-order high-pass cycle extractor.f64f64unbounded around zeroperiod6Indicator-CyberneticCycle
AdaptiveCycleHalf-period wrapper over HilbertDominantCycle for adaptive oscillators.f64f64[3, 25] (integer)(no parameters)~50Indicator-AdaptiveCycle
EmpiricalModeDecompositionBandpass + envelope EMD; regime classifier.f64f64unbounded around zero(period, fraction)periodIndicator-EmpiricalModeDecomposition
EhlersStochasticStochastic on Roofing-Filter output ([-1, +1] scale).f64f64[-1, +1]periodperiod + ~50Indicator-EhlersStochastic
InstantaneousTrendlineNear-zero-lag tuned recurrence — fast trend line.f64f64unbounded (price scale)periodperiodIndicator-InstantaneousTrendline

Pivots & S/R

Session-anchored pivot levels and swing detectors. Pivots take a single (typically session-aggregated) candle and emit fixed S/R levels for the next session; swing detectors run continuously and mark structural pivots.

IndicatorOne-linerInputOutputRangeDefaultsWarmupDeep dive
ClassicPivotsFloor-trader pivots: PP, R1-R3, S1-S3 from (H+L+C)/3.Candle7 fieldsunbounded (price scale)(no parameters)1Indicator-ClassicPivots
FibonacciPivotsPivot + Fib-ratio R/S levels (0.382 / 0.618 / 1.000 · range).Candle7 fieldsunbounded (price scale)(no parameters)1Indicator-FibonacciPivots
CamarillaStott's close-anchored 4-tier ±(1.1 · range / {12,6,4,2}).Candle9 fieldsunbounded (price scale)(no parameters)1Indicator-Camarilla
WoodiePivotsClose-weighted pivot (H+L+2C)/4 with 2-tier R/S.Candle5 fieldsunbounded (price scale)(no parameters)1Indicator-WoodiePivots
DemarkPivotsOpen-conditional 1-tier pivot (different formula per bar direction).Candle(pp, r1, s1)unbounded (price scale)(no parameters)1Indicator-DemarkPivots
WilliamsFractalsBill Williams' 5-bar swing-high / swing-low detector.Candle(up, down: Option<f64>)unbounded (price scale)(no parameters)5Indicator-WilliamsFractals
ZigZagNon-repainting percentage-threshold swing detector.Candle(swing, direction)unbounded (price scale)threshold = 0.052Indicator-ZigZag

DeMark

Tom DeMark's full setup / countdown / pivot family. All bar-direction-aware oscillators, exhaustion detectors, and protective-stop levels.

IndicatorOne-linerInputOutputRangeDefaultsWarmupDeep dive
TdSetup9-bar momentum-exhaustion setup count (signed).Candlef64[-target, +target](lookback=4, target=9)lookback + 1Indicator-TdSetup
TdSequentialSetup + Countdown 13 — canonical DeMark exhaustion.Candle(setup, countdown)signed(4, 9, 2, 13)max(4, 2) + 1Indicator-TdSequential
TdCountdownStandalone Countdown 13 (auto-detects setup internally).Candlef64[-13, +13](4, 9, 2, 13)max(4, 2) + 1Indicator-TdCountdown
TdComboStricter, faster countdown variant (3 strictness conditions).Candlef64[-13, +13](4, 9, 2, 13)max(4, 2) + 1Indicator-TdCombo
TdLinesTDST support/resistance — extremes of completed setups.Candle(resistance, support)unbounded; NaN before first setup(4, 9)lookback + 1Indicator-TdLines
TdDeMarkerHigh/low-extension based 0-1 momentum oscillator.Candlef64[0, 1]period = 14period + 1Indicator-TdDeMarker
TdReiRange Expansion Index — conditionally-weighted short oscillator.Candlef64[-100, +100]period = 5period + 7Indicator-TdRei
TdPressureVolume-weighted DeMark pressure oscillator.Candlef64[-100, +100]period = 5periodIndicator-TdPressure
TdRangeProjectionNext-bar high/low projection from current bar OHLC.Candle(high, low)unbounded (price scale)(no parameters)1Indicator-TdRangeProjection
TdDifferential2-bar pressure-shift reversal pattern.Candlef64{-1, 0, +1}(no parameters)2Indicator-TdDifferential
TdOpenGap-and-fade reversal signal (open outside prior range).Candlef64{-1, 0, +1}(no parameters)2Indicator-TdOpen
TdRiskLevelProtective-stop level from setup extreme + true range.Candle(buy_risk, sell_risk)unbounded; NaN before first setup(4, 9)lookback + 1Indicator-TdRiskLevel

Ichimoku & Charts

Japanese cloud charting and candle-smoothing transforms.

IndicatorOne-linerInputOutputRangeDefaultsWarmupDeep dive
IchimokuFive-line cloud system (Tenkan, Kijun, Senkou A/B, Chikou).Candle5 Option<f64> fieldsunbounded (price scale)(9, 26, 52, 26)senkou_b + displacement - 1 (77 at defaults)Indicator-Ichimoku
HeikinAshi"Average bar" candle-smoothing transform.Candle(open, high, low, close)unbounded (price scale)(no parameters)1Indicator-HeikinAshi

Candlestick Patterns

Classical 1- / 2- / 3-bar candlestick pattern detectors. All take Candle input and return a signed f64 (+1 bullish, -1 bearish, 0 no signal) unless noted. Pattern-shape checks only — combine with a trend filter for actionable signals.

IndicatorPatternBarsOutputDefaultsWarmupDeep dive
DojiIndecision — body ≤ threshold·range.1f64 (0 or +1)body_threshold = 0.11Indicator-Doji
HammerSmall body top, long lower shadow ≥ 2·body.1f64 (0 or +1)(no parameters)1Indicator-Hammer
InvertedHammerMirror of Hammer (long upper shadow).1f64 (0 or +1)(no parameters)1Indicator-InvertedHammer
HangingManSame shape as Hammer, bearish reading at top of uptrend.1f64 (0 or -1)(no parameters)1Indicator-HangingMan
ShootingStarSame shape as Inverted Hammer, bearish reading at top.1f64 (0 or -1)(no parameters)1Indicator-ShootingStar
MarubozuFull-body candle with (near-)no shadows.1f64 ({-1, 0, +1})shadow_tolerance = 0.051Indicator-Marubozu
SpinningTopSmall body, both shadows ≥ 2·body.1f64 ({-1, 0, +1})body_threshold = 0.31Indicator-SpinningTop
Engulfing2-bar full-body engulfing reversal.2f64 ({-1, 0, +1})(no parameters)2Indicator-Engulfing
Harami2-bar inside-body reversal (opposite of Engulfing).2f64 ({-1, 0, +1})(no parameters)2Indicator-Harami
PiercingDarkCloud2-bar gap-and-recover-past-midpoint reversal.2f64 ({-1, 0, +1})(no parameters)2Indicator-PiercingDarkCloud
Tweezer2-bar matching-extreme reversal (Top / Bottom).2f64 ({-1, 0, +1})tolerance = 0.0012Indicator-Tweezer
MorningEveningStar3-bar reversal: long bar + star + opposite long bar.3f64 ({-1, 0, +1})(no parameters)3Indicator-MorningEveningStar
ThreeSoldiersOrCrows3-bar continuation: three rising / falling long bars.3f64 ({-1, 0, +1})(no parameters)3Indicator-ThreeSoldiersOrCrows
ThreeInsideConfirmed Harami: Harami + close past Bar 1 body.3f64 ({-1, 0, +1})(no parameters)3Indicator-ThreeInside
ThreeOutsideConfirmed Engulfing: Engulfing + close past Bar 2 close.3f64 ({-1, 0, +1})(no parameters)3Indicator-ThreeOutside
TwoCrows3-bar bearish reversal after an advance.3f64 (0 or -1)(no parameters)3Indicator-TwoCrows
UpsideGapTwoCrowsTwo crows holding an upside gap (bearish).3f64 (0 or -1)(no parameters)3Indicator-UpsideGapTwoCrows
IdenticalThreeCrowsThree blacks opening at the prior close, lower closes.3f64 (0 or -1)tolerance = 0.0013Indicator-IdenticalThreeCrows
ThreeLineStrikeThree-bar run struck by an opposite 4th bar.4f64 ({-1, 0, +1})(no parameters)4Indicator-ThreeLineStrike
ThreeStarsInSouthThree shrinking blacks, rising lows (rare bottom).3f64 (0 or +1)tolerance = 0.0013Indicator-ThreeStarsInSouth
AbandonedBabyDoji isolated by gaps both sides (island reversal).3f64 ({-1, 0, +1})tolerance = 0.0013Indicator-AbandonedBaby
AdvanceBlockThree rising whites, shrinking bodies / rising wicks.3f64 (0 or -1)(no parameters)3Indicator-AdvanceBlock
BeltHoldLong body opening at one extreme (opening marubozu).1f64 ({-1, 0, +1})shadow_tolerance = 0.051Indicator-BeltHold
Breakaway5-bar reversal fading a gapped over-extended run.5f64 ({-1, 0, +1})(no parameters)5Indicator-Breakaway
Counterattack2-bar reversal closing back at the prior close.2f64 ({-1, 0, +1})equal_tolerance = 0.052Indicator-Counterattack
DojiStarLong body then a gapped doji (reversal warning).2f64 ({-1, 0, +1})(no parameters)2Indicator-DojiStar
DragonflyDojiDoji at the top, long lower shadow (bullish).1f64 (0 or +1)(no parameters)1Indicator-DragonflyDoji
GravestoneDojiDoji at the bottom, long upper shadow (bearish).1f64 (0 or -1)(no parameters)1Indicator-GravestoneDoji
LongLeggedDojiDoji with long shadows both sides (indecision).1f64 (0 or +1)(no parameters)1Indicator-LongLeggedDoji
RickshawManCentred long-legged doji (balanced indecision).1f64 (0 or +1)(no parameters)1Indicator-RickshawMan
EveningDojiStar3-bar bearish top: white, gapped doji, deep black.3f64 (0 or -1)penetration = 0.33Indicator-EveningDojiStar
MorningDojiStar3-bar bullish bottom: black, gapped doji, deep white.3f64 (0 or +1)penetration = 0.33Indicator-MorningDojiStar
GapSideBySideWhiteTwo side-by-side whites holding a gap (continuation).3f64 ({-1, 0, +1})(no parameters)3Indicator-GapSideBySideWhite
HighWaveSmall body, very long shadows both sides (indecision).1f64 (0 or +1)(no parameters)1Indicator-HighWave
HikkakeInside-bar false-breakout trap.3f64 ({-1, 0, +1})(no parameters)3Indicator-Hikkake
HikkakeModifiedClose-confirmed Hikkake trap.3f64 ({-1, 0, +1})(no parameters)3Indicator-HikkakeModified
HomingPigeonSame-colour harami in a decline (bullish).2f64 (0 or +1)(no parameters)2Indicator-HomingPigeon
OnNeckWeak bounce to the prior low (bearish continuation).2f64 (0 or -1)(no parameters)2Indicator-OnNeck
InNeckBounce just into the body (bearish continuation).2f64 (0 or -1)(no parameters)2Indicator-InNeck
ThrustingBounce toward mid-body, not past (bearish continuation).2f64 (0 or -1)(no parameters)2Indicator-Thrusting
SeparatingLinesOpposite candle reopening at the prior open (continuation).2f64 ({-1, 0, +1})(no parameters)2Indicator-SeparatingLines
KickingTwo gapped opposite marubozu (violent reversal).2f64 ({-1, 0, +1})(no parameters)2Indicator-Kicking
KickingByLengthKicking signed by the longer marubozu.2f64 ({-1, 0, +1})(no parameters)2Indicator-KickingByLength
LadderBottom5-bar bullish reversal after a stepped decline.5f64 (0 or +1)(no parameters)5Indicator-LadderBottom
MatHold5-bar bullish continuation; shallow gapped rest.5f64 (0 or +1)penetration = 0.55Indicator-MatHold
MatchingLowTwo black closes at the same low (support floor).2f64 (0 or +1)(no parameters)2Indicator-MatchingLow
LongLineRange longer than the recent average, body-dominant.5f64 ({-1, 0, +1})period = 55Indicator-LongLine
ShortLineRange shorter than the recent average, body-dominant.5f64 ({-1, 0, +1})period = 55Indicator-ShortLine
RisingThreeMethods5-bar bullish continuation; in-range rest.5f64 (0 or +1)(no parameters)5Indicator-RisingThreeMethods
FallingThreeMethods5-bar bearish continuation; in-range rest.5f64 (0 or -1)(no parameters)5Indicator-FallingThreeMethods
UpsideGapThreeMethodsTwo whites gap up, black partly fills (continuation).3f64 (0 or +1)(no parameters)3Indicator-UpsideGapThreeMethods
DownsideGapThreeMethodsTwo blacks gap down, white partly fills (continuation).3f64 (0 or -1)(no parameters)3Indicator-DownsideGapThreeMethods
StalledPatternTwo long whites then a small one on the shoulder (bearish).3f64 (0 or -1)(no parameters)3Indicator-StalledPattern
StickSandwichTwo black closes sandwiching a white (support).3f64 (0 or +1)(no parameters)3Indicator-StickSandwich
TakuriStrict dragonfly doji, very long lower shadow.1f64 (0 or +1)(no parameters)1Indicator-Takuri
ClosingMarubozuLong body, no shadow on the close end.1f64 ({-1, 0, +1})(no parameters)1Indicator-ClosingMarubozu
OpeningMarubozuLong body, no shadow on the open end.1f64 ({-1, 0, +1})(no parameters)1Indicator-OpeningMarubozu
TasukiGapCounter candle into a gap that holds (continuation).3f64 ({-1, 0, +1})(no parameters)3Indicator-TasukiGap
UniqueThreeRiverBlack, new-low black inside, small white (bottom).3f64 (0 or +1)(no parameters)3Indicator-UniqueThreeRiver
ConcealingBabySwallowRare 4-bar capitulation; black run then engulf.4f64 (0 or +1)(no parameters)4Indicator-ConcealingBabySwallow

Market Profile

Session-anchored value-area / opening-range / initial-balance indicators. All require manual reset() at session boundaries.

IndicatorOne-linerInputOutputRangeDefaultsWarmupDeep dive
ValueAreaRolling Market Profile: POC + VAH + VAL via volume bins.Candle(poc, vah, val)unbounded (price scale)(period, bin_count, value_area_pct)periodIndicator-ValueArea
VolumeProfileFull per-bin volume histogram over a rolling window.Candle(price_low, price_high, bins)bins ≥ 0(period=20, bin_count=50)periodIndicator-VolumeProfile
TpoProfileTime-Price-Opportunity (letter) count per price bucket.Candle(price_low, price_high, counts)counts ≥ 0(period=30, bin_count=50)periodIndicator-TpoProfile
InitialBalanceFirst-N-bar session range, locked after warmup.Candle(high, low)unbounded (price scale)period = 12periodIndicator-InitialBalance
OpeningRangeLocked first-N range + live breakout-distance from midpoint.Candle(high, low, breakout_distance)unbounded (price scale)period = 6periodIndicator-OpeningRange

Risk / Performance

Risk-adjusted return ratios, drawdown analytics, and tail-risk measures. Single-stream metrics take f64 returns / equity; benchmark-relative metrics take (asset, benchmark) pairs.

IndicatorOne-linerInputOutputRangeDefaultsWarmupDeep dive
SharpeRatio(mean - rf) / sample_stddev rolling.f64f64unbounded(period, rf)periodIndicator-SharpeRatio
SortinoRatioSharpe with downside-only deviation.f64f64unbounded(period, mar)periodIndicator-SortinoRatio
CalmarRatiomean(returns) / max_drawdown(equity) from window.f64f64unbounded; 0 if no DDperiodperiodIndicator-CalmarRatio
OmegaRatioΣ gains-above-threshold / Σ losses-below.f64f64[0, ∞) (Inf if all-positive)(period, threshold)periodIndicator-OmegaRatio
MaxDrawdownRolling worst peak-to-trough decline.f64 (equity)f64[0, 1]period1Indicator-MaxDrawdown
AverageDrawdownRolling mean drawdown depth (same as PainIndex).f64 (equity)f64[0, 1]periodperiodIndicator-AverageDrawdown
DrawdownDurationBars elapsed since all-time peak.f64 (equity)u32[0, ∞)(no parameters)1Indicator-DrawdownDuration
PainIndexMean drawdown depth (Becker).f64 (equity)f64[0, 1]periodperiodIndicator-PainIndex
ValueAtRiskHistorical lower-tail quantile, sign-flipped.f64f64[0, ∞)(period, confidence)periodIndicator-ValueAtRisk
ConditionalValueAtRiskMean of returns beyond VaR (Expected Shortfall).f64f64[0, ∞)(period, confidence)periodIndicator-ConditionalValueAtRisk
ProfitFactorΣ positive / Σ |negative| over window.f64f64[0, ∞) (Inf if all-positive)periodperiodIndicator-ProfitFactor
GainLossRatiomean(wins) / mean(|losses|).f64f64[0, ∞)periodperiodIndicator-GainLossRatio
RecoveryFactorCumulative net_return / max_drawdown.f64 (equity)f64unbounded; 0 if no DD(no parameters)1Indicator-RecoveryFactor
KellyCriterionRolling Kelly fraction winrate − (1−winrate)/payoff_ratio.f64f64unbounded; typically (0, 1)periodperiodIndicator-KellyCriterion
TreynorRatio(mean_asset − rf) / Beta.(f64, f64)f64unbounded(period, rf)periodIndicator-TreynorRatio
InformationRatiomean(active) / tracking_error.(f64, f64)f64unboundedperiodperiodIndicator-InformationRatio
AlphaJensen's alpha — mean(asset) − (rf + Beta·(mean_bench − rf)).(f64, f64)f64unbounded(period, rf)periodIndicator-Alpha

Microstructure

Non-OHLCV analytics over the order book and the trade tape. Order-book indicators take an OrderBook depth snapshot; trade-flow indicators take a Trade (size + aggressor side); price-impact measures take a TradeQuote (a trade paired with the mid at execution); Footprint returns a variable-length per-bucket profile. The Python and Node bindings accept these as plain arrays (see each deep dive); WASM exposes per-event update.

IndicatorOne-linerInputOutputRangeDefaultsWarmupDeep dive
OrderBookImbalanceTop1Signed depth pressure at the touch.OrderBookf64[−1, 1](no parameters)1Indicator-OrderBookImbalanceTop1
OrderBookImbalanceTopNSigned depth pressure over the top levels.OrderBookf64[−1, 1]levels1Indicator-OrderBookImbalanceTopN
OrderBookImbalanceFullSigned depth pressure over the whole book.OrderBookf64[−1, 1](no parameters)1Indicator-OrderBookImbalanceFull
MicropriceSize-weighted fair value tilting the mid.OrderBookf64within spread(no parameters)1Indicator-Microprice
QuotedSpreadTop-of-book spread in bps of the mid.OrderBookf64≥ 0(no parameters)1Indicator-QuotedSpread
DepthSlopeMean per-side OLS slope of cumulative size vs distance.OrderBookf64≥ 0(no parameters)1Indicator-DepthSlope
SignedVolumeTrade size signed by aggressor (±size).Tradef64unbounded(no parameters)1Indicator-SignedVolume
CumulativeVolumeDeltaRunning sum of signed volume.Tradef64unbounded(no parameters)1Indicator-CumulativeVolumeDelta
TradeImbalanceRolling (buy − sell)/(buy + sell) over window trades.Tradef64[−1, 1]windowwindowIndicator-TradeImbalance
EffectiveSpread2·D·(price − mid)/mid·1e4 bps round-trip cost.TradeQuotef64unbounded(no parameters)1Indicator-EffectiveSpread
RealizedSpreadEffective spread net of impact over horizon.TradeQuotef64unboundedhorizonhorizon + 1Indicator-RealizedSpread
KylesLambdaRolling OLS price impact per unit signed volume.TradeQuotef64unboundedwindowwindow + 1Indicator-KylesLambda
FootprintBuy/sell volume profile per price bucket.TradeFootprintOutputper-bucket ≥ 0tick_size1Indicator-Footprint

Derivatives

Perpetual- and dated-futures analytics over a DerivativesTick — a single feed bundling funding rate, mark / index / futures price, open interest, positioning, taker flow and liquidations. Each indicator reads only the fields it needs; the Python and Node bindings expose just those fields per update (see each deep dive), and batch takes equal-length arrays. WASM exposes per-tick update.

IndicatorOne-linerInputOutputRangeDefaultsWarmupDeep dive
FundingRateThe current perpetual funding rate.DerivativesTickf64unbounded (may be negative)(no parameters)1Indicator-FundingRate
FundingRateMeanRolling mean funding rate over window.DerivativesTickf64unboundedwindowwindowIndicator-FundingRateMean
FundingRateZScoreFunding rate in stddevs from its rolling mean.DerivativesTickf64unbounded around zerowindowwindowIndicator-FundingRateZScore
FundingBasisPerp premium to spot (mark − index)/index.DerivativesTickf64unbounded around zero(no parameters)1Indicator-FundingBasis
OpenInterestDeltaTick-over-tick change in open interest.DerivativesTickf64unbounded around zero(no parameters)2Indicator-OpenInterestDelta
OIPriceDivergenceRelative OI change minus relative price change over window.DerivativesTickf64unbounded around zerowindowwindow + 1Indicator-OIPriceDivergence
OIWeightedCumulative OI-weighted mark price.DerivativesTickf64unbounded (price scale)(no parameters)1Indicator-OIWeighted
LongShortRatioAggregate long size over short size.DerivativesTickf64≥ 0 (0 if no shorts)(no parameters)1Indicator-LongShortRatio
TakerBuySellRatioTaker buy volume over taker sell volume.DerivativesTickf64≥ 0 (0 if no sells)(no parameters)1Indicator-TakerBuySellRatio
LiquidationFeaturesLong/short liquidation → net / total / imbalance.DerivativesTickLiquidationFeaturesOutputimbalance ∈ [−1, 1](no parameters)1Indicator-LiquidationFeatures
TermStructureBasisDated-future premium to spot (futures − index)/index.DerivativesTickf64unbounded around zero(no parameters)1Indicator-TermStructureBasis
CalendarSpreadDated-future premium to the perpetual (futures − mark)/mark.DerivativesTickf64unbounded around zero(no parameters)1Indicator-CalendarSpread

Pick the right indicator for…

A short cheat-sheet of "I want X, which indicator?" answers, grounded in what each indicator actually computes.

  • Fast trend filter, minimal lag. Hma for smoothness + responsiveness, Tema for further lag reduction at the cost of noise, Kama for adaptiveness instead of fixed lag.
  • Slow trend filter. Sma is the simplest; Ema responds slightly faster with the same smoothness budget.
  • Trend-following crossovers. Two-line crossovers are the textbook entry; MacdIndicator packages the idea with a signal line and histogram.
  • Trend strength — is there a trend at all? Adx (> 25 trending, < 20 ranging); ChoppinessIndex / VerticalHorizontalFilter answer the same question without a direction.
  • Overbought / oversold. Rsi is the default; Stochastic for faster signals; WilliamsR for an inverted scale; Mfi for a volume-aware RSI.
  • Volatility level vs. momentum. Atr / TrueRange for the level; ChaikinVolatility for whether ranges are expanding or contracting.
  • Breakout level. Donchian upper/lower bands are the Turtle-style trigger.
  • Trailing stop. Psar, SuperTrend, ChandelierExit, ChandeKrollStop and AtrTrailingStop are a whole family of them.
  • Volume confirmation. Obv is the simplest; ChaikinMoneyFlow is a bounded balance; Vwap / RollingVwap give a volume-weighted reference.
  • Mean reversion. ZScore flags statistically stretched prices; BollingerBandwidth / PercentB locate price within the bands.

Source-of-truth files

Every claim above can be checked against the source in crates/wickra-core/src/indicators/ — one file per indicator. The Rust unit tests inside each module are the ground truth for sample values. Python defaults (the period = 14 etc.) come from the #[pyo3(signature = …)] attributes in bindings/python/src/lib.rs; indicators without a Python default require an explicit argument.

Alt-Chart Bars

Price-driven chart constructors built on the BarBuilder trait (not Indicator): each consumes a candle stream and emits a variable number of completed bars per candle. They are close-driven and not Chain-able.

IndicatorOne-linerInputOutputRangeDefaultsWarmupDeep dive
RenkoBarsFixed box-size bricks with the two-box reversal rule.CandleVec<RenkoBrick>n/abox_sizeseeds on 1st candleIndicator-RenkoBars
KagiBarsReversal-amount line segments.CandleVec<KagiBar>n/areversalseeds on 1st candleIndicator-KagiBars
PointAndFigureBarsBox-size X/O columns with an N-box reversal.CandleVec<PnfColumn>n/a(box_size, reversal=3)seeds on 1st candleIndicator-PointAndFigureBars

See also