ferro-ta Documentation
Languages
Python API
Evidence and Releases
Adjacent tooling
Overview
ferro-ta is a Rust-core technical analysis library with first-class bindings for Python, Rust, JavaScript (WASM), and Flutter.
Python, JavaScript (WASM), and Flutter wrap ferro_ta_core; Rust exposes
that crate directly. Python is the most complete ergonomic surface (TA-Lib
names, pandas/polars, Sphinx autodoc). It is not the only product. New
languages may only wrap the Rust core — see Adding a language binding.
Important
Performance varies by indicator, array layout, warmup, build flags, and machine. ferro-ta is often faster on selected indicators, not universally faster. See Benchmarks for the reproducible workflow, methodology notes, and the indicators where TA-Lib still wins or ties in the current checked-in artifact.
Shared core:
160+ indicators covering all TA-Lib categories
Pure Rust compute in
crates/ferro_ta_core— no Python, NumPy, or JS dependencyFirst-class packages: PyPI
ferro-ta, crates.ioferro_ta_core, npmferro-ta-wasm, pub.devferro_taBatch execution and streaming / bar-by-bar APIs on the surfaces that expose them
10 extended indicators not in TA-Lib (VWAP, Supertrend, Ichimoku Cloud, …)
Python-only ergonomics:
TA-Lib-style imports such as
ferro_ta.SMA(close, timeperiod=20)Pre-built wheels for the supported Python/OS matrix
Transparent
pandas.Series/polars.SeriessupportType stubs (
.pyi) and Sphinx autodoc under API Reference
Adjacent tooling (not language bindings):
Backtesting engine — OHLCV fill, 23 metrics, Monte Carlo, walk-forward, multi-asset — see Adjacent Tooling
Derivatives analytics — see Derivatives Analytics
Agentic workflow and LangChain tool wrappers — see Agentic guide
MCP server for MCP-compatible clients — see MCP guide
GPU helpers and plugins — see Adjacent Tooling
Installation
Pick a language. Full examples live on the language pages.
Language |
Install |
|---|---|
Python |
|
Rust |
|
JavaScript (WASM) |
|
Flutter / Dart |
|
Quick Start
import numpy as np
from ferro_ta import SMA, RSI, MACD, BBANDS
close = np.linspace(44.0, 48.0, 40)
print(SMA(close, timeperiod=5))
print(RSI(close, timeperiod=14))
macd_line, signal, hist = MACD(close)
upper, middle, lower = BBANDS(close, timeperiod=5)
See Quick Start for Rust, JavaScript, and Flutter snippets, or jump straight to Python, Rust, JavaScript / WASM, or Flutter / Dart.
Further Reading
Architecture — core vs bindings, marshalling flow.
Performance Guide — when to use raw numpy vs pandas/polars, batch notes, tips.
API Stability — stability tiers, versioning, and deprecation policy.
Support Matrix — parity status, language coverage, tested wheel targets, and supported Python versions.
Core-first binding policy — compute lives in
ferro_ta_core; every language is a thin wrapper.Adding a language binding — checklist for adding a new language binding.
Out-of-Core Execution — chunked processing and Dask integration.
Derivatives Analytics — IV helpers, options pricing/Greeks/IV, futures analytics, strategy schemas, and payoff helpers.
Adjacent Tooling — optional surfaces such as derivatives, MCP, GPU, plugins, and agent-oriented integrations.