Migration from TA-Lib
ferro-ta is designed as a drop-in replacement for ta-lib (the Python talib package) for the most-commonly used indicators. This guide explains the differences so you can migrate existing code with confidence.
Import changes
TA-Lib uses a single flat namespace:
import talib
result = talib.SMA(close, timeperiod=14)
ferro-ta exposes the same names at the top level and in sub-modules:
# Option A — top-level (most concise, mirrors talib)
from ferro_ta import SMA, EMA, RSI
result = SMA(close, timeperiod=14)
# Option B — sub-modules
from ferro_ta.overlap import SMA
from ferro_ta.momentum import RSI
Multi-output functions return a tuple in both libraries:
# talib
upper, middle, lower = talib.BBANDS(close)
# ferro_ta
upper, middle, lower = ferro_ta.BBANDS(close)
Input / output conventions
Both libraries accept NumPy float64 arrays. ferro-ta also accepts any
array-like (Python list, float32, pandas Series) and converts
automatically.
Leading NaN values — both libraries emit
NaNfor the “warm-up” period at the start of an array. The number ofNaNvalues is identical for all indicators marked Exact or Close in the accuracy table.Output length — always equal to input length, matching TA-Lib.
Pandas Series — ferro-ta transparently preserves the original index when a
pd.Seriesis passed as input.
Accuracy levels
Symbol |
Meaning |
|---|---|
✅ Exact |
Values match TA-Lib to floating-point precision. |
✅ Close |
Values converge to TA-Lib after the warm-up window (EMA-seed differences resolve within ~50 bars for typical periods). |
⚠️ Corr |
Strong correlation (> 0.95) but not numerically identical (e.g. MAMA uses the same algorithm but slightly different initialization). |
⚠️ Shape |
Same output shape and NaN structure; absolute values differ (e.g. SAR reversal history can diverge due to floating-point accumulation). |
All overlap, momentum, volume, volatility, statistic, and price-transform functions are Exact or Close. The only remaining Corr / Shape functions are MAMA, SAR, SAREXT, and the six HT_* cycle indicators — see the roadmap for details.
Known behavioural differences
EMA / DEMA / TEMA / T3 / MACD
TA-Lib seeds the first EMA value with a simple moving average. ferro-ta uses the same seeding, so values converge after the warm-up period. For a 14-period EMA on typical market data, convergence is complete by bar ~60.
RSI
ferro-ta uses the same Wilder smoothing seed as TA-Lib (SMA seed for the first
timeperiod bars) and produces Exact results.
SAR / SAREXT
Parabolic SAR reversal history can diverge in rare edge-cases due to floating-point accumulation differences. Output shapes (NaN count, length) match exactly.
HT_* cycle indicators
The Hilbert Transform cycle indicators (HT_DCPERIOD, HT_DCPHASE,
HT_PHASOR, HT_SINE, HT_TRENDLINE, HT_TRENDMODE) use the
same Ehlers algorithm as TA-Lib but may differ slightly in floating-point
accumulation. All six share a 63-bar lookback matching TA-Lib.
OBV
ferro-ta OBV starts accumulation from zero at bar 0 (same as TA-Lib for most data sets). If your TA-Lib OBV shows an offset this is usually due to a starting volume difference in the input data.
Before / after example
# --- Before (ta-lib) ---
import numpy as np
import talib
close = np.random.rand(200).cumsum() + 100.0
high = close + 0.5
low = close - 0.5
sma = talib.SMA(close, timeperiod=14)
ema = talib.EMA(close, timeperiod=14)
rsi = talib.RSI(close, timeperiod=14)
upper, mid, lower = talib.BBANDS(close, timeperiod=20)
macd, signal, hist = talib.MACD(close)
atr = talib.ATR(high, low, close, timeperiod=14)
# --- After (ferro_ta) ---
import numpy as np
from ferro_ta import SMA, EMA, RSI, BBANDS, MACD, ATR
close = np.random.rand(200).cumsum() + 100.0
high = close + 0.5
low = close - 0.5
sma = SMA(close, timeperiod=14)
ema = EMA(close, timeperiod=14)
rsi = RSI(close, timeperiod=14)
upper, mid, lower = BBANDS(close, timeperiod=20)
macd, signal, hist = MACD(close)
atr = ATR(high, low, close, timeperiod=14)
Only the import line changes for the most common indicators.
Extended (non-TA-Lib) indicators
ferro-ta additionally provides indicators not in TA-Lib:
from ferro_ta import (
VWAP, SUPERTREND, ICHIMOKU, DONCHIAN, PIVOT_POINTS,
KELTNER_CHANNELS, HULL_MA, CHANDELIER_EXIT, VWMA, CHOPPINESS_INDEX,
)
See Extended Indicators for full API documentation.