mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-07-28 09:47:43 +00:00
935a5ab26c
The NativeAOT export had stale parameter names (period, minPeriod, maxPeriod, useMedian) from an older API. Renamed to match the actual Eacp.Batch(minPeriod, maxPeriod, avgLength, enhance) signature. ABI preserved — same 7 params, same types, no Python-side changes needed.
quantalib
393 technical analysis indicators compiled to native code via .NET NativeAOT, called from Python through ctypes. Same SIMD-accelerated engine as the QuanTAlib .NET package. Zero Python math reimplementation.
pip install quantalib
Quick Start
import numpy as np
import quantalib as qtl
close = np.random.default_rng(42).normal(100, 2, size=500)
sma = qtl.sma(close, period=20)
rsi = qtl.rsi(close, period=14)
upper, mid, lower = qtl.bbands(close, period=20, std=2.0)
Works with pandas, polars, and pyarrow — same-type-in, same-type-out:
# pandas — preserves index
import pandas as pd
s = pd.Series(close, name="close")
rsi = qtl.rsi(s, period=14) # → pd.Series
# polars — zero-copy-friendly
import polars as pl
s = pl.Series("close", close)
rsi = qtl.rsi(s, period=14) # → pl.Series
bb = qtl.bbands(s, period=20) # → pl.DataFrame (upper, mid, lower)
# pyarrow — for Arrow-native pipelines
import pyarrow as pa
a = pa.array(close, type=pa.float64())
rsi = qtl.rsi(a, period=14) # → pa.Array
pandas-ta users:
length=is accepted everywhere as an alias forperiod=.
Install optional backends:
pip install quantalib[pandas] # pandas / pd.Series support
pip install quantalib[polars] # polars / pl.Series support
pip install quantalib[pyarrow] # pyarrow / pa.Array support
pip install quantalib[all] # all three
Performance (500,000 bars, AVX-512)
| Indicator | quantalib | pandas-ta | Ratio |
|---|---|---|---|
| SMA | 328 μs | ~50 ms | ~150× |
| EMA | 421 μs | ~45 ms | ~107× |
| WMA | 302 μs | ~60 ms | ~199× |
| RSI | 517 μs | ~80 ms | ~155× |
The ctypes call adds 5-15 μs overhead. For arrays above a few hundred bars, NativeAOT wins by two orders of magnitude.
Categories
| Category | Module | Examples |
|---|---|---|
| Channels | channels |
bbands, kchannel, dchannel, aberr |
| Core | core |
ha, midpoint, avgprice, typprice |
| Cycles | cycles |
ht_dcperiod, ht_sine, cg, dsp |
| Dynamics | dynamics |
adx, aroon, ichimoku, supertrend |
| Errors | errors |
mse, rmse, mae, mape, huber |
| Filters | filters |
kalman, sgf, hp, butter2, wavelet |
| Momentum | momentum |
rsi, macd, roc, mom, tsi |
| Numerics | numerics |
fft, normalize, sigmoid, slope |
| Oscillators | oscillators |
stoch, cci, fisher, qqe, willr |
| Reversals | reversals |
psar, pivot, fractals, swings |
| Statistics | statistics |
zscore, correlation, entropy, linreg |
| Trends FIR | trends_fir |
sma, wma, hma, alma, trima |
| Trends IIR | trends_iir |
ema, dema, tema, kama, jma |
| Volatility | volatility |
atr, bbw, stddev, hv, tr |
| Volume | volume |
obv, vwma, mfi, cmf, adl |
Requirements
- Python 3.10+
- NumPy >= 1.24
- Pre-built wheels:
win-x64,linux-x64,osx-x64,osx-arm64
Optional dependencies
| Extra | Minimum version | Enables |
|---|---|---|
pandas |
≥ 1.5 | pd.Series / pd.DataFrame round-trip |
polars |
≥ 0.20 | pl.Series / pl.DataFrame round-trip |
pyarrow |
≥ 14.0 | pa.Array / pa.ChunkedArray round-trip |