Skip to main content

Minimal Technical Analysis Library for Python

This package offers a curated list of technical analysis indicators implemented in Cython for optimal performance. The library is built around numpy arrays and provides interfaces for numpy, pandas and polars.

[!NOTE] This project is experimental and the interface can change.

[!IMPORTANT] Function signatures have changed: multi-input functions no longer accept a prices DataFrame. Pass the required columns as separate arguments instead. For example, use atr(prices["high"], prices["low"], prices["close"]). See the indicator table below for the data inputs required by each function.

Interfaces

Mintalib offers three dedicated interfaces for different workflows:

  • Functions (mintalib.functions) — eager functions for NumPy arrays and pandas or polars series.
  • Indicators (mintalib.indicators) — composable indicators for pandas-based workflows.
  • Expressions (mintalib.expressions) — composable expression factories for polars-native workflows.

Conventions

Indicators and Expressions expect prices DataFrames to have lowercase column names such as open, high, low, close, and volume. If your data uses different capitalization, use the normalize_prices utility function to normalize its column names.

from mintalib.utils import normalize_prices

prices = normalize_prices(rawprices)

Functions

Concrete functions are available from the mintalib.functions module with names in lower case like sma, atr, macd, etc.

Functions accept NumPy arrays, pandas Series, or polars Series as inputs. Single-output functions preserve the input container type when possible; multi-output functions return an appropriate tabular or named result.

import mintalib.functions as ta

prices = ... # pandas or polars DataFrame

sma = ta.sma(prices['close'], period=50)
atr = ta.atr(prices['high'], prices['low'], prices['close'], 14)
macd = ta.macd(prices['close'])  # macd, macdsignal, macdhist result

Indicators (pandas only)

Indicators are available from mintalib.indicators with upper-case names such as SMA, EMA, ATR, and MACD.

Indicators bind calculation functions and their parameters together into callable objects. They are particularly useful with pandas DataFrame.assign.

from mintalib.indicators import SMA, EMA, ROC, RSI, MACD

prices = ... # pandas DataFrame

result = prices.assign(
    ema20 = EMA(20),
    rsi = RSI(14),
    trend = EMA(20) | ROC(1)
)

Expressions (polars only)

Polars expression factories are available from mintalib.expressions with upper-case names such as SMA, EMA, ATR, and MACD.

Their signature is parameters first like period followed by optional expression inputs like src for single series indicators, or open, high, low, close, volume for multi-input expressions.

Series expressions can be composed with the .pipe method, as in pl.col("close").pipe(EMA, 20). Multi-output calculations such as MACD return a polars struct expression that you can unpack with .struct.unnest().

from mintalib.expressions import EMA, ATR, ROC, MACD

prices = ... # polars DataFrame

result = prices.with_columns(
    EMA(20).alias("ema"),
    ATR(14).alias("atr"),
    EMA(20).pipe(ROC, 1).alias("trend"),
    MACD().struct.unnest()
)

List of Indicators

Name Data inputs Description
ABS series Absolute Value
ADX high, low, close Average Directional Index
ALMA series Arnaud Legoux Moving Average
ATR high, low, close Average True Range
AVGPRICE open, high, low, close Average Price
BBANDS series Bollinger Bands
BBP series Bollinger Bands Percent (%B)
BBW series Bollinger Bands Width
BOP open, high, low, close Balance of Power
CCI high, low, close Commodity Channel Index
CLAG series Confirmation Lag
CMF high, low, close, volume Chaikin Money Flow
CROSSOVER series Cross Over
CROSSUNDER series Cross Under
DEMA series Double Exponential Moving Average
DIFF series Difference
DMI high, low, close Directional Movement Indicator
DONCHIAN high, low Donchian Channel
EMA series Exponential Moving Average
EXP series Exponential
FLAG series Flag Value
HMA series Hull Moving Average
KAMA series Kaufman Adaptive Moving Average
KELTNER high, low, close Keltner Channel
KER series Kaufman Efficiency Ratio
LAG series Lag Function
LINREG series Linear Regression (least squares moving average)
LINREG_RMSE series Linear Regression Root Mean Square Error
LINREG_RVALUE series Linear Regression R-Value
LINREG_SLOPE series Linear Regression Slope
LOG series Logarithm
LROC series Logarithmic Rate of Change
MACD series Moving Average Convergence Divergence
MACDV high, low, close Moving Average Convergence Divergence - Volatility Normalized
MAD series Rolling Mean Absolute Deviation
MAV series Generic Moving Average
MAX series Rolling Maximum
MDI high, low, close Minus Directional Index
MEDPRICE high, low Median Price
MFI high, low, close, volume Money Flow Index
MIN series Rolling Minimum
NATR high, low, close Normalized Average True Range
OBV close, volume On-Balance Volume
PDI high, low, close Plus Directional Index
PPO series Price Percentage Oscillator
QUADREG series Quadratic Regression (parabolic moving average)
QUADREG_CURVE series Quadratic Regression Curve
QUADREG_RMSE series Quadratic Regression Root Mean Square Error
QUADREG_RVALUE series Quadratic Regression R-Value
QUADREG_SLOPE series Quadratic Regression Slope
RMA series Rolling Moving Average (RSI style)
ROC series Rate of Change
ROCP series Rate of Change Percentage
RSI series Relative Strength Index
SAR high, low Parabolic Stop and Reverse
SIGN series Sign
SMA series Simple Moving Average
STDEV series Standard Deviation
STEP series Step Function
STOCH high, low, close Stochastic Oscillator
STREAK series Consecutive streak of values above zero
SUM series Rolling sum
TEMA series Triple Exponential Moving Average
TRANGE high, low, close True Range
TYPPRICE high, low, close Typical Price
UPDOWN series Flag for value crossing up & down levels
WCLPRICE high, low, close Weighted Close Price
WMA series Weighted Moving Average
ZLEMA series Zero-Lag Exponential Moving Average

Example Notebooks

Example notebooks are available in the examples folder.

Installation

pip install mintalib

Mintalib requires Python 3.11 or newer. The base install includes only NumPy; add pandas and/or polars for their corresponding objects and interfaces.

Prebuilt cp311-abi3 wheels are available for regular CPython 3.11 and newer on Linux (x86_64 and ARM64), macOS (Intel and Apple silicon), and Windows (x64). Supported installations therefore do not need a local C compiler.

Dependencies

  • python >= 3.11
  • numpy
  • pandas [optional]
  • polars [optional]

Related Projects

  • ta-lib Python wrapper for TA-Lib
  • pandas-ta Technical Analysis Indicators for pandas
  • ta Technical Analysis Library for pandas
  • finta Financial Technical Analysis for pandas
  • qtalib Quantitative Technical Analysis Library
  • polars-ta Technical Analysis Indicators for polars
  • polars-talib Polars extension for TA-Lib

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mintalib-0.1.12.tar.gz (861.1 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

mintalib-0.1.12-cp311-abi3-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.11+Windows x86-64

mintalib-0.1.12-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

mintalib-0.1.12-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (2.4 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

mintalib-0.1.12-cp311-abi3-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.11+macOS 11.0+ ARM64

mintalib-0.1.12-cp311-abi3-macosx_10_9_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.11+macOS 10.9+ x86-64

File details

Details for the file mintalib-0.1.12.tar.gz.

File metadata

  • Download URL: mintalib-0.1.12.tar.gz
  • Upload date:
  • Size: 861.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for mintalib-0.1.12.tar.gz
Algorithm Hash digest
SHA256 883b1e174b809d724540ca329e0eeecf166f4eac34d922d280ba3c4f66e51207
MD5 8125d0e9d0dbfce69bdee9b93af53e4b
BLAKE2b-256 81066c53f0d37557ea01b0b37131b85a1a01f71601788df66137fb7a36a11f52

See more details on using hashes here.

File details

Details for the file mintalib-0.1.12-cp311-abi3-win_amd64.whl.

File metadata

  • Download URL: mintalib-0.1.12-cp311-abi3-win_amd64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.11+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for mintalib-0.1.12-cp311-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 1be0a83a082380920fc607cfc754af7ef1f5c3e5c5065a5ecb4a7d1153c14825
MD5 989e6eedda3169bbf8927f08db071c4c
BLAKE2b-256 c44330bccda64d5ee9bdb6b17268e9678c8f4e73e86400e179e3772c48687f99

See more details on using hashes here.

File details

Details for the file mintalib-0.1.12-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: mintalib-0.1.12-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 2.4 MB
  • Tags: CPython 3.11+, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for mintalib-0.1.12-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1999e258f03f506baeb039d1aee45c527c7a18695ad85694930a9af33ef456a4
MD5 3e296f506d600b0adf779e9da4398a93
BLAKE2b-256 d9a82e266fc2810773f7b53cf8806e22be69810a3682bd36b66f19918e830e6d

See more details on using hashes here.

File details

Details for the file mintalib-0.1.12-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

  • Download URL: mintalib-0.1.12-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
  • Upload date:
  • Size: 2.4 MB
  • Tags: CPython 3.11+, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for mintalib-0.1.12-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1788856915a12c1769d4a6ace8b65dc837f5b4e600edecc83dd0dac442e97f16
MD5 5d9d3f53a143cf3f92befe74fd75746d
BLAKE2b-256 6510e52cad30569411ea6868e2db299f8458fdd08dce6bf8b3f92dbd2f929c9a

See more details on using hashes here.

File details

Details for the file mintalib-0.1.12-cp311-abi3-macosx_11_0_arm64.whl.

File metadata

  • Download URL: mintalib-0.1.12-cp311-abi3-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.11+, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for mintalib-0.1.12-cp311-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 419635291193cc7b0178f950256838ea6495a87103b50e7635223936d2e206c8
MD5 94b6f6122763ec1a62c1b9a4f33d4b89
BLAKE2b-256 95ab9fea5e3edb9f017aba4ed60a2df9882e57546a77005118c3b480eb0a60f1

See more details on using hashes here.

File details

Details for the file mintalib-0.1.12-cp311-abi3-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: mintalib-0.1.12-cp311-abi3-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.11+, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for mintalib-0.1.12-cp311-abi3-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 93ca7b52d073d52b96c4be4791143a91cd475775baa0bbe2f96869abda8c55fd
MD5 3ad18aad524e56f46a2065d5d6e7cbbe
BLAKE2b-256 85d489b1318807c729f14ec17a7eb101afb1224ce1f86bc66ea2ac49fb9166cf

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.12 This release

6 files

0.1.11

6 files

0.1.10

6 files

0.1.9

6 files

0.1.8

6 files

0.1.7

6 files

0.1.6

1 file

0.1.5

1 file

0.1.4

1 file

0.1.3

1 file

0.1.2

1 file

0.1.1

1 file

0.1.0

1 file

0.0.36

1 file

0.0.35

1 file

0.0.34

1 file

0.0.33

1 file

0.0.32

1 file

0.0.31

1 file

0.0.30

1 file

0.0.29

1 file

0.0.28

1 file

0.0.27

1 file

0.0.26

1 file

0.0.25

1 file

0.0.24

1 file

0.0.23

1 file

0.0.22

1 file

0.0.21

1 file

0.0.20

1 file

0.0.19

1 file

0.0.18

1 file

0.0.17

1 file

0.0.16

1 file

0.0.15

1 file

0.0.14

1 file

0.0.13

1 file

0.0.12

1 file

0.0.11

1 file

0.0.10

1 file

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