Adjacent Tooling
These modules are useful, but they are secondary to ferro-ta’s core identity as a Python technical analysis library.
Area |
Status |
What it is |
|---|---|---|
Backtesting engine |
Adjacent |
Vectorized Rust backtester: OHLCV fill, stop-loss/TP, 23 performance metrics, trade extraction, parallel Monte Carlo, walk-forward analysis, and multi-asset portfolio simulation. See Backtesting Engine. |
Derivatives analytics |
Adjacent |
Options pricing, Greeks, implied volatility helpers, futures basis, curve, and roll utilities. See Derivatives Analytics. |
Agent workflow wrappers |
Adjacent |
Tool and workflow helpers for agent-style integrations. See docs/agentic.md. |
MCP server |
Experimental or adjacent |
FastMCP-based server exposing selected ferro-ta capabilities to MCP-compatible clients. See docs/mcp.md. |
WASM package |
Experimental |
Browser and Node.js package with a smaller indicator subset. See wasm/README.md. |
GPU backend |
Experimental |
Optional PyTorch-backed acceleration for a limited subset of indicators. See docs/gpu-backend.md. |
Plugin system |
Experimental |
Registry and plugin packaging model for custom indicators. See Writing a plugin. |
Backtesting Engine
ferro_ta.analysis.backtest ships a production-grade backtesting engine
backed entirely by Rust hot-path functions.
Core API:
from ferro_ta.analysis.backtest import BacktestEngine, monte_carlo, walk_forward
result = (
BacktestEngine()
.with_commission(0.001)
.with_slippage(5.0) # basis points
.with_ohlcv(high=high, low=low, open_=open_)
.with_stop_loss(0.02)
.with_take_profit(0.04)
.run(close, "sma_crossover")
)
print(result.metrics["sharpe"]) # one of 23 metrics
print(result.trades) # pandas DataFrame
print(result.drawdown_series.min()) # max drawdown
mc = monte_carlo(result, n_sims=1000) # parallel bootstrap
wf = walk_forward(close, "rsi", param_grid=[{"timeperiod": t} for t in [10,14,20]],
train_bars=500, test_bars=100)
Available Rust primitives (ferro_ta._ferro_ta):
backtest_core— close-only, vectorized, commission + slippagebacktest_ohlcv_core— fill at open, intrabar stop-loss / take-profitcompute_performance_metrics— 23 metrics in one pass (Sharpe, Sortino, Calmar, CAGR, Omega, Ulcer, win rate, profit factor, tail ratio, etc.)extract_trades_ohlcv— 9 parallel arrays (entry/exit bar, MAE, MFE, …)backtest_multi_asset_core— N-asset parallel backtest via Rayonmonte_carlo_bootstrap— parallel block bootstrap, returns (n_sims, n_bars)walk_forward_indices— anchored/rolling fold index generatorkelly_fraction/half_kelly_fraction
Speed vs competitors (100k bars, SMA crossover, Apple M-series):
Library |
Time |
vs ferro-ta |
|---|---|---|
ferro-ta |
0.29 ms |
— |
NumPy vectorized |
0.46 ms |
1.6× slower |
vectorbt |
2.9 ms |
10× slower |
backtesting.py |
320 ms |
1,100× slower |
backtrader |
~520 ms (10k bars) |
>15,000× slower |
How to read the project
When evaluating ferro-ta:
Start with the core library docs, migration guide, support matrix, and benchmarks.
Treat adjacent tooling as opt-in layers, not as proof that the core indicator library is broader or more stable than it is.
Check the release notes and stability policy before depending on experimental surfaces in production.