Skip to main content
polars-anta banner

Institutional-Grade Alpha Research, Market Microstructure, Quantitative Feature Engineering & Vectorized Backtesting in Polars

Auditable mathematical expressions. Cross-sectional factor analytics and microstructure modeling. An intuitive dual .anta / .ta interface. Zero-C deployment with Rust-accelerated performance.

An open-source quantitative research engine for market microstructure estimation, cross-sectional alpha discovery, statistical factor evaluation, technical feature engineering, and loop-free vectorized backtesting. Purpose-built for quantitative researchers, institutional prop trading desks, index futures & derivatives strategists, and systematic portfolio managers who demand both sub-second execution speed and 100% mathematical transparency.

CI PyPI Version Python Version Polars Version Engine Docs Open In Colab License GitHub stars

Documentation • Quick start • API Reference • Learning Resources • Examples • Report an issue


What is polars-anta?

polars-anta (Alpha & Numerical Technical Analysis) is an institutional-grade Python library for quantitative feature engineering, market microstructure analysis, cross-sectional alpha research, statistical signal validation, and vectorized portfolio backtesting powered natively by Polars.

Unlike traditional technical analysis packages designed around single-asset retail charting, polars-anta is architected from the ground up for buy-side research workflows: unifying formulaic alpha primitives (WorldQuant 101), liquidity and price-impact estimators (Amihud, Kyle's $\lambda$, Roll, Corwin-Schultz), closed-form rolling OLS regressions, cross-sectional standardization/neutralization, Alphalens-style Rank IC evaluation, and transaction-cost-aware vectorized backtesting inside Polars' multi-threaded Rust query engine.

Why Institutional & Quantitative Research Teams Choose polars-anta

  • End-to-end alpha research lifecycle — move seamlessly from raw OHLCV integrity auditing and multi-timeframe resampling to microstructure extraction, cross-sectional factor neutralization, IC/quantile decay analysis, and vectorized backtesting in one unified Arrow/Polars pipeline.
  • 100% Auditable white-box mathematics — Risk Committees and Quantitative Researchers can inspect clean, closed-form algebraic Polars expressions (pl.Expr) directly in Python rather than trusting opaque C/Cython black-box binaries.
  • Rust-accelerated panel execution — computations compile directly into Polars' multi-threaded Rust query planner and SIMD kernels, achieving up to 112.4x speedups over Pandas without GIL contention.
  • Zero-C enterprise compliance — installs deterministically via pip install polars-anta across air-gapped institutional Linux clusters, Docker research containers, Windows workstations, and macOS without gcc, msvc, or external C headers.
  • Built for Index Futures & Multi-Asset Universes — evaluate intraday signals on single-instrument futures (e.g., VN30F1M, CME E-mini, Crypto Perpetuals) or scale cross-sectional alphas across thousands of equities simultaneously via .over("symbol") and .over("timestamp").

The Institutional Research Pipeline:

Raw Market Data → Data Validation & Resampling → Microstructure & Alpha Expressions (.anta / .ta) → Cross-Sectional Neutralization → Rank IC & Quantile Validation → Cost-Aware Vectorized Backtest

Capability TA-Lib pandas-ta Alphalens / Legacy polars-anta
Deployment & C Dependencies External C library & MSVC / GCC Pure Python / NumPy Legacy Pandas (<2.0) lock-in Zero C compilation (pure Polars & NumPy)
Execution Engine Single-threaded C loops Single-threaded Pandas / GIL Single-threaded Pandas Multi-threaded Rust query engine + SIMD
Multi-Asset Panel Scaling Manual sequential loops Slow .groupby().apply() Memory-heavy MultiIndex Native .over("symbol") parallelization
Dual Namespace API Unsupported Single .ta accessor Standalone functions only Both .anta & .ta on Expr, DataFrame, LazyFrame
Cross-Sectional & Orthogonalization Unsupported Unsupported Basic quantile bucketing Built-in cs_winsorize, cs_zscore, neutralize, orthogonalize
Microstructure & Derivatives Unsupported Unsupported Unsupported Volume/Dollar/Imbalance Bars, Futures Roll, VPIN, OFI, Kyle's $\lambda$
Quant ML (AFML Primitives) Unsupported Unsupported Unsupported Fixed-Window FracDiff (frac_diff), Triple-Barrier & Trend-Scanning
Institutional Eval & Backtesting Unsupported Unsupported IC only (no backtester) Newey-West HAC IC, ic_decay, PSR/DSR, Realistic Backtest & MAE/MFE
Lazy & Streaming Execution Unsupported Unsupported Unsupported Full pl.LazyFrame query optimization & Arrow zero-copy

Institutional Use Cases & Target Desks

  1. Index Futures & Intraday Derivatives Desks (VN30F1M, CME E-Mini, Perpetual Futures) Aggregate tick/minute feeds into information-driven bars (resample_volume_bars, resample_dollar_bars, resample_imbalance_bars), stitch continuous roll series (stitch_futures_roll), track intraday session_vwap z-scores, measure order flow toxicity (vpin, ofi) and carry (futures_basis, oi_regime), and backtest with next-bar open/VWAP execution (execution_price="open"), session flatten masks (flat_mask), and round-trip MAE/MFE excursion ledgers (bt.trades()).
  2. Cross-Sectional Statistical Arbitrage & Equity Factor Research Construct, winsorize (cs_winsorize via Quantile/Z-Score/MAD), standardize (cs_zscore), sector-neutralize (neutralize), and Gram-Schmidt OLS residualize (orthogonalize) WorldQuant 101 Formulaic Alphas across thousands of tickers, then validate with Newey-West HAC $t$-statistics (ic_summary), multi-horizon Alpha Half-Life (ic_decay), and Deflated Sharpe Ratios (deflated_sharpe_ratio).
  3. Quantitative Machine Learning (AFML) Feature Stores Transform non-stationary prices via Fixed-Window Fractional Differentiation (frac_diff), generate dynamic path-dependent labels (triple_barrier_labels with Meta-Labeling and trend_scanning_labels), and feed zero-copy Apache Arrow tensors directly into LightGBM, XGBoost, CatBoost, or PyTorch.

Quick start

1. Install

polars-anta is available on PyPI with zero C compiler requirements:

python -m pip install polars-anta

To upgrade to the latest release:

python -m pip install --upgrade polars-anta

Or using uv:

uv add polars-anta

2. Verify your installation

Importing polars_anta automatically registers both .anta and .ta namespaces on Polars Expr, DataFrame, and LazyFrame objects:

import polars as pl
import polars_anta as pa

df = pl.DataFrame({"close": [100.0, 102.0, 101.5, 104.0, 106.5, 105.0, 108.0]})
out = df.with_columns(
    pl.col("close").anta.ema(period=3).round(2).alias("ema_3"),
    pl.col("close").anta.rsi(period=3).round(2).alias("rsi_3"),
)
print(out.tail(3))
# shape: (3, 3)
# ┌───────┬────────┬───────┐
# │ close ┆ ema_3  ┆ rsi_3 │
# │ ---   ┆ ---    ┆ ---   │
# │ f64   ┆ f64    ┆ f64   │
# ╞═══════╪════════╪═══════╡
# │ 106.5 ┆ 104.59 ┆ 88.14 │
# │ 105.0 ┆ 104.80 ┆ 62.61 │
# │ 108.0 ┆ 106.40 ┆ 80.52 │
# └───────┴────────┴───────┘

3. Explore quantitative workflows

Start with our ready-to-run example scripts or 1-click Google Colab notebooks, or explore the five institutional workflows below:

A. Intraday Derivatives, Information Bars, Roll Stitching & Microstructure

# 1. Stitch continuous futures contracts (backward/ratio/panama) & sample Volume/Imbalance bars:
cont_df = raw_contracts.anta.stitch_futures_roll(method="backward")
vol_bars = cont_df.anta.resample_volume_bars(volume_threshold=5_000)

# 2. Extract Session-Anchored VWAP, Order Flow Toxicity (VPIN, OFI), Carry & OI Regimes:
deriv_features = vol_bars.with_columns(
    pl.col("close")
    .anta.session_vwap("high", "low", "volume", session_by="trading_date")
    .alias("svwap"),
    pl.col("close").anta.vpin("volume", period=20).alias("vpin_20"),
    pl.col("bid_price").anta.ofi("bid_size", "ask_price", "ask_size", period=5).alias("ofi_5"),
    pl.col("close").anta.futures_basis("spot_close", "days_to_expiry", period=20).alias("basis"),
    pl.col("close").anta.oi_regime("open_interest", period=1).alias("oi_state"),
).unnest("svwap", "basis", "oi_state")

B. Quant Machine Learning (AFML) — Fractional Differentiation & Dynamic Labeling

# Memory-preserving stationary features (FFD) + Triple-Barrier & Trend-Scanning labels:
ml_dataset = df.with_columns(
    pl.col("close").anta.frac_diff(d=0.4, window=20).over("symbol").alias("close_ffd"),
    pl.col("close")
    .anta.triple_barrier_labels(
        volatility=pl.col("close").pct_change().rolling_std(20),
        horizon=12,
        pt_mult=2.0,
        sl_mult=1.5,
        side=pl.col("primary_signal"),  # Enables binary meta_label {0.0, 1.0}
    )
    .over("symbol")
    .alias("tb"),
    pl.col("close")
    .anta.trend_scanning_labels(min_window=5, max_window=20)
    .over("symbol")
    .alias("ts"),
).unnest("tb", "ts")

C. Cross-Sectional Standardization, Neutralization & Multi-Factor Orthogonalization

alpha_df = panel_df.with_columns(
    (
        -pl.col("close").anta.ts_delta(5).over("symbol")
        * pl.col("volume").anta.ts_rank(20).over("symbol")
    ).alias("raw_alpha")
).with_columns(
    pl.col("raw_alpha")
    .anta.cs_winsorize(over="date", method="mad", threshold=3.0)
    .anta.cs_zscore(over="date", clip_bound=3.0)
    .anta.neutralize(by="sector", over="date", standardize=True)
    # Gram-Schmidt OLS projection orthogonal to Beta, Size & Volatility:
    .anta.orthogonalize(factors=["mkt_beta", "log_mcap", "vol_20"], over="date", standardize=True)
    .anta.ts_scale(a=1.0, over="date")
    .alias("pure_alpha_weight")
)

D. Institutional Factor Validation (Newey-West HAC IC, Alpha Half-Life & PSR / DSR)

eval_df = alpha_df.anta.forward_returns(periods=(1, 5, 10), group_by="symbol")

# Autocorrelation-robust Newey-West HAC t-statistic & Multi-Horizon IC Decay Half-Life:
ic_stats = eval_df.anta.ic_summary("pure_alpha_weight", "fwd_ret_5", group_by="date", nw_lags=5)
decay_table = eval_df.anta.ic_decay("pure_alpha_weight", horizons=(1, 2, 3, 5, 10, 20), group_by="date")

# Non-normal skewness/kurtosis-adjusted PSR & multiple-testing Deflated Sharpe Ratio (DSR):
sharpe_ significance = eval_df.select(
    pl.col("strat_ret").anta.probabilistic_sharpe_ratio(benchmark_sr=1.0).alias("psr"),
    pl.col("strat_ret").anta.deflated_sharpe_ratio(n_trials=50, trials_sr_std=0.4).alias("dsr"),
)

E. Execution-Realistic Vectorized Backtest, Excursion Ledger (MAE/MFE) & Grid Sweep

bt = (
    df.anta.ema(period=12, alias="ema_12")
    .anta.ema(period=26, alias="ema_26")
    .anta.backtest(
        entries=pl.col("ema_12").anta.crosses_above("ema_26"),
        exits=pl.col("ema_12").anta.crosses_below("ema_26"),
        execution_price="open",  # Fill at next-bar open (or "twap", "vwap", "close")
        flat_mask=pl.col("is_atc_bar"),  # Mandatory intraday EOD / roll flatten mask
        vol_target=0.15,  # 15% annualized target volatility scaling
        no_trade_buffer=0.05,  # Hysteresis buffer suppressing micro-turnover
        fee_rate=0.0005,
        slippage_rate=0.0002,
        initial_capital=100_000.0,
    )
)
print(bt.report())
print(bt.trades())  # Round-trip trade ledger with PnL, holding_bars, MAE & MFE!

What can you model and compute?

Area Examples of functionality API Docs
Trend & Overlays Adaptive moving averages (sma, ema, hma, kama, t3, alma), heikin_ashi, supertrend, ichimoku, adx, psar, pivot_points Trend Docs
Momentum Oscillators rsi, macd, ppo, stochastic, stoch_rsi, squeeze_momentum, stc, tsi, fisher_transform, cci, williams_r, kst Momentum Docs
Volatility & Channels atr, natr, bollinger_bands, keltner_channels, donchian_channels, chandelier_exit, parkinson_volatility, garman_klass_volatility, ulcer_index Volatility Docs
Volume & Money Flow vwap, vwap_bands, session_vwap, obv, cmf, mfi, adl, klinger, force_index, nvi, pvi, vpci, vr Volume Docs
Statistics, OLS & Stationarity Rolling zscore, percentile_rank, skewness, kurtosis, CAPM rolling_beta/rolling_alpha, closed-form linear_regression_*, Fixed-Window Fractional Differentiation (frac_diff) Stats Docs
Alpha Factors, Microstructure & Futures Cross-sectional ops (cs_rank, cs_zscore, cs_winsorize, neutralize, orthogonalize), liquidity & order flow (amihud_illiquidity, kyle_lambda, roll_spread, corwin_schultz_spread, vpin, ofi), index futures (futures_basis, oi_regime), regime complexity (hurst_exponent, fractal_dimension, entropy), and formulaic alphas (alpha_001–alpha_101) Alpha Docs
AFML Labeling, Factor Eval & Backtesting triple_barrier_labels, trend_scanning_labels, forward_returns, information_coefficient, Newey-West HAC ic_summary, ic_decay, quantile_analysis, probabilistic_sharpe_ratio, deflated_sharpe_ratio, vectorized_backtest, extract_trades (MAE/MFE), parameter_sweep Eval & Backtest Docs
Data Engineering & Information Bars Multi-timeframe OHLCV aggregation (resample_ohlcv), information-driven bars (resample_volume_bars, resample_dollar_bars, resample_imbalance_bars), continuous futures roll stitching (stitch_futures_roll), schema & price integrity checks (validate_ohlcv), batch feature generator (df.anta.add_all()) Resampling Docs

How polars-anta is organized

The library separates data engineering, domain-specific indicator & alpha expressions, factor evaluation, and vectorized backtesting into clean, self-contained modules so that each layer can be inspected and extended independently:

polars_anta/
├── trend.py        # Moving averages, trend overlays, candlestick transforms & pivot systems
├── momentum.py     # Momentum oscillators, cycle detectors & divergence indicators
├── volatility.py   # OHLC volatility estimators, ATR trailing stops & price channels
├── volume.py       # Session/rolling VWAP bands, money flow & volume accumulation metrics
├── stats.py        # Rolling moments, CAPM beta/alpha, closed-form OLS & Fractional Diff (FFD)
├── alpha.py        # Cross-sectional orthogonalization, microstructure, futures & 101 alphas
├── evaluation.py   # AFML labeling, Newey-West Rank IC, IC decay, quantiles & PSR/DSR metrics
├── backtest.py     # Realistic vectorized backtester, vol-targeting, MAE/MFE ledger & sweeps
├── resample.py     # Calendar/Volume/Dollar/Imbalance bars, futures roll stitching & validation
└── namespace.py    # Dual .anta and .ta registration across Expr, DataFrame & LazyFrame
flowchart LR
    A["1. Microstructure & Roll<br/>Volume/Dollar/Imbalance Bars<br/>stitch_futures_roll • VPIN • OFI"] --> B["2. Quant ML & Stationarity<br/>Fixed-Window FracDiff (FFD)<br/>Triple-Barrier • Trend-Scanning"]
    B --> C["3. Factor Orthogonalization<br/>cs_winsorize • cs_zscore<br/>neutralize • orthogonalize (OLS)"]
    C --> D["4. Institutional Validation<br/>Newey-West HAC t-stat<br/>IC Decay Half-Life • PSR & DSR"]
    D --> E["5. Realistic Execution<br/>Next-Open/VWAP • Vol-Targeting<br/>No-Trade Buffer • MAE/MFE Ledger"]

Documentation and learning resources

Resource Description
Online Documentation Full documentation website with search, mathematical formulas, and usage guides
Quantitative Theory & Institutional Workflows Deep-dive guide into AFML labeling, fractional differentiation, microstructure bars, Newey-West HAC, and PSR/DSR
API Reference Overview Complete index of all supported functions, input arguments, and pl.Struct output schemas
Getting Started Guide Introduction to Polars expressions, .unnest(), and fluent .anta / .ta chaining
Multi-Asset Universe Guide Best practices for partitioning indicators and cross-sectional factors with .over("ticker")
Factor Evaluation & Backtesting Guide Evaluating factor Rank IC / Quantiles and running df.anta.backtest() with transaction costs
Architecture & Vectorization Deep dive into closed-form OLS identities, Wilder smoothing recurrences, and stride kernels
Example Scripts Standalone runnable Python scripts (quickstart.py, 04_backtest_showcase.py)
Interactive Jupyter Notebooks Hands-on tutorials runnable with 1 click in Google Colab
Benchmarks & Reproducibility 1,000,000-row benchmark methodology and reproduction script (benchmark_speed.py)
Roadmap & Changelog Release history, upcoming milestones, and version changes

Interactive Jupyter & Colab Notebooks

Notebook Topic & Workflow Covered Launch in Browser
quickstart_colab.ipynb 1-minute interactive demo covering expression syntax, 500-ticker scans, and live 112x speed benchmarks Open In Colab
01_quickstart.ipynb Step-by-step introduction to .anta / .ta expressions, pl.Struct unnesting, and indicator plotting Open In Colab
02_multi_asset_portfolio_scan.ipynb Screening a 500-ticker equity universe in ~50 ms using parallel .over("ticker") expressions Open In Colab
03_crypto_momentum_scan.ipynb Cross-sectional cryptocurrency momentum, volatility filtering, and composite ranking workflow Open In Colab
04_backtest_and_alpha_eval.ipynb 1-line entry/exit crossovers, formatted tearsheets, 5-quantile IC analysis, and dollar-neutral portfolio backtesting Open In Colab

Performance benchmark (1,000,000 rows)

polars-anta Performance Benchmark

Benchmarks measured across 1,000,000 bars (single-asset random walk) and a 500 tickers × 2,000 bars universe (1,000,000 rows) on Polars' multi-threaded Rust engine vs. single-threaded Pandas:

Operation / Indicator Dataset Scale Pandas Execution polars-anta Execution Measured Speedup
Linear Regression Slope (OLS) 1,000,000 bars 2.3529 s 0.0209 s 112.4x Faster
Multi-Asset RSI (14) 500 tickers × 2k bars 0.4398 s 0.0545 s 8.1x Faster
Multi-Asset SMA (20) 500 tickers × 2k bars 0.1345 s 0.0168 s 8.0x Faster
Z-Score Normalization 1,000,000 bars 0.0450 s 0.0267 s 1.7x Faster
Exponential Moving Average 1,000,000 bars 0.0100 s 0.0069 s 1.5x Faster
Simple Moving Average 1,000,000 bars 0.0170 s 0.0153 s 1.1x Faster

API Reference & Indicator Catalog

All indicators, alpha primitives, and evaluation functions are exported at the top level (import polars_anta as pa) and registered on .anta and .ta namespaces. Click any module below to expand its complete function signature reference, or visit the Online API Reference.

1. Trend & Overlays — polars_anta.trend · Detailed Docs
Function Signature Output Type / Struct Fields Description
sma(close, period=10) Float64 Simple Moving Average
ema(close, period=10) Float64 Exponential Moving Average
wma(close, period=10) Float64 Linearly Weighted Moving Average
hma(close, period=10) Float64 Hull Moving Average (low-lag trend filter)
dema(close, period=10) Float64 Double Exponential Moving Average
tema(close, period=10) Float64 Triple Exponential Moving Average
zlema(close, period=10) Float64 Zero-Lag Exponential Moving Average
t3(close, period=5, vfactor=0.7) Float64 Tillson T3 Generalized DEMA Smoothing
alma(close, period=9, offset=0.85, sigma=6.0) Float64 Arnaud Legoux Gaussian-Filtered Moving Average
kama(close, period=10, fast_span=2, slow_span=30) Float64 Kaufman's Efficiency-Adaptive Moving Average
mcginley_dynamic(close, period=14, k=0.6) Float64 McGinley Dynamic Volatility-Adjusted Moving Average
vidya(close, period=9, cmo_period=9) Float64 Chande's Variable Index Dynamic Average
heikin_ashi(open, high, low, close) Struct(ha_open, ha_high, ha_low, ha_close) Vectorized Heikin-Ashi Candlestick Transform (via closed-form ewm_mean(alpha=0.5))
supertrend(high, low, close, period=10, multiplier=3.0) Struct(supertrend, direction) ATR-Based Dynamic Trailing Volatility Stop
psar(high, low, af_step=0.02, af_max=0.2) Float64 Welles Wilder's Parabolic Stop and Reverse (SAR)
ichimoku(high, low, close, tenkan=9, kijun=26, senkou_b=52, displacement=26) Struct(tenkan_sen, kijun_sen, senkou_span_a, senkou_span_b, chikou_span) Ichimoku Kinko Hyo Equilibrium Cloud
adx(high, low, close, period=14) Struct(adx, plus_di, minus_di) Average Directional Movement Index (Wilder's smoothing)
vortex(high, low, close, period=14) Struct(vi_plus, vi_minus) Vortex Positive & Negative Trend Movement Indicator
aroon(high, low, period=25) Struct(up, down, oscillator) Aroon Trend Age Indicator & Oscillator
ssl_channel(high, low, close, period=10) Struct(ssl_up, ssl_down, hlv) Semaphore Signal Level (SSL) Channel
trend_intensity_index(close, period=30, signal_period=None) Float64 or Struct(tii, tii_signal) M.H. Pee's Trend Intensity Index (TII)
chop(high, low, close, period=14) Float64 E.W. Dreiss Choppiness Index (Trend vs. Consolidation [0, 100])
mass_index(high, low, fast_period=9, slow_period=25) Float64 Donald Dorsey's Range Bulge Reversal Predictor
center_of_gravity(close, period=10) Float64 John Ehlers' Center of Gravity (COG) Oscillator
pivot_points(high, low, close) Struct(pivot, r1, r2, r3, s1, s2, s3) Classic Floor Trader Pivot Points
fibonacci_pivots(high, low, close) Struct(pivot, r1, r2, r3, s1, s2, s3) Fibonacci Retracement/Extension Pivot Points (38.2%, 61.8%, 100%)
camarilla_pivots(high, low, close) Struct(pivot, r1..r4, s1..s4) Camarilla Intraday Mean-Reversion & Breakout Pivots
woodie_pivots(open, high, low, close) Struct(pivot, r1, r2, s1, s2) Woodie's Close-Weighted Pivot Points
2. Momentum Oscillators — polars_anta.momentum · Detailed Docs
Function Signature Output Type / Struct Fields Description
rsi(close, period=14) Float64 Relative Strength Index (Wilder's RMA smoothing)
macd(close, fast_period=12, slow_period=26, signal_period=9) Struct(macd, signal, histogram) Moving Average Convergence Divergence
ppo(close, fast_period=12, slow_period=26, signal_period=9) Struct(ppo, signal, histogram) Percentage Price Oscillator (scale-invariant MACD)
stochastic(high, low, close, k_period=14, d_period=3, smooth_k=1) Struct(k, d) Stochastic Oscillator (%K, %D)
stoch_rsi(close, rsi_period=14, stoch_period=14, k_smooth=3, d_smooth=3) Struct(k, d) Chande & Kroll's Stochastic RSI
squeeze_momentum(high, low, close, bb_period=20, bb_mult=2.0, kc_period=20, kc_mult=1.5) Struct(squeeze_on, squeeze_off, no_squeeze, momentum) John Carter's TTM Squeeze Volatility Compression & Linear Regression Momentum
stc(close, fast_period=23, slow_period=50, cycle_period=10, factor=0.5) Float64 Doug Schaff's Trend Cycle (Double-Stochastic MACD Oscillator [0, 100])
tsi(close, long_period=25, short_period=13) Float64 William Blau's Double-Smoothed True Strength Index
fisher_transform(high, low, period=10) Struct(fisher, signal) John Ehlers' Gaussian Fisher Transform
williams_r(high, low, close, period=14) Float64 Larry Williams' %R Overbought/Oversold Oscillator [-100, 0]
cci(high, low, close, period=20, constant=0.015) Float64 Donald Lambert's Commodity Channel Index (Mean Absolute Deviation)
roc(close, period=10) Float64 Percentage Rate of Change
awesome_oscillator(high, low, fast_period=5, slow_period=34) Float64 Bill Williams' Midpoint Awesome Oscillator (AO)
cmo(close, period=14) Float64 Tushar Chande's Momentum Oscillator [-100, 100]
coppock(close, wma_period=10, fast_roc=11, slow_roc=14) Float64 Edwin Coppock's Long-Term Momentum Curve
ultimate_oscillator(high, low, close, p1=7, p2=14, p3=28) Float64 Larry Williams' Multi-Timeframe Buying Pressure Oscillator
rvi(open, high, low, close, period=10) Struct(rvi, signal) John Ehlers' Symmetrically Weighted Relative Vigor Index
kst(close, r1=10, r2=15, r3=20, r4=30, ...) Struct(kst, signal) Martin Pring's "Know Sure Thing" Four-ROC Oscillator
dpo(close, period=20) Float64 Detrended Price Oscillator (cycle isolator)
bop(open, high, low, close) Float64 Igor Livshin's Balance of Market Power [-1, 1]
cfo(close, period=14) Float64 Tushar Chande's OLS Forecast Oscillator (%)
3. Volatility & Channels — polars_anta.volatility · Detailed Docs
Function Signature Output Type / Struct Fields Description
true_range(high, low, close) Float64 Welles Wilder's Single-Bar True Range
atr(high, low, close, period=14) Float64 Average True Range (Wilder's RMA smoothing)
natr(high, low, close, period=14) Float64 Normalized Average True Range (100 * ATR / Close)
bollinger_bands(close, period=20, num_std=2.0) Struct(upper, middle, lower, bandwidth, percent_b) John Bollinger's Volatility Envelope, Bandwidth & %B
bollinger_delta(close, period=20, num_std=2.0) Float64 Absolute Bollinger Band Spread ($2 \cdot k \cdot \sigma$)
keltner_channels(high, low, close, ema_period=20, atr_period=10, multiplier=2.0) Struct(upper, middle, lower) Chester Keltner / Linda Raschke EMA-ATR Volatility Channels
keltner_width(high, low, close, ema_period=20, atr_period=10, multiplier=2.0) Float64 Normalized Keltner Channel Width (%)
donchian_channels(high, low, period=20) Struct(upper, middle, lower) Richard Donchian's Breakout High/Low Channels
donchian_width(high, low, period=20) Float64 Normalized Donchian Channel Width (%)
chandelier_exit(high, low, close, period=22, multiplier=3.0) Struct(long_stop, short_stop) Chuck LeBeau's ATR Trailing Chandelier Exit Stops
starc_bands(high, low, close, period=20, atr_period=15, multiplier=2.0) Struct(upper, middle, lower) Manning Stoller's Average Range Channels (STARC)
envelopes(close, period=20, percentage=0.025) Struct(upper, middle, lower) Percentage Moving Average Envelopes
stddev(close, period=20) Float64 Rolling Sample Standard Deviation
ulcer_index(close, period=14) Float64 Peter Martin's Downside Drawdown Depth & Duration Risk Index
historical_volatility(close, period=20, trading_days=252) Float64 Annualized Close-to-Close Log Return Volatility
parkinson_volatility(high, low, period=20, trading_days=252) Float64 Parkinson (1980) Extreme-Value High-Low Range Volatility Estimator
garman_klass_volatility(open, high, low, close, period=20, trading_days=252) Float64 Garman & Klass (1980) Minimum-Variance OHLC Volatility Estimator
chaikin_volatility(high, low, period=10, roc_period=10) Float64 Marc Chaikin's High-Low Range Expansion Rate of Change
4. Volume & Money Flow — polars_anta.volume · Detailed Docs
Function Signature Output Type / Struct Fields Description
obv(close, volume) Float64 Joe Granville's Cumulative On-Balance Volume
vwap(high, low, close, volume, period=None) Float64 Volume Weighted Average Price (Cumulative or Rolling Window)
vwap_bands(high, low, close, volume, period=None, mult1=1.0, mult2=2.0, mult3=3.0) Struct(vwap, upper_1..3, lower_1..3) Institutional VWAP with Volume-Weighted Standard Deviation Bands
session_vwap(high, low, close, volume, session_by=None, mult1=1.0, mult2=2.0) Struct(vwap, upper_1..2, lower_1..2, zscore) Session-Anchored VWAP Resetting per Trading Date/Session with Deviation Z-Score
vwma(close, volume, period=20) Float64 Volume Weighted Moving Average
cmf(high, low, close, volume, period=20) Float64 Marc Chaikin's Money Flow (CLV-Weighted Volume Ratio)
adl(high, low, close, volume) Float64 Chaikin Accumulation / Distribution Line
mfi(high, low, close, volume, period=14) Float64 Quong & Soudack's Volume-Weighted RSI (Money Flow Index [0, 100])
eom(high, low, volume, period=14, scale=10000.0) Float64 Richard Arms' Ease of Movement (EMV)
klinger(high, low, close, volume, fast_period=34, slow_period=55, signal_period=13) Struct(klinger, signal) Stephen Klinger's Volume Force Oscillator
nvi(close, volume) Float64 Norman Fosback's Negative Volume Index (Smart-Money Tracker)
pvi(close, volume) Float64 Positive Volume Index (Crowd-Activity Tracker)
pvt(close, volume) Float64 Cumulative Return-Weighted Price Volume Trend
force_index(close, volume, period=13) Float64 Alexander Elder's EMA-Smoothed Force Index
vpci(close, volume, short_period=5, long_period=20) Float64 Buff Dormeier's Volume Price Confirmation Indicator
vr(close, volume, period=26) Float64 Up-Volume vs. Down-Volume Ratio (%)
5. Quantitative Statistics & Regression — polars_anta.stats · Detailed Docs
Function Signature Output Type Description
zscore(close, period=20) Float64 Rolling Standardized Z-Score Anomaly Metric $(x_t - \mu_t) / \sigma_t$
percentile_rank(close, period=20) Float64 Vectorized Rolling Empirical Percentile Rank $[0.0, 1.0]$
skewness(close, period=20) Float64 Rolling Third Standardized Moment (Return Asymmetry)
kurtosis(close, period=20) Float64 Rolling Fourth Standardized Moment (Excess Tail Risk)
rolling_cov(x, y, period=20) Float64 Rolling Sample Covariance $\text{Cov}(X, Y)$
rolling_corr(x, y, period=20) Float64 Rolling Pearson Linear Correlation Coefficient $[-1.0, 1.0]$
rolling_beta(asset_ret, bench_ret, period=60) Float64 Rolling CAPM Systematic Market Beta $\text{Cov}(R_a, R_m) / \text{Var}(R_m)$
rolling_alpha(asset_ret, bench_ret, rf=0.0, period=60) Float64 Rolling Jensen's Risk-Adjusted Excess Alpha
linear_regression_slope(close, period=14) Float64 Closed-Form Vectorized OLS Linear Regression Slope ($\beta_1$)
linear_regression_intercept(close, period=14) Float64 Closed-Form Vectorized OLS Linear Regression Intercept ($\beta_0$)
linear_regression_angle(close, period=14) Float64 Rolling OLS Regression Trend Angle in Degrees $\arctan(\beta_1) \cdot \frac{180}{\pi}$
linear_regression_forecast(close, period=14) Float64 Rolling OLS End-of-Window Fitted Value $\hat{y}_t = \beta_0 + \beta_1 (n - 1)$
frac_diff(close, d=0.4, window=20) Float64 Fixed-Window Fractional Differentiation (FFD — López de Prado, 2018) $(1 - B)^d$
6. Alpha Factor & Microstructure Primitives — polars_anta.alpha · Detailed Docs
Function Signature Domain Description
cs_rank(expr, over=None, method="average", percentile=True) Cross-Sectional Cross-sectional percentile rank $[0.0, 1.0]$
cs_zscore(expr, over=None, clip_bound=None) Cross-Sectional Cross-sectional zero-mean unit-variance standardization with optional $z$-clipping
cs_winsorize(expr, over=None, method="quantile", lower=0.01, upper=0.99, threshold=3.0) Cross-Sectional Cross-sectional outlier clipping via "quantile", "zscore", or robust "mad"
neutralize(expr, by, over=None, standardize=False) Cross-Sectional Sector/industry/group demeaning & standardization
orthogonalize(expr, factors, over=None, standardize=True, ridge=0.0) Cross-Sectional Multi-factor OLS Gram-Schmidt residualization & standardization
ts_scale(expr, a=1.0, over=None) Cross-Sectional L1 book-size normalization ($\sum \vert w_i\vert = a$)
amihud_illiquidity(close, volume, period=20, scale=1e6) Microstructure Amihud (2002) Illiquidity Ratio $\frac{1}{N}\sum \frac{\vert r_t\vert }{\text{DollarVolume}_t} \times \text{scale}$
roll_spread(close, period=20) Microstructure Roll (1984) Serial Price-Change Covariance Effective Bid-Ask Spread $2\sqrt{\max(0, -\text{Cov}(\Delta P_t, \Delta P_{t-1}))}$
corwin_schultz_spread(high, low, period=20) Microstructure Corwin & Schultz (2012) Two-Bar High-Low Range Effective Bid-Ask Spread Estimator
kyle_lambda(close, volume, period=20, scale=1e6) Microstructure Kyle (1985) Price-Impact Coefficient $\lambda$ via Rolling OLS on Signed Dollar Volume
vpin(close, volume, period=20) Microstructure Bulk Volume Classification (BVC) Volume-Synchronized Probability of Informed Trading $[0, 1]$
ofi(bid_price, bid_size, ask_price, ask_size, period=1) Microstructure Cont, Kukanov & Stoikov (2014) Level-1 Order Flow Imbalance
futures_basis(futures_close, spot_close, days_to_expiry=None, period=20) Index Futures Futures-Spot Spread, Proportional Basis, Annualized Carry & Basis Z-Score (Struct)
oi_regime(close, open_interest, period=1) Index Futures 4-State Open Interest & Price Action Regime Classifier (Struct: Long/Short Buildup & Covering/Liquidation)
twap(high, low, close, period=20) Microstructure Rolling Time-Weighted Average Price
relative_spread(high, low, close) Microstructure Intraday High-Low Relative Range Proxy $(H_t - L_t) / C_t$
hl_ratio(high, low) Microstructure Log Intraday Volatility Expansion $\ln(H_t / L_t)$
co_ratio(close, open) Microstructure Log Intraday Sentiment Drift $\ln(C_t / O_t)$
returns_divergence(close, volume, period=14) Microstructure Rolling Price Return vs. Volume Change Divergence
volume_weighted_momentum(close, volume, period=10) Microstructure Price Rate of Change Amplified by Relative Volume Ratio
ts_rank(close, period=10) Time-Series Vectorized rolling percentile rank $[0.0, 1.0]$
ts_argmax(close, period=10) Time-Series Vectorized bars elapsed since rolling window peak
ts_argmin(close, period=10) Time-Series Vectorized bars elapsed since rolling window trough
decay_linear(close, period=10) Time-Series Linearly decaying weighted moving average
ts_delta(expr, period=1) Time-Series Difference operator $x_t - x_{t-d}$
ts_delay(expr, period=1) Time-Series Lag operator $x_{t-d}$
signed_power(expr, exponent=2.0) Time-Series Sign-preserving power $\text{sign}(x) \cdot \vert x\vert ^a$
ts_min(expr, period=10) Time-Series Rolling window minimum
ts_max(expr, period=10) Time-Series Rolling window maximum
ts_sum(expr, period=10) Time-Series Rolling window sum
ts_std(expr, period=10) Time-Series Rolling sample standard deviation
ts_product(expr, period=10) Time-Series Vectorized rolling window product
ts_correlation(x, y, period=10) Time-Series Rolling Pearson correlation
ts_covariance(x, y, period=10) Time-Series Rolling sample covariance
ts_zscore(close, period=20) Time-Series Time-series rolling standardization $(x_t - \mu_t) / \sigma_t$
hurst_exponent(close, period=50) Regime / Complexity Vectorized Rolling R/S Hurst Exponent $H \in [0, 1]$ (mean-reversion vs. trend persistence)
fractal_dimension(high, low, period=20) Regime / Complexity John Ehlers' Fractal Dimension Index $D \in [1, 2]$ (market noise vs. trend efficiency)
entropy(close, period=20, bins=5) Regime / Complexity Rolling Normalized Shannon Information Entropy $[0, 1]$
alpha_001 – alpha_030 Formulaic Alpha Canonical formulaic alphas (#1 through #30, Kakushadze 2016)
alpha_041(high, low, close, volume) Formulaic Alpha Geometric High-Low Midpoint vs. VWAP
alpha_054(open, high, low, close) Formulaic Alpha Intraday Candlestick Power Ratio
alpha_101(open, high, low, close) Formulaic Alpha Normalized Intraday Body-to-Range Momentum
7. Factor Evaluation, Performance Metrics & Vectorized Backtesting — polars_anta.evaluation, backtest · Detailed Docs
Function Signature Domain Description
forward_returns(df, close_col="close", periods=(1, 5, 10), group_by=None) Factor Evaluation Multi-horizon forward returns $(P_{t+k} / P_t) - 1$ for factor testing
information_coefficient(df, factor_col, return_col, group_by=None, method="spearman") Factor Evaluation Cross-sectional Rank IC ("spearman") or Normal IC ("pearson") series
ic_summary(df, factor_col, return_col, group_by=None, method="spearman", nw_lags=None) Factor Evaluation Summary dictionary (ic_mean, ic_std, icir, t_stat, nw_t_stat, hit_rate, n_periods)
ic_decay(df, factor_col, close_col="close", horizons=(1, 2, 3, 5, 10, 20), ...) Factor Evaluation Multi-horizon IC decay schedule with Newey-West HAC $t$-stat and exponential Alpha Half-Life
quantile_analysis(df, factor_col, return_col, quantiles=5, group_by=None) Factor Evaluation Quantile bucket returns, Sharpe, win rate, and cumulative performance ($Q_1 \dots Q_N$)
factor_turnover(df, factor_col, asset_col="ticker", time_col="timestamp", lag=1) Factor Evaluation Rank autocorrelation and L1 signal turnover across periods
triple_barrier_labels(close, volatility=None, horizon=10, pt_mult=2.0, sl_mult=2.0, ...) AFML Labeling Dynamic Triple-Barrier & Meta-Labeling (Struct(label, touch_bars, realized_return, meta_label))
trend_scanning_labels(close, min_window=5, max_window=20, step=1) AFML Labeling Multi-Horizon OLS Trend-Scanning Labels (Struct(label, t_value, optimal_window, ret))
drawdown_series(returns_or_equity, is_returns=True) Performance Metric Underwater percentage drawdown curve $\le 0.0$
max_drawdown(returns_or_equity, is_returns=True) Performance Metric Scalar Maximum Drawdown (MDD)
sharpe_ratio(returns, risk_free_rate=0.0, annualization=252.0) Performance Metric Annualized Sharpe Ratio scalar expression
sortino_ratio(returns, risk_free_rate=0.0, annualization=252.0) Performance Metric Annualized Sortino Ratio using downside deviation
calmar_ratio(returns, annualization=252.0) Performance Metric Annualized Return divided by $\vert MDD\vert $
profit_factor(returns) Performance Metric Gross Profit divided by $\vert Gross Loss\vert $
win_rate(returns, include_zeros=False) Performance Metric Proportion of active periods with positive returns
probabilistic_sharpe_ratio(returns, benchmark_sr=0.0, risk_free_rate=0.0, annualization=252.0) Performance Metric Skewness- & Kurtosis-adjusted Probabilistic Sharpe Ratio (PSR $\in [0, 1]$)
deflated_sharpe_ratio(returns, n_trials=10, trials_sr_std=0.5, ...) Performance Metric Multiple-Testing Deflated Sharpe Ratio (DSR $\in [0, 1]$, Bailey & López de Prado 2014)
crosses_above(a, b, over=None) / crosses_below(a, b, over=None) Backtesting Boolean crossover/crossunder detection against another series or scalar threshold
signals_to_positions(entries, exits, ...) Backtesting Loop-free .forward_fill() state machine converting entry/exit triggers to positions
vectorized_backtest(df, signal="signal", ...) / df.anta.backtest(...) Backtesting Vectorized backtester with execution_price (open/twap/vwap), flat_mask, vol_target, no_trade_buffer, fees & slippage
BacktestResult / extract_trades(bt_df) Backtesting Result container (.data, .summary, .report(), .trades()) & Round-Trip Trade Ledger with MAE/MFE
parameter_sweep(df, signals, ...) / compare_strategies(strategies) Backtesting Multi-parameter grid evaluation with automatic Deflated Sharpe Ratio (dsr) & strategy comparison
8. Data Engineering, Information Bars & Futures Roll — polars_anta.resample · Detailed Docs
Function Signature Domain Description
validate_ohlcv(df, ...) / df.anta.validate_ohlcv(...) Data Integrity Structural validation of OHLCV invariants ($H_t \ge \max(O_t, C_t, L_t)$, $L_t \le \min(O_t, C_t, H_t)$, $V_t \ge 0$, chronological monotonicity)
resample_ohlcv(df, every, ...) / df.anta.resample(every, ...) Time Bar Aggregation Multi-timeframe calendar aggregation ("5m", "15m", "1h", "1d") via group_by_dynamic
resample_volume_bars(df, volume_threshold, ...) Information Bars Cumulative Volume Bar sampling ($\sum V_i \ge \Theta_V$) restoring return Gaussianity
resample_dollar_bars(df, dollar_threshold, ...) Information Bars Cumulative Dollar/Notional Bar sampling ($\sum P_i V_i \ge \Theta_D$) invariant to price inflation
resample_imbalance_bars(df, expected_imbalance, ...) Information Bars López de Prado (2018) Tick/Volume Imbalance Bars ($\left\vert \sum b_i v_i\right\vert \ge \Theta_{\text{TIB/VIB}}$)
stitch_futures_roll(df, method="backward", ...) Continuous Futures Non-leaky continuous futures stitching ("backward", "ratio", "panama") across contract expiries

Quantitative Theory, Mathematical Foundations & Rust Vectorization Architecture

For complete derivations, step-by-step proofs, and institutional research workflows, see Architecture & Mathematical Proofs and Quantitative Theory & Institutional Workflows.

1. Closed-Form Algebraic Reductions ($O(N)$ Rust Native Kernels)

  • 112.4x Faster Rolling OLS Linear Regression (linear_regression_slope): Instead of solving $\left(X^\top X\right)^{-1} X^\top Y_t$ inside a Python loop over $N$ bars, polars-anta exploits the exact linear relationship between the Linearly Weighted Moving Average ($\text{WMA}_n$, weights $w_i \propto i+1$) and Simple Moving Average ($\text{SMA}_n$):

    $$\beta_{1,t} = \frac{6}{n + 1}\left(\text{WMA}_n(y)_t - \text{SMA}_n(y)t\right), \qquad \beta{0,t} = \text{SMA}_n(y)t - \beta{1,t}\frac{n - 1}{2}$$

    Both $\text{WMA}_n$ and $\text{SMA}_n$ execute natively inside Polars' multi-threaded Rust engine with $O(1)$ amortized cost per bar.

  • Wilder's RMA & Heikin-Ashi via Exact ewm_mean Mapping: Wilder's recursive smoothing ($RMA_t = \frac{1}{n}x_t + \frac{n-1}{n}RMA_{t-1}$ in rsi, atr, adx) and Heikin-Ashi open prices ($HA_Open_t = \frac{1}{2}HA_Open_{t-1} + \frac{1}{2}HA_Close_{t-1}$) are mapped directly to pl.Expr.ewm_mean(alpha=1/n, adjust=False) and ewm_mean(alpha=0.5, adjust=False)—eliminating sequential Python loops completely.

  • Fixed-Window Fractional Differentiation (frac_diff, López de Prado 2018): Expands the backshift operator $(1 - B)^d = \sum_{k=0}^{\infty} \omega_k B^k$ via recursive binomial weights $\omega_0 = 1, ; \omega_k = -\omega_{k-1} \frac{d - k + 1}{k}$ over a fixed window $W$, achieving statistical stationarity ($d \approx 0.3\text{–}0.5$) while preserving long-memory trend/cointegration information lost by first-differencing ($d=1$).

2. Cross-Sectional Factor Orthogonalization & Statistical Inference

  • Modified Gram-Schmidt Multi-Factor Projection (orthogonalize): Applies the Frisch-Waugh-Lovell theorem per timestamp cross-section (over="date") to strip linear exposures to $K$ arbitrary risk factors $F = [f_1, \dots, f_K]$ (e.g., Market Beta, Log Size, Volatility, Liquidity) with optional Ridge regularization $\lambda \ge 0$:

    $$u_k = \tilde{f}k - \sum{j=1}^{k-1} \frac{\langle \tilde{f}k, u_j \rangle}{|u_j|2^2 + \lambda} u_j, \qquad \epsilon\alpha = \tilde{\alpha} - \sum{k=1}^{K} \frac{\langle \tilde{\alpha}, u_k \rangle}{|u_k|_2^2 + \lambda} u_k$$

  • Newey-West HAC $t$-Statistics & Exponential Alpha Half-Life (ic_summary, ic_decay): Multi-period forward returns ($h > 1$) induce $MA(h-1)$ serial correlation in Information Coefficient series. polars-anta applies the Newey & West (1987) Bartlett kernel variance estimator $\hat{\Omega}{NW} = \hat{\gamma}0 + 2 \sum{j=1}^{L} \left(1 - \frac{j}{L+1}\right) \hat{\gamma}j$ so $t{NW} = \frac{\overline{IC}}{\sqrt{\hat{\Omega}{NW} / T}}$ remains unbiased, and fits $\ln |IC(h)| = a - \lambda h$ to estimate the exact signal Half-Life $t_{1/2} = \frac{\ln 2}{\lambda}$.

  • Probabilistic & Deflated Sharpe Ratios (probabilistic_sharpe_ratio, deflated_sharpe_ratio): Adjusts Sharpe Ratio inference for non-normal skewness ($\hat{\gamma}_3$), fat tails ($\hat{\gamma}_4$), and selection bias across $K$ tested parameter configurations (Bailey & López de Prado, 2014):

    $$\text{PSR}(SR^) = \Phi!\left(\frac{(\widehat{SR} - SR^)\sqrt{T - 1}}{\sqrt{1 - \hat{\gamma}_3 \widehat{SR} + \frac{\hat{\gamma}4 - 1}{4}\widehat{SR}^2}}\right), \qquad SR^*{DSR} = \sqrt{V[{\widehat{SR}_k}]}\left((1 - \gamma)\Phi^{-1}!\left(1 - \frac{1}{K}\right) + \gamma \Phi^{-1}!\left(1 - \frac{1}{K e}\right)\right)$$

3. Zero-Copy Stride Windows & Loop-Free State Machines

  • Zero-Copy 2D Stride Views: Path-dependent rolling operators (triple_barrier_labels, trend_scanning_labels, hurst_exponent, entropy, ts_rank, ts_argmax) construct virtual 2D rolling views (N - P + 1, P) via numpy.lib.stride_tricks.sliding_window_view with $O(1)$ pointer/stride metadata overhead and zero memory duplication.
  • State-Machine Backtesting & Excursion Analytics (vectorized_backtest, extract_trades): Entry/exit signals compile into positions via .forward_fill(), apply ex-ante volatility targeting ($w_t^{\text{vol}} = \text{clip}(\sigma_{\text{target}} / \hat{\sigma}{t-1}, 0, L{\max})$), enforce intraday flatten masks (flat_mask), execute at next-bar Open/TWAP/VWAP prices (execution_price), and group active position runs via .rle_id() to compute exact per-trade Maximum Adverse Excursion (MAE) and Maximum Favorable Excursion (MFE).

Design philosophy

polars-anta aims to balance mathematical clarity, cross-sectional expressiveness, and execution speed:

  1. Keep quantitative formulas inspectable — write indicators using closed-form algebraic identities and native Polars expressions (pl.Expr) rather than hiding logic behind compiled C extensions.
  2. Eliminate Python loops — express recursive smoothing (Wilder's RMA, Heikin-Ashi) via exact ewm_mean recurrences and path-dependent rolling operators via zero-copy sliding_window_view kernels.
  3. Treat single-asset and multi-asset panels uniformly — every expression composes naturally with .over("ticker") for time-series operations and .over("date") for cross-sectional ranking and neutralization.
  4. Prevent look-ahead bias by default — backtesting utilities shift signals by signal_lag=1 bar out of the box and account for proportional transaction fees and slippage.
  5. Provide reproducible examples and parity tests — verify mathematical accuracy through comprehensive unit test suites and self-contained notebooks.

Contributing

Contributions from quantitative researchers, developers, and finance students are welcome! You can help by implementing new indicators, expanding formulaic alphas, improving documentation, or adding tutorial notebooks.


Project status and support

polars-anta is an actively developed open-source project. If you find a bug, need an indicator, or want to suggest a quantitative workflow example, please open an issue or join GitHub Discussions.

Disclaimer: polars-anta is provided for educational and research purposes without warranty of any kind. Quantitative models and backtest results should be independently verified before being used for live trading, investment, or risk-management decisions.

Author

polars-anta was created and is maintained by Phan Bui Huu An (@huuan26 • phanbuihuuan261103@gmail.com).

License

polars-anta is licensed under the Apache License 2.0. See the LICENSE file for details.


Explore the indicators • Run the Colab notebooks • Contribute to open quantitative finance

Documentation • API Reference • Examples • GitHub Issues

Metadata

Release files for polars-anta 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for polars-anta 0.3.1
File Size Uploaded Provenance Actions
polars_anta-0.3.1.tar.gz 1.1 MB With provenance Details for polars_anta-0.3.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for polars-anta 0.3.1
File Interpreter ABI Platform Actions
polars_anta-0.3.1-py3-none-any.whl Python 3 none any Details for polars_anta-0.3.1-py3-none-any.whl

Total release size: 1.2 MB

Release files / polars_anta-0.3.1.tar.gz

Download URL polars_anta-0.3.1.tar.gz
Size 1.1 MB
Tags Source
SHA-256 checksum
How to use checksums
952c14982f2aeb6e76c79080c0260b76a30ab41946d087c343c981c850dc9959
BLAKE2b-256 checksum
How to use checksums
f7f35892027323cd81f400f97f710ff756c69af4061e59e4fde699abcbd856db
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 1, 2026.

Transparency log

Release files / polars_anta-0.3.1-py3-none-any.whl

Download URL polars_anta-0.3.1-py3-none-any.whl
Size 104.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0c10480c4326b6adec9683d36b3d27ca9e1596dd42795f29670162fc4018bdbb
BLAKE2b-256 checksum
How to use checksums
0088f30df9608b3ff243080b5c9fa45d9b5da66f26dcad0e1fd63b209fb31e73
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 1, 2026.

Transparency log

Security for polars-anta 0.3.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for polars_anta-0.3.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 1, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page