# Indicator binding manifest — data-driven description of Rust indicators. # # Used by scripts/generate_bindings.py to generate Python wrappers. # Schema (per indicator): # rust_fn: name of the function in _ferro_ta # array_params: list of parameter names that are array-like (passed to _to_f64) # timeperiod_param: optional; name of period parameter to validate # timeperiod_min: optional; minimum value (default 1) # equal_length_groups: optional; list of groups of param names that must have equal length # defaults: optional; map of param name -> default value for function signature # extra_params: optional; list of param names (after array_params and timeperiod) for signature/call # # Indicators with multiple period params or custom logic (MACD, MA, MAVP, MAMA, SAR, SAREXT, MACDEXT) # are listed here for reference but are not generated (hand-written wrappers in overlap.py). overlap: SMA: rust_fn: sma array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 30 } EMA: rust_fn: ema array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 30 } WMA: rust_fn: wma array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 30 } DEMA: rust_fn: dema array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 30 } TEMA: rust_fn: tema array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 30 } TRIMA: rust_fn: trima array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 30 } KAMA: rust_fn: kama array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 30 } T3: rust_fn: t3 array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 5, vfactor: 0.7 } extra_params: [vfactor] BBANDS: rust_fn: bbands array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 5, nbdevup: 2.0, nbdevdn: 2.0 } extra_params: [nbdevup, nbdevdn] MIDPOINT: rust_fn: midpoint array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 14 } MIDPRICE: rust_fn: midprice array_params: [high, low] timeperiod_param: timeperiod equal_length_groups: [[high, low]] defaults: { timeperiod: 14 } MACDFIX: rust_fn: macdfix array_params: [close] timeperiod_param: signalperiod defaults: { signalperiod: 9 } # Below: documented in manifest but use hand-written wrappers (multiple periods or custom validation) MACD: rust_fn: macd array_params: [close] custom: true SAR: rust_fn: sar array_params: [high, low] custom: true MA: rust_fn: ma array_params: [close] custom: true MAVP: rust_fn: mavp array_params: [close, periods] custom: true MAMA: rust_fn: mama array_params: [close] custom: true SAREXT: rust_fn: sarext array_params: [high, low] custom: true MACDEXT: rust_fn: macdext array_params: [close] custom: true # --------------------------------------------------------------------------- # volume # --------------------------------------------------------------------------- volume: AD: rust_fn: ad array_params: [high, low, close, volume] equal_length_groups: [[high, low, close, volume]] ADOSC: rust_fn: adosc array_params: [high, low, close, volume] equal_length_groups: [[high, low, close, volume]] defaults: { fastperiod: 3, slowperiod: 10 } extra_params: [fastperiod, slowperiod] custom: true # two period params (fastperiod < slowperiod) OBV: rust_fn: obv array_params: [close, volume] equal_length_groups: [[close, volume]] # --------------------------------------------------------------------------- # volatility # --------------------------------------------------------------------------- volatility: ATR: rust_fn: atr array_params: [high, low, close] timeperiod_param: timeperiod equal_length_groups: [[high, low, close]] defaults: { timeperiod: 14 } NATR: rust_fn: natr array_params: [high, low, close] timeperiod_param: timeperiod equal_length_groups: [[high, low, close]] defaults: { timeperiod: 14 } TRANGE: rust_fn: trange array_params: [high, low, close] equal_length_groups: [[high, low, close]] # --------------------------------------------------------------------------- # statistic # --------------------------------------------------------------------------- statistic: STDDEV: rust_fn: stddev array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 5, nbdev: 1.0 } extra_params: [nbdev] VAR: rust_fn: var array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 5, nbdev: 1.0 } extra_params: [nbdev] LINEARREG: rust_fn: linearreg array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 14 } LINEARREG_SLOPE: rust_fn: linearreg_slope array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 14 } LINEARREG_INTERCEPT: rust_fn: linearreg_intercept array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 14 } LINEARREG_ANGLE: rust_fn: linearreg_angle array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 14 } TSF: rust_fn: tsf array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 14 } BETA: rust_fn: beta array_params: [real0, real1] timeperiod_param: timeperiod equal_length_groups: [[real0, real1]] defaults: { timeperiod: 5 } CORREL: rust_fn: correl array_params: [real0, real1] timeperiod_param: timeperiod equal_length_groups: [[real0, real1]] defaults: { timeperiod: 30 } # --------------------------------------------------------------------------- # momentum (single-period or simple equal-length; multi-period / tuple-return marked custom) # --------------------------------------------------------------------------- momentum: RSI: rust_fn: rsi array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 14 } MOM: rust_fn: mom array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 10 } ROC: rust_fn: roc array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 10 } ROCP: rust_fn: rocp array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 10 } ROCR: rust_fn: rocr array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 10 } ROCR100: rust_fn: rocr100 array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 10 } WILLR: rust_fn: willr array_params: [high, low, close] timeperiod_param: timeperiod equal_length_groups: [[high, low, close]] defaults: { timeperiod: 14 } AROON: rust_fn: aroon array_params: [high, low] timeperiod_param: timeperiod equal_length_groups: [[high, low]] defaults: { timeperiod: 14 } AROONOSC: rust_fn: aroonosc array_params: [high, low] timeperiod_param: timeperiod equal_length_groups: [[high, low]] defaults: { timeperiod: 14 } CCI: rust_fn: cci array_params: [high, low, close] timeperiod_param: timeperiod equal_length_groups: [[high, low, close]] defaults: { timeperiod: 14 } MFI: rust_fn: mfi array_params: [high, low, close, volume] timeperiod_param: timeperiod equal_length_groups: [[high, low, close, volume]] defaults: { timeperiod: 14 } BOP: rust_fn: bop array_params: [open, high, low, close] equal_length_groups: [[open, high, low, close]] STOCHF: rust_fn: stochf array_params: [high, low, close] equal_length_groups: [[high, low, close]] defaults: { fastk_period: 5, fastd_period: 3 } extra_params: [fastk_period, fastd_period] custom: true STOCH: rust_fn: stoch array_params: [high, low, close] equal_length_groups: [[high, low, close]] defaults: { fastk_period: 5, slowk_period: 3, slowd_period: 3 } extra_params: [fastk_period, slowk_period, slowd_period] custom: true STOCHRSI: rust_fn: stochrsi array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 14, fastk_period: 5, fastd_period: 3 } extra_params: [fastk_period, fastd_period] custom: true APO: rust_fn: apo array_params: [close] defaults: { fastperiod: 12, slowperiod: 26 } extra_params: [fastperiod, slowperiod] custom: true PPO: rust_fn: ppo array_params: [close] defaults: { fastperiod: 12, slowperiod: 26, signalperiod: 9 } extra_params: [fastperiod, slowperiod, signalperiod] custom: true CMO: rust_fn: cmo array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 14 } PLUS_DM: rust_fn: plus_dm array_params: [high, low] timeperiod_param: timeperiod equal_length_groups: [[high, low]] defaults: { timeperiod: 14 } MINUS_DM: rust_fn: minus_dm array_params: [high, low] timeperiod_param: timeperiod equal_length_groups: [[high, low]] defaults: { timeperiod: 14 } PLUS_DI: rust_fn: plus_di array_params: [high, low, close] timeperiod_param: timeperiod equal_length_groups: [[high, low, close]] defaults: { timeperiod: 14 } MINUS_DI: rust_fn: minus_di array_params: [high, low, close] timeperiod_param: timeperiod equal_length_groups: [[high, low, close]] defaults: { timeperiod: 14 } DX: rust_fn: dx array_params: [high, low, close] timeperiod_param: timeperiod equal_length_groups: [[high, low, close]] defaults: { timeperiod: 14 } ADX: rust_fn: adx array_params: [high, low, close] timeperiod_param: timeperiod equal_length_groups: [[high, low, close]] defaults: { timeperiod: 14 } ADXR: rust_fn: adxr array_params: [high, low, close] timeperiod_param: timeperiod equal_length_groups: [[high, low, close]] defaults: { timeperiod: 14 } TRIX: rust_fn: trix array_params: [close] timeperiod_param: timeperiod defaults: { timeperiod: 30 } ULTOSC: rust_fn: ultosc array_params: [high, low, close] equal_length_groups: [[high, low, close]] defaults: { timeperiod1: 7, timeperiod2: 14, timeperiod3: 28 } extra_params: [timeperiod1, timeperiod2, timeperiod3] custom: true