mintalib


Namemintalib JSON
Version 0.0.20 PyPI version JSON
download
home_pageNone
SummaryMinimal Technical Analysis Library for Python
upload_time2025-01-12 22:46:28
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseNone
keywords python cython finance technical-analysis indicators
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Minimal Technical Analysis Library for Python

This package offers a list of technical analysis indicators and timeseries calculations
all implemented in cython for improved performance. The library is built around `numpy` arrays,
and aims to be compatible with `pandas` and `polars` where applicable.


> **Warning**
> This project is experimental and the interface can change.
> For a similar project with a mature api you may want to look into
> [ta-lib](https://pypi.org/project/TA-Lib/).


## Structure
The `mintalib` package contains three main modules:

- [mintalib.core](https://github.com/furechan/mintalib/blob/main/docs/mintalib.core.md)
    core calculation rountines implemented in cython, with names like `calc_sma`, `calc_ema`, etc ...  
- [mintalib.functions](https://github.com/furechan/mintalib/blob/main/docs/mintalib.functions.md)
    wrapper functions to compute calculations on series and dataframes, with names like `sma`, `ema`, etc ...
- [mintalib.indicators](https://github.com/furechan/mintalib/blob/main/docs/mintalib.indicators.md)
    composable interface to indicators with names like `SMA`, `EMA`, etc ...


## List of Indicators

| Name       | Description                              |
|:-----------|:-----------------------------------------|
| ABS        | Absolute Value                           |
| ADX        | Average Directional Index                |
| ALMA       | Arnaud Legoux Moving Average             |
| ATR        | Average True Range                       |
| AVGPRICE   | Average Price                            |
| BBANDS     | Bollinger Bands                          |
| BOP        | Balance of Power                         |
| CCI        | Commodity Channel Index                  |
| CLAG       | Confirmation Lag                         |
| CMF        | Chaikin Money Flow                       |
| CROSSOVER  | Cross Over                               |
| CROSSUNDER | Cross Under                              |
| CURVE      | Curve (quadratic regression)             |
| DEMA       | Double Exponential Moving Average        |
| DIFF       | Difference                               |
| DMI        | Directional Movement Indicator           |
| EMA        | Exponential Moving Average               |
| EVAL       | Expression Eval (pandas only)            |
| EXP        | Exponential                              |
| FLAG       | Flag Value                               |
| HMA        | Hull Moving Average                      |
| KAMA       | Kaufman Adaptive Moving Average          |
| KELTNER    | Keltner Channel                          |
| KER        | Kaufman Efficiency Ratio                 |
| LAG        | Lag Function                             |
| LOG        | Logarithm                                |
| LROC       | Logarithmic Rate of Change               |
| MACD       | Moving Average Convergenge Divergence    |
| MAD        | Mean Absolute Deviation                  |
| MAV        | Generic Moving Average                   |
| MAX        | Rolling Maximum                          |
| MDI        | Minus Directional Index                  |
| MFI        | Money Flow Index                         |
| MIDPRICE   | Mid Price                                |
| MIN        | Rolling Minimum                          |
| NATR       | Average True Range (normalized)          |
| PDI        | Plus Directional Index                   |
| PPO        | Price Percentage Oscillator              |
| PRICE      | Generic Price                            |
| RMA        | Rolling Moving Average (RSI style)       |
| ROC        | Rate of Change                           |
| RSI        | Relative Strength Index                  |
| RVALUE     | R-Value (linear regression)              |
| SAR        | Parabolic Stop and Reverse               |
| SIGN       | Sign                                     |
| SLOPE      | Slope (linear regression)                |
| SMA        | Simple Moving Average                    |
| STDEV      | Standard Deviation                       |
| STEP       | Step Function                            |
| STOCH      | Stochastic Oscillator                    |
| STREAK     | Consecutive streak of ups or downs       |
| SUM        | Rolling Sum                              |
| TEMA       | Triple Exponential Moving Average        |
| TRANGE     | True Range                               |
| TSF        | Time Series Forecast (linear regression) |
| TYPPRICE   | Typical Price                            |
| UPDOWN     | Flag for value crossing up & down levels |
| WCLPRICE   | Weighted Close Price                     |
| WMA        | Weighted Moving Average                  |


## Mintalib Core

The calculation routines in `mintalib.core`, implemented in cython, operate on numpy arrays and return numpy arrays by default.
Functions in `mintalib.functions` and indicators in `mintalib.indicatoers` are just wrappers around the core calculation routines.


## Using Functions

The function names are all lower case and may conflict with standard functions,
so the best way to use this module is to alias it to a short name
like `ta` and access all functions as attributes.

```python
import mintalib.functions as ta
```


The first parameter of a function is either `prices` or `series` depending on whether
the functions expects a dataframe of prices or a single series.

Functions that expect series data can be applied to a prices dataframe, in which case they use 
the column specified with the `item` parameter or by default the 'close' column.

A `prices` dataframe can be a pandas dataframe, a polars dataframe or a dictionary of numpy arrays.
The column names for prices are expected to include `open`, `high`, `low`, `close`, `volume` all in **lower case**.

A `series` can be a pandas series, a polars series or any iterable compatible with numpy arrays.

Functions automatically wrap the result to match the type and the index ofthe input data when applicable.


```python
import yfinance as yf
import mintalib.functions as ta

# fetch prices (eg with yfinance)
prices = yf.Ticker('AAPL').history('5y')

# convert column and index names to lower case
prices = prices.rename(columns=str.lower).rename_axis(index=str.lower)

# compute indicators
sma50 = ta.sma(prices, 50)  # SMA of 'close' with period 50
sma200 = ta.sma(prices, 200)  # SMA of 'close' with period 200
high200 = ta.max(prices, 200, item='high')  # MAX of 'high' with period 200
```


## Using Indicators

Indicators are available via the `indicators` module, with similar names as functions but in **upper case**.

Indicators offer a composable interface where a function is bound with its calculation parameters. When instantiated with parameters an indicator yields a callable that can be applied to prices or series data. Indicators support the `@` operator as syntactic sugar to apply the indicator to data. So for example `SMA(50) @ prices` can be used to compute the 50 period simple moving average on `prices`, insted of `SMA(50)(prices)`.

```python
from mintalib.indicators import ROC. SMA, EMA

sma50 = SMA(50) @ prices
sma200 = SMA(200) @ prices
```

The `@` operator can also be used to compose indicators, where for example `ROC(1) @ EMA(20)` means `ROC(1)` applied to `EMA(20)`.

```python
trend = ROC(1) @ EMA(20) @ prices
```


## Using Indicators with Pandas

Prices indicators like `ATR` can only be applied to prices dataframes.

```python
# Average True Range
atr = ATR(14) @ prices
```

Series indicators can be applied to a prices dataframe or a series. When applied to prices you must specify a column with the `item` or otherwize the indicator will use the `'close'` column by default.

```python
# SMA on the close column
sma50 = SMA(50) @ prices

# SMA on the volume column
vol50 = SMA(50, item='volume') @ prices

# Which is the same as
vol50 = SMA(50) @ prices.volume 
``` 

With pandas dataframes you can compose and assign multiple indicators in one call using the builtin `assign` method.


```python
import yfinance as yf

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

# fetch prices (eg with yfinance)
prices = yf.Ticker('AAPL').history('5y')

# convert column and index names to lower case
prices = prices.rename(columns=str.lower).rename_axis(index=str.lower)

# compute and append indicators to prices
# note that calculations can use results from prior indicators
result = prices.assign(
    sma50 = SMA(50),
    sma200 = SMA(200),
    rsi = RSI(14),
    trend = ROC(1) @ EMA(20),
    flag = EVAL("sma50 > sma200")
)
```


## Using Indicators with Polars

Indicators can be applied to polars prices dataframes and series in the same way as with pandas. 

The `@` operator has been extended to work with polars expressions. Series indicators should be applied to a `polars.col` object, while 
prices indicators should be applied to the `polars.all()` expression. In the expression context, multi column outputs are returned as struct series.

In the following example, you can assign multiple columns using polars `with_columns`.

```python
import polars as pl
import yfinance as yf

from mintalib.indicators import SMA, ATR

# fetch prices (eg with yfinance)
prices = yf.Ticker('AAPL').history('5y')

# convert column and index names to lower case
prices = prices.rename(columns=str.lower).rename_axis(index=str.lower)

# convert to polars dataframe 
prices = pl.from_pandas(prices, include_index=True)

# compute and append indicators to prices
result = prices.with_columns(
    sma20 = SMA(20) @ pl.col('close'),
    sma50 = SMA(50) @ pl.col('close'),
    atr14 = ATR(14) @ pl.all()
)
```


## Example Notebooks

You can find example notebooks in the `examples` folder. 


## Installation

You can install the current version of this package with pip

```console
python -mpip install git+https://github.com/furechan/mintalib.git
```

## Dependencies

- python >= 3.9
- pandas
- numpy


## Related Projects
- [ta-lib](https://github.com/mrjbq7/ta-lib) Python wrapper for TA-Lib
- [qtalib](https://github.com/josephchenhk/qtalib) Quantitative Technical Analysis Library
- [numpy](https://github.com/numpy/numpy) The fundamental package for scientific computing with Python
- [pandas](https://github.com/pandas-dev/pandas) Flexible and powerful data analysis / manipulation library for Python
- [polars](https://github.com/pola-rs/polars) Fast multi-threaded, hybrid-out-of-core query engine focussing on DataFrame front-ends
- [yfinance](https://github.com/ranaroussi/yfinance) Download market data from Yahoo! Finance's API



            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "mintalib",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "python, cython, finance, technical-analysis, indicators",
    "author": null,
    "author_email": "Furechan <furechan@xsmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/ea/92/7d6f1f9836e88eed1f0bc7e7c6f235beff2ba2b61a8e6f41b68b0e87b5d5/mintalib-0.0.20.tar.gz",
    "platform": null,
    "description": "# Minimal Technical Analysis Library for Python\n\nThis package offers a list of technical analysis indicators and timeseries calculations\nall implemented in cython for improved performance. The library is built around `numpy` arrays,\nand aims to be compatible with `pandas` and `polars` where applicable.\n\n\n> **Warning**\n> This project is experimental and the interface can change.\n> For a similar project with a mature api you may want to look into\n> [ta-lib](https://pypi.org/project/TA-Lib/).\n\n\n## Structure\nThe `mintalib` package contains three main modules:\n\n- [mintalib.core](https://github.com/furechan/mintalib/blob/main/docs/mintalib.core.md)\n    core calculation rountines implemented in cython, with names like `calc_sma`, `calc_ema`, etc ...  \n- [mintalib.functions](https://github.com/furechan/mintalib/blob/main/docs/mintalib.functions.md)\n    wrapper functions to compute calculations on series and dataframes, with names like `sma`, `ema`, etc ...\n- [mintalib.indicators](https://github.com/furechan/mintalib/blob/main/docs/mintalib.indicators.md)\n    composable interface to indicators with names like `SMA`, `EMA`, etc ...\n\n\n## List of Indicators\n\n| Name       | Description                              |\n|:-----------|:-----------------------------------------|\n| ABS        | Absolute Value                           |\n| ADX        | Average Directional Index                |\n| ALMA       | Arnaud Legoux Moving Average             |\n| ATR        | Average True Range                       |\n| AVGPRICE   | Average Price                            |\n| BBANDS     | Bollinger Bands                          |\n| BOP        | Balance of Power                         |\n| CCI        | Commodity Channel Index                  |\n| CLAG       | Confirmation Lag                         |\n| CMF        | Chaikin Money Flow                       |\n| CROSSOVER  | Cross Over                               |\n| CROSSUNDER | Cross Under                              |\n| CURVE      | Curve (quadratic regression)             |\n| DEMA       | Double Exponential Moving Average        |\n| DIFF       | Difference                               |\n| DMI        | Directional Movement Indicator           |\n| EMA        | Exponential Moving Average               |\n| EVAL       | Expression Eval (pandas only)            |\n| EXP        | Exponential                              |\n| FLAG       | Flag Value                               |\n| HMA        | Hull Moving Average                      |\n| KAMA       | Kaufman Adaptive Moving Average          |\n| KELTNER    | Keltner Channel                          |\n| KER        | Kaufman Efficiency Ratio                 |\n| LAG        | Lag Function                             |\n| LOG        | Logarithm                                |\n| LROC       | Logarithmic Rate of Change               |\n| MACD       | Moving Average Convergenge Divergence    |\n| MAD        | Mean Absolute Deviation                  |\n| MAV        | Generic Moving Average                   |\n| MAX        | Rolling Maximum                          |\n| MDI        | Minus Directional Index                  |\n| MFI        | Money Flow Index                         |\n| MIDPRICE   | Mid Price                                |\n| MIN        | Rolling Minimum                          |\n| NATR       | Average True Range (normalized)          |\n| PDI        | Plus Directional Index                   |\n| PPO        | Price Percentage Oscillator              |\n| PRICE      | Generic Price                            |\n| RMA        | Rolling Moving Average (RSI style)       |\n| ROC        | Rate of Change                           |\n| RSI        | Relative Strength Index                  |\n| RVALUE     | R-Value (linear regression)              |\n| SAR        | Parabolic Stop and Reverse               |\n| SIGN       | Sign                                     |\n| SLOPE      | Slope (linear regression)                |\n| SMA        | Simple Moving Average                    |\n| STDEV      | Standard Deviation                       |\n| STEP       | Step Function                            |\n| STOCH      | Stochastic Oscillator                    |\n| STREAK     | Consecutive streak of ups or downs       |\n| SUM        | Rolling Sum                              |\n| TEMA       | Triple Exponential Moving Average        |\n| TRANGE     | True Range                               |\n| TSF        | Time Series Forecast (linear regression) |\n| TYPPRICE   | Typical Price                            |\n| UPDOWN     | Flag for value crossing up & down levels |\n| WCLPRICE   | Weighted Close Price                     |\n| WMA        | Weighted Moving Average                  |\n\n\n## Mintalib Core\n\nThe calculation routines in `mintalib.core`, implemented in cython, operate on numpy arrays and return numpy arrays by default.\nFunctions in `mintalib.functions` and indicators in `mintalib.indicatoers` are just wrappers around the core calculation routines.\n\n\n## Using Functions\n\nThe function names are all lower case and may conflict with standard functions,\nso the best way to use this module is to alias it to a short name\nlike `ta` and access all functions as attributes.\n\n```python\nimport mintalib.functions as ta\n```\n\n\nThe first parameter of a function is either `prices` or `series` depending on whether\nthe functions expects a dataframe of prices or a single series.\n\nFunctions that expect series data can be applied to a prices dataframe, in which case they use \nthe column specified with the `item` parameter or by default the 'close' column.\n\nA `prices` dataframe can be a pandas dataframe, a polars dataframe or a dictionary of numpy arrays.\nThe column names for prices are expected to include `open`, `high`, `low`, `close`, `volume` all in **lower case**.\n\nA `series` can be a pandas series, a polars series or any iterable compatible with numpy arrays.\n\nFunctions automatically wrap the result to match the type and the index ofthe input data when applicable.\n\n\n```python\nimport yfinance as yf\nimport mintalib.functions as ta\n\n# fetch prices (eg with yfinance)\nprices = yf.Ticker('AAPL').history('5y')\n\n# convert column and index names to lower case\nprices = prices.rename(columns=str.lower).rename_axis(index=str.lower)\n\n# compute indicators\nsma50 = ta.sma(prices, 50)  # SMA of 'close' with period 50\nsma200 = ta.sma(prices, 200)  # SMA of 'close' with period 200\nhigh200 = ta.max(prices, 200, item='high')  # MAX of 'high' with period 200\n```\n\n\n## Using Indicators\n\nIndicators are available via the `indicators` module, with similar names as functions but in **upper case**.\n\nIndicators offer a composable interface where a function is bound with its calculation parameters. When instantiated with parameters an indicator yields a callable that can be applied to prices or series data. Indicators support the `@` operator as syntactic sugar to apply the indicator to data. So for example `SMA(50) @ prices` can be used to compute the 50 period simple moving average on `prices`, insted of `SMA(50)(prices)`.\n\n```python\nfrom mintalib.indicators import ROC. SMA, EMA\n\nsma50 = SMA(50) @ prices\nsma200 = SMA(200) @ prices\n```\n\nThe `@` operator can also be used to compose indicators, where for example `ROC(1) @ EMA(20)` means `ROC(1)` applied to `EMA(20)`.\n\n```python\ntrend = ROC(1) @ EMA(20) @ prices\n```\n\n\n## Using Indicators with Pandas\n\nPrices indicators like `ATR` can only be applied to prices dataframes.\n\n```python\n# Average True Range\natr = ATR(14) @ prices\n```\n\nSeries indicators can be applied to a prices dataframe or a series. When applied to prices you must specify a column with the `item` or otherwize the indicator will use the `'close'` column by default.\n\n```python\n# SMA on the close column\nsma50 = SMA(50) @ prices\n\n# SMA on the volume column\nvol50 = SMA(50, item='volume') @ prices\n\n# Which is the same as\nvol50 = SMA(50) @ prices.volume \n``` \n\nWith pandas dataframes you can compose and assign multiple indicators in one call using the builtin `assign` method.\n\n\n```python\nimport yfinance as yf\n\nfrom mintalib.indicators import EMA, SMA, ROC, RSI, EVAL\n\n# fetch prices (eg with yfinance)\nprices = yf.Ticker('AAPL').history('5y')\n\n# convert column and index names to lower case\nprices = prices.rename(columns=str.lower).rename_axis(index=str.lower)\n\n# compute and append indicators to prices\n# note that calculations can use results from prior indicators\nresult = prices.assign(\n    sma50 = SMA(50),\n    sma200 = SMA(200),\n    rsi = RSI(14),\n    trend = ROC(1) @ EMA(20),\n    flag = EVAL(\"sma50 > sma200\")\n)\n```\n\n\n## Using Indicators with Polars\n\nIndicators can be applied to polars prices dataframes and series in the same way as with pandas. \n\nThe `@` operator has been extended to work with polars expressions. Series indicators should be applied to a `polars.col` object, while \nprices indicators should be applied to the `polars.all()` expression. In the expression context, multi column outputs are returned as struct series.\n\nIn the following example, you can assign multiple columns using polars `with_columns`.\n\n```python\nimport polars as pl\nimport yfinance as yf\n\nfrom mintalib.indicators import SMA, ATR\n\n# fetch prices (eg with yfinance)\nprices = yf.Ticker('AAPL').history('5y')\n\n# convert column and index names to lower case\nprices = prices.rename(columns=str.lower).rename_axis(index=str.lower)\n\n# convert to polars dataframe \nprices = pl.from_pandas(prices, include_index=True)\n\n# compute and append indicators to prices\nresult = prices.with_columns(\n    sma20 = SMA(20) @ pl.col('close'),\n    sma50 = SMA(50) @ pl.col('close'),\n    atr14 = ATR(14) @ pl.all()\n)\n```\n\n\n## Example Notebooks\n\nYou can find example notebooks in the `examples` folder. \n\n\n## Installation\n\nYou can install the current version of this package with pip\n\n```console\npython -mpip install git+https://github.com/furechan/mintalib.git\n```\n\n## Dependencies\n\n- python >= 3.9\n- pandas\n- numpy\n\n\n## Related Projects\n- [ta-lib](https://github.com/mrjbq7/ta-lib) Python wrapper for TA-Lib\n- [qtalib](https://github.com/josephchenhk/qtalib) Quantitative Technical Analysis Library\n- [numpy](https://github.com/numpy/numpy) The fundamental package for scientific computing with Python\n- [pandas](https://github.com/pandas-dev/pandas) Flexible and powerful data analysis / manipulation library for Python\n- [polars](https://github.com/pola-rs/polars) Fast multi-threaded, hybrid-out-of-core query engine focussing on DataFrame front-ends\n- [yfinance](https://github.com/ranaroussi/yfinance) Download market data from Yahoo! Finance's API\n\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Minimal Technical Analysis Library for Python",
    "version": "0.0.20",
    "project_urls": {
        "homepage": "https://github.com/furechan/mintalib"
    },
    "split_keywords": [
        "python",
        " cython",
        " finance",
        " technical-analysis",
        " indicators"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ea927d6f1f9836e88eed1f0bc7e7c6f235beff2ba2b61a8e6f41b68b0e87b5d5",
                "md5": "bb0f07e309def43e437c1f22cc6ca37d",
                "sha256": "e07bc3fe74ef43b5ead53918e7accbe8823773290950015b6024172668dd8a22"
            },
            "downloads": -1,
            "filename": "mintalib-0.0.20.tar.gz",
            "has_sig": false,
            "md5_digest": "bb0f07e309def43e437c1f22cc6ca37d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 822151,
            "upload_time": "2025-01-12T22:46:28",
            "upload_time_iso_8601": "2025-01-12T22:46:28.963252Z",
            "url": "https://files.pythonhosted.org/packages/ea/92/7d6f1f9836e88eed1f0bc7e7c6f235beff2ba2b61a8e6f41b68b0e87b5d5/mintalib-0.0.20.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-01-12 22:46:28",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "furechan",
    "github_project": "mintalib",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "mintalib"
}
        
Elapsed time: 0.41795s