Full Code of TA-Lib/ta-lib-python for AI

master 2384b722d617 cached
62 files
5.6 MB
1.5M tokens
1910 symbols
1 requests
Download .txt
Showing preview only (5,887K chars total). Download the full file or copy to clipboard to get everything.
Repository: TA-Lib/ta-lib-python
Branch: master
Commit: 2384b722d617
Files: 62
Total size: 5.6 MB

Directory structure:
gitextract_70ipxapd/

├── AUTHORS
├── CHANGELOG
├── CITATION.cff
├── COPYRIGHT
├── DEVELOPMENT
├── Dockerfile
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.md
├── docs/
│   ├── abstract.md
│   ├── doc_index.md
│   ├── func.md
│   ├── func_groups/
│   │   ├── cycle_indicators.md
│   │   ├── math_operators.md
│   │   ├── math_transform.md
│   │   ├── momentum_indicators.md
│   │   ├── overlap_studies.md
│   │   ├── pattern_recognition.md
│   │   ├── price_transform.md
│   │   ├── statistic_functions.md
│   │   ├── volatility_indicators.md
│   │   └── volume_indicators.md
│   ├── funcs.md
│   ├── generate_html_pages.py
│   ├── index.md
│   └── install.md
├── pyproject.toml
├── requirements.txt
├── requirements_dev.txt
├── requirements_test.txt
├── setup.py
├── talib/
│   ├── __init__.py
│   ├── _abstract.pxi
│   ├── _common.pxi
│   ├── _func.pxi
│   ├── _stream.pxi
│   ├── _ta_lib.c
│   ├── _ta_lib.pxd
│   ├── _ta_lib.pyi
│   ├── _ta_lib.pyx
│   ├── abstract.py
│   ├── abstract.pyi
│   ├── common.pxd
│   ├── deprecated.py
│   ├── py.typed
│   └── stream.py
├── tests/
│   ├── conftest.py
│   ├── test_abstract.py
│   ├── test_func.py
│   ├── test_pandas.py
│   ├── test_polars.py
│   └── test_stream.py
└── tools/
    ├── build_talib_linux.sh
    ├── build_talib_macos.sh
    ├── build_talib_windows.cmd
    ├── example.py
    ├── generate_abstract_stub.py
    ├── generate_func.py
    ├── generate_stream.py
    ├── perf_talib.py
    └── threads_talib.py

================================================
FILE CONTENTS
================================================

================================================
FILE: AUTHORS
================================================
Project Founder and Lead Developer: John Benediktsson (https://github.com/mrjbq7)
Abstract Interface Author and Maintainer: Brian Cappello (https://github.com/briancappello)


================================================
FILE: CHANGELOG
================================================
0.6.9
=====

- [NEW]: Upgrade to Cython 3.2.4

- [FIX]: Adding ACCBANDS, AVGDEV, IMI to get_func_groups()

- [FIX]: Adding ACCBANDS, AVGDEV, IMI to docs pages

- [NEW]: Adding an ``abstract.pyi`` for typing

0.6.8
=====

- [FIX]: Remove accidental cython dependency.

- [NEW]: Upgrade to Cython 3.1.5

- [NEW]: Release binaries for Python 3.14

0.6.7
=====

- [NEW]: Upgrade to Cython 3.1.3

- [FIX]: Include .pxd files in the source .tar.gz

- [FIX]: Don't require pip, it's not needed

- [FIX]: Add back some import compat for backtrader

0.6.6
=====

- [FIX]: Silence project.license warnings when building.

- [FIX]: Fix regression in abstract function parameters not coercing integers

0.6.5
=====

- [FIX]: Support PEP-517 style installation

- [NEW]: Upgrade to Cython 3.1.2

- [NEW]: Build binary wheels for Windows, macOS, and Linux.

0.6.4
=====

- [FIX]: Adding typed for ACCBANDS, AVGDEV, IMI, and stream_* functions

- [FIX]: Fix for numpy 2.3.0, which removed the npy_1_7_deprecated_api

0.6.3
=====

- [FIX]: Fix issue building against numpy2

0.6.2
=====

- [NEW]: Adding indicators ACCBANDS, AVGDEV, IMI

0.6.1
=====

- [FIX]: Build properly against TA-Lib 0.6.2 and newer on Windows.

0.6.0
=====

- [FIX]: Make sure this wrapper works with TA-Lib 0.6.1 and newer releases.

0.5.5
=====

- [FIX]: Fix for numpy 2.3.0, which removed the npy_1_7_deprecated_api

0.5.4
=====

- [FIX]: Fix lib name on windows.

0.5.3
=====

- [BUG]: Make this release only support TA-Lib 0.4.0.

0.5.2
=====

- [NEW]: Provide py typed information for C wrapper

- [FIX]: Make sure this wrapper works with TA-Lib 0.6.1

0.5.1
=====

- [FIX]: include cython *.pxi files in the source tar.gz

0.5.0
=====

- [NEW]: Upgrade to Numpy 2.0

0.4.38
======

- [FIX]: Fix lib name on windows.

0.4.37
======

- [FIX]: Make sure to pin numpy<2 in the setup.py.

0.4.36
======

- [BUG]: Make this release only support TA-Lib 0.4.0

0.4.35
======

- [FIX]: Make sure this wrapper works with TA-Lib 0.6.1

0.4.34
=====

- [FIX]: include cython *.pxi files in the source tar.gz

0.4.33
======

- [NEW]: Upgrade to Cython 3.0.11

- [FIX]: Fix import of ``pandas`` and ``polars`` to throw underlying import errors

0.4.32
======

- [FIX]: Make sure numpy<2 is in the requirements.txt

0.4.31
======

- [FIX]: Fix build issue with numpy2 released by requiring numpy<2.0.0 for now

0.4.30
======

- [FIX]: Fix the C library imports to work again on Windows, oops.

0.4.29
======

- [NEW]: Upgrade to Cython 3.0.10

- [FIX]: Make TA_INCLUDE_PATH and TA_LIBRARY_PATH override default search list

- [FIX]: Silent some compiler warnings about const pointers

0.4.28
======

- [NEW]: Upgrade to Cython 3.0.0

- [FIX]: Use embedsignature to enable code completions?

0.4.27
======

- [NEW]: Upgrade to Cython 0.29.36

- [FIX]: Fix abstract info to keep values doubles when they are (e.g., nbdevup, nvdevdn)

- [FIX]: Don't throw exceptions when inputs are all NaN

0.4.26
======

- [NEW]: Upgrade to Cython 0.29.34

- [NEW]: Moved to https://github.com/ta-lib/ta-lib-python

- [FIX]: Fix deprecation warning for polars.DataFrame(columns=[...])

0.4.25
======

- [NEW]: Upgrade to Cython 0.29.32

- [FIX]: Allow Abstract API to be safely used with multithreading

0.4.24
======

- [FIX]: runtime_lib_dirs preventing install on Windows

0.4.23
======

- [NEW]: Upgrade to Cython 0.29.25

- [NEW]: Allow TA_INCLUDE_PATH and TA_LIBRARY_PATH to work on Windows.

- [FIX]: Remove pyproject.toml which was preventing some installs.

0.4.22
======

- [NEW]: Upgrade to Cython 0.29.24

- [NEW]: Support polars.Series in Function API

- [NEW]: Support polars.Series in Streaming API

- [NEW]: Support polars.DataFrame in Abstract API

- [NEW]: Switch tests to pytest from nose (no longer supported).

0.4.21
======

- [FIX]: Fixed {MIN/MAX/MINMAX}INDEX functions to return correct indices.

0.4.20
======

- [NEW]: Upgrade to Cython 0.29.23

- [FIX]: Fix Homebrew directory on Apple M1 devices

0.4.19
======

- [NEW]: Upgrade to Cython 0.29.20

- [NEW]: from talib import * (imports all func and stream)

- [FIX]: missing method signatures in PyCharm

0.4.18
======

- [NEW]: Upgrade to Cython 0.29.17

- [NEW]: Support TA_SetCompatibility

- [NEW]: Reduce size of generated C file and memory requirements to compile it.

- [FIX]: Fixed caching input price series in Abstract API

- [NEW]: Support pandas.Series in Streaming API

0.4.17
======

- [NEW]: Support pandas.Series in Function API

0.4.16
======

- [FIX]: Fix incorrect C header include on Windows.

0.4.15
======

- [FIX]: Import TA_FUNC_FLAGS, TA_INPUT_FLAGS, TA_OUTPUT_FLAGS into
         talib.abstract to support backwards compatibility for backtrader

0.4.14
======

- [NEW]: Upgrade to Cython 0.27.3

- [NEW]: Add support for set/restore candle settings

- [DOC]: Note Function API only supports numpy.ndarray (not pandas.Series)

- [NEW]: Continuous integration using Travis on Python 2.7, 3.4, 3.5, 3.6

- [NEW]: Merge common, func, abstract, stream as pxi to _ta_lib.pyx

- [DOC]: Update documentation to warn about unstable functions

0.4.10
======

- [NEW]: Upgrade to Cython 0.23.4.

- [NEW]: Adding an experimental Streaming API (talib.stream).

- [NEW]: Support for "sunos"

- [FIX]: Fix issue initializing library for use with candlestick functions.

- [NEW]: Support for TA_SetUnstablePeriod and TA_GetUnstablePeriod

0.4.9
=====

- [NEW]: Support for python 2.6 and earlier for ordereddict.

- [FIX]: Add lib64 paths to setup.py.

- [NEW]: Upgrade to Cython 0.22.

- [FIX]: Allow running setup.py without numpy or cython

- [NEW]: Allow TA_LIBRARY_PATH and TA_INCLUDE_PATH environment variables.

0.4.8
=====

- [NEW]: Support pandas.Series and pandas.Dataframe inputs.

- [FIX]: Simple check to warn if ta-lib library is not installed

- [FIX]: Fix missing key error when inputs are not default names.

- [NEW]: Upgrade to Cython 0.20.

- [FIX]: Check all input array lengths are same.

- [FIX]: Check all input arrays for NaN elements.

0.4.7
=====

- [NEW]: Upgrade to Cython 0.19.1.

- [FIX]: Fix "periods" input arrays in abstract interface.

- [FIX]: Only require necessary input arrays in abstract interface.

0.4.6
=====

- [NEW]: Support for function_flags and output_flags properties in Functions

0.4.5
=====

- [NEW]: Better test coverage of abstract interface.

- [NEW]: Support for Python 3.

0.4.4
=====

- [FIX]: Make installation on Windows easier.

0.4.3
=====

- [NEW]: Upgrade to Cython 0.18.

- [FIX]: Improve docstrings for indicators in talib.func.

- [FIX]: Initialize and shutdown underlying TA-Lib only once each process.
  This should give slight speedups when using many indicators (<5%).

- [DEPRECATED]: The old moving average types that were in talib.func are now
  deprecated. See the next bullet item for the replacement, or you can
  continue using them with "from talib import deprecated" for the time being.

- [NEW]: The new moving average types are in talib.MA_Type. It's a class with SMA,
  EMA, DEMA, etc attribute variables you should now use. Human-readable lookups
  are also possible by using MA_Type as a dict e.g.:

    MA_Type[MA_Type.SMA] # returns "Simple Moving Average"

- [NEW]: In addition to the existing func interface, we now provide an
  enhanced abstract interface too. Functions in "import talib" use the
  original interface, or you can use "from talib import abstract" for
  the full abstract interface. See the README, tools/example.py and
  tests/abstract_test.py for more information. The full (commented)
  source code is mostly located in talib/abstract.pyx. The basic usage is very
  similar:

    input_arrays = { 'open': np.random.random(100),
                     'high': np.random.random(100),
                     'low': np.random.random(100),
                     'close': np.random.random(100),
                     'volume': np.random.random(100) }
    ema_20 = abstract.Function('ema', input_arrays, 20).outputs # function names not case-sensitive
    slowd, slowk = abstract.Function('STOCH')(input_arrays, 15, 3, 0, 3, 0)
    upper, middle, lower = abstract.Function('bbands')(input_arrays, timeperiod=20)

0.4.2
=====

- Move the functions into ``talib.func``, to prepare for ``talib.abstract``
  in a future release.

0.4.1
=====

- Support for MacPorts.
- Fix for FreeBSD.

0.4.0
=====

First version.


================================================
FILE: CITATION.cff
================================================
cff-version: 1.2.0
message: "If you use this software, please cite it as below."
title: ta-lib-python
version: 0.6.5
date-released: 2025-08-07
url: "https://github.com/ta-lib/ta-lib-python"
type: software
authors:
  - given-names: John
    family-names: Benediktsson
    email: mrjbq7@gmail.com


================================================
FILE: COPYRIGHT
================================================
Copyright (C) 2012-2013 Silfur Capital, LLC. All Rights Reserved.
The contents of talib/abstract.pyx are Copyright (c) 2013 Brian A Cappello. All Rights Reserved.


================================================
FILE: DEVELOPMENT
================================================
To get started developing on talib, clone the latest code from git and
install:

```
$ git clone git://github.com/ta-lib/ta-lib-python.git
$ cd ta-lib-python
# you can run "git pull" here (no quotes) to update the sources in the future
$ make build
$ [sudo] make install
```

Here's the full list of make commands (see the Makefile file):

make build     # builds and places libs in the project directory; required for testing
make clean     # cleans the local build files
make install   # installs talib system-wide
make generate: # generates a fresh _func.pxi, _stream.pxi file. Requires talib and TA-Lib to both be installed
make perf      # run performance profiling
make test      # run tests

The source code is comprised of one python package, located in the talib
directory, which itself has one Cython module (_ta_lib) which consists of
four parts: _common, _func, _abstract and _stream.

talib/_common.pxi
  An internal-use file for functionality shared between func and abstract.

talib/_func.pxi
  This file is generated automatically by tools/generate_func.py and any changes made
  to it directly will get overwritten!

talib/_abstract.pxi
  This file contains the code for interfacing with the TA-Lib abstract interface
  and wrapping it into a pythonic Function class.

talib/_ta_lib.pyx
  This "Cython header file" defines the C-level functions, variables and types we
  need to use in the above pyx files.

talib/_stream.pxi
  This file contains code for interfacing a "streaming" interface to TA-Lib.

tools/generate_func.py,generate_stream.py
  Scripts that generate and print _func.pxi or _stream.pxi to stdout. Gets information
  about all functions from the C headers of the installed TA-Lib.

If you are interested in developing new indicator functions or whatnot on
the underlying TA-Lib, you must install TA-Lib from git.


================================================
FILE: Dockerfile
================================================
# Dockerfile for TA-Lib. To build:
#
#    docker build --rm -t talib .
#
# To run:
#
#    docker run --rm -it talib bash
#

ARG PYTHON_VERSION="3.7"

FROM python:$PYTHON_VERSION as builder

ENV TA_PREFIX="/opt/ta-lib-core"
ENV TA_LIBRARY_PATH="$TA_PREFIX/lib" \
    TA_INCLUDE_PATH="$TA_PREFIX/include"

WORKDIR /src/ta-lib-core
RUN apt-get update && apt-get install -y \
        gfortran \
        libfreetype6-dev \
        libhdf5-dev \
        liblapack-dev \
        libopenblas-dev \
        libpng-dev \
    && rm -rf /var/lib/apt/lists/* \
    && curl -fsSL http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz \
    | tar xvz --strip-components 1 \
    && ./configure --prefix="$TA_PREFIX" \
    && make \
    && make install

WORKDIR /src/ta-lib-python
COPY . .
RUN python -m pip install -e . \
    && python -c 'import numpy, talib; close = numpy.random.random(100); output = talib.SMA(close); print(output)' \
    && python -m pip wheel --wheel-dir wheels .

ARG RUN_TESTS="1"
RUN if [ "$RUN_TESTS" -ne "0" ]; then \
        python -m pip install -r requirements_test.txt \
        && pytest . ; \
    else \
        echo "Skipping tests\n" ; \
    fi

# Build final image.
FROM python:$PYTHON_VERSION-slim
COPY --from=builder /src/ta-lib-python/wheels /opt/ta-lib-python/wheels
COPY --from=builder /opt/ta-lib-core /opt/ta-lib-core
RUN python -m pip install --no-cache-dir /opt/ta-lib-python/wheels/*.whl \
    && python -c 'import numpy, talib; close = numpy.random.random(100); output = talib.SMA(close); print(output)'


================================================
FILE: LICENSE
================================================
# BSD 2-Clause License

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice,
   this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


================================================
FILE: MANIFEST.in
================================================
include LICENSE
include COPYRIGHT
include README.md
include talib/*.c
include talib/*.pyx
include talib/*.pxd
include talib/*.pxi
include tests/*.py


================================================
FILE: Makefile
================================================
.PHONY: build

build:
	python3 -m pip install --use-pep517 -e .

install:
	python3 -m pip install --use-pep517 .

talib/_func.pxi: tools/generate_func.py
	python3 tools/generate_func.py > talib/_func.pxi

talib/_stream.pxi: tools/generate_stream.py
	python3 tools/generate_stream.py > talib/_stream.pxi

generate: talib/_func.pxi talib/_stream.pxi

cython:
	cython talib/_ta_lib.pyx

annotate:
	cython -a talib/_ta_lib.pyx

clean:
	rm -rf build talib/_ta_lib.so talib/*.pyc

perf:
	python3 tools/perf_talib.py

test: build
	pytest tests/

sdist:
	python3 -m build --sdist


================================================
FILE: README.md
================================================
# TA-Lib 📈

<!-- Badges -->
![Tests](https://github.com/ta-lib/ta-lib-python/actions/workflows/tests.yml/badge.svg)
[![Release](https://img.shields.io/github/v/release/ta-lib/ta-lib-python?label=Release)](https://github.com/ta-lib/ta-lib-python/releases)
[![PyPI](https://img.shields.io/pypi/v/TA-Lib?label=PyPI)](https://pypi.org/project/TA-Lib/)
[![Wheels](https://img.shields.io/pypi/wheel/TA-Lib?label=Wheels)](https://pypi.org/project/TA-Lib/#files)
[![Python Versions](https://img.shields.io/pypi/pyversions/TA-Lib?label=Python)](https://pypi.org/project/TA-Lib/)
[![License](https://img.shields.io/badge/License-BSD%202--Clause-blue.svg)](https://opensource.org/licenses/BSD-2-Clause)

This is a Python wrapper for [TA-LIB](http://ta-lib.org) based on Cython
instead of SWIG. From the homepage:

> TA-Lib is widely used by trading software developers requiring to perform
> technical analysis of financial market data.
>
> * Includes 150+ indicators such as ADX, MACD, RSI, Stochastic, Bollinger
>   Bands, etc.
> * Candlestick pattern recognition
> * Open-source API for C/C++, Java, Perl, Python and 100% Managed .NET

The original Python bindings included with TA-Lib use
[SWIG](http://swig.org) which unfortunately are difficult to install and
aren't as efficient as they could be. Therefore this project uses
[Cython](https://cython.org) and [Numpy](https://numpy.org) to efficiently
and cleanly bind to TA-Lib - producing results 2-4 times faster than the
SWIG interface.

In addition, this project also supports the use of the
[Polars](https://www.pola.rs) and [Pandas](https://pandas.pydata.org)
libraries.

## Versions 🗂️

The upstream TA-Lib C library released version 0.6.1 and changed the library
name to `-lta-lib` from `-lta_lib`. After trying to support both via
autodetect and having some issues, we have decided to currently support three
feature branches:

* `ta-lib-python` 0.4.x (supports `ta-lib` 0.4.x and `numpy` 1)
* `ta-lib-python` 0.5.x (supports `ta-lib` 0.4.x and `numpy` 2)
* `ta-lib-python` 0.6.x (supports `ta-lib` 0.6.x and `numpy` 2)

## Installation 💾

You can install from PyPI:

```shell
python -m pip install TA-Lib
```

Or checkout the sources and run `setup.py` yourself:

```shell
python setup.py install
```

It also appears possible to install via [Conda Forge](https://anaconda.org/conda-forge/ta-lib):

```shell
conda install -c conda-forge ta-lib
```

### Dependencies 🧩

To use TA-Lib for python, you need to have the [TA-Lib](http://ta-lib.org)
already installed. You should probably follow their [installation
directions](https://ta-lib.org/install/) for your platform, but some
suggestions are included below for reference.

> Some Conda Forge users have reported success installing the underlying TA-Lib C
> library using [the libta-lib package](https://anaconda.org/conda-forge/libta-lib):
>
> ``$ conda install -c conda-forge libta-lib``

#### Mac OS X

You can simply install using Homebrew:

```shell
brew install ta-lib
```

If you are using Apple Silicon, such as the M1 processors, and building mixed
architecture Homebrew projects, you might want to make sure it's being built
for your architecture:

```shell
arch -arm64 brew install ta-lib
```

And perhaps you can set these before installing with `pip`:

```shell
export TA_INCLUDE_PATH="$(brew --prefix ta-lib)/include"
export TA_LIBRARY_PATH="$(brew --prefix ta-lib)/lib"
```

You might also find this helpful, particularly if you have tried several
different installations without success:

```shell
your-arm64-python -m pip install --no-cache-dir ta-lib
```

#### Windows

For 64-bit Windows, the easiest way is to get the *executable installer*:

1. Download [ta-lib-0.6.4-windows-x86_64.msi](https://github.com/ta-lib/ta-lib/releases/download/v0.6.4/ta-lib-0.6.4-windows-x86_64.msi).
2. Run the Installer or run `msiexec` [from the command-line](https://learn.microsoft.com/en-us/windows/win32/msi/standard-installer-command-line-options).

Alternatively, if you prefer to get the libraries without installing, or
would like to use the 32-bit version:

* Intel/AMD 64-bit [ta-lib-0.6.4-windows-x86_64.zip](https://github.com/ta-lib/ta-lib/releases/download/v0.6.4/ta-lib-0.6.4-windows-x86_64.zip)
* Intel/AMD 32-bit [ta-lib-0.6.4-windows-x86_32.zip](https://github.com/ta-lib/ta-lib/releases/download/v0.6.4/ta-lib-0.6.4-windows-x86_32.zip)

#### Linux

Download
[ta-lib-0.6.4-src.tar.gz](https://github.com/ta-lib/ta-lib/releases/download/v0.6.4/ta-lib-0.6.4-src.tar.gz)
and:

```shell
tar -xzf ta-lib-0.6.4-src.tar.gz
cd ta-lib-0.6.4/
./configure --prefix=/usr
make
sudo make install
```

> If you build `TA-Lib` using `make -jX` it will fail but that's OK!
> Simply rerun ``make -jX`` followed by ``[sudo] make install``.

Note: if your directory path includes spaces, the installation will probably
fail with ``No such file or directory`` errors.

### Wheels ⚙️

For convenience, and starting with version 0.6.5, we now build binary wheels
for different operating systems, architectures, and Python versions using
GitHub Actions which include the underlying TA-Lib C library and are easy to
install.

Supported platforms:

* Linux
  * x86_64
  * arm64
* macOS
  * x86_64
  * arm64
* Windows
  * x86_64
  * x86
  * arm64

Supported Python versions:

* 3.9
* 3.10
* 3.11
* 3.12
* 3.13
* 3.14

In the event that your operating system, architecture, or Python version are
not available as a binary wheel, it is fairly easy to install from source
using the instructions above.

### Troubleshooting 🛠️

If you get a warning that looks like this:

```shell
setup.py:79: UserWarning: Cannot find ta-lib library, installation may fail.
warnings.warn('Cannot find ta-lib library, installation may fail.')
```

This typically means `setup.py` can't find the underlying `TA-Lib`
library, a dependency which needs to be installed.

---

If you installed the underlying `TA-Lib` library with a custom prefix
(e.g., with `./configure --prefix=$PREFIX`), then when you go to install
this python wrapper you can specify additional search paths to find the
library and include files for the underlying `TA-Lib` library using the
`TA_LIBRARY_PATH` and `TA_INCLUDE_PATH` environment variables:

```shell
export TA_LIBRARY_PATH=$PREFIX/lib
export TA_INCLUDE_PATH=$PREFIX/include
python setup.py install # or pip install ta-lib
```

---

Sometimes installation will produce build errors like this:

```shell
talib/_ta_lib.c:601:10: fatal error: ta-lib/ta_defs.h: No such file or directory
  601 | #include "ta-lib/ta_defs.h"
      |          ^~~~~~~~~~~~~~~~~~
compilation terminated.
```

or:

```shell
common.obj : error LNK2001: unresolved external symbol TA_SetUnstablePeriod
common.obj : error LNK2001: unresolved external symbol TA_Shutdown
common.obj : error LNK2001: unresolved external symbol TA_Initialize
common.obj : error LNK2001: unresolved external symbol TA_GetUnstablePeriod
common.obj : error LNK2001: unresolved external symbol TA_GetVersionString
```

This typically means that it can't find the underlying `TA-Lib` library, a
dependency which needs to be installed.  On Windows, this could be caused by
installing the 32-bit binary distribution of the underlying `TA-Lib` library,
but trying to use it with 64-bit Python.

---

Sometimes installation will fail with errors like this:

```shell
talib/common.c:8:22: fatal error: pyconfig.h: No such file or directory
 #include "pyconfig.h"
                      ^
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
```

This typically means that you need the Python headers, and should run
something like:

```shell
sudo apt-get install python3-dev
```

---

Sometimes building the underlying `TA-Lib` library has errors running
`make` that look like this:

```shell
../libtool: line 1717: cd: .libs/libta_lib.lax/libta_abstract.a: No such file or directory
make[2]: *** [libta_lib.la] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all-recursive] Error 1
```

This might mean that the directory path to the underlying `TA-Lib` library
has spaces in the directory names.  Try putting it in a path that does not have
any spaces and trying again.

---

Sometimes you might get this error running `setup.py`:

```shell
/usr/include/limits.h:26:10: fatal error: bits/libc-header-start.h: No such file or directory
#include <bits/libc-header-start.h>
         ^~~~~~~~~~~~~~~~~~~~~~~~~~
```

This is likely an issue with trying to compile for 32-bit platform but
without the appropriate headers.  You might find some success looking at the
first answer to [this question](https://stackoverflow.com/questions/54082459/fatal-error-bits-libc-header-start-h-no-such-file-or-directory-while-compili).

---

If you get an error on macOS like this:

```shell
code signature in <141BC883-189B-322C-AE90-CBF6B5206F67>
'python3.9/site-packages/talib/_ta_lib.cpython-39-darwin.so' not valid for
use in process: Trying to load an unsigned library)
```

You might look at [this question](https://stackoverflow.com/questions/69610572/how-can-i-solve-the-below-error-while-importing-nltk-package)
and use ``xcrun codesign`` to fix it.

---

If you wonder why `STOCHRSI` gives you different results than you expect,
probably you want `STOCH` applied to `RSI`, which is a little different
than the `STOCHRSI` which is `STOCHF` applied to `RSI`:

```python
>>> import talib
>>> import numpy as np
>>> c = np.random.randn(100)

# this is the library function
>>> k, d = talib.STOCHRSI(c)

# this produces the same result, calling STOCHF
>>> rsi = talib.RSI(c)
>>> k, d = talib.STOCHF(rsi, rsi, rsi)

# you might want this instead, calling STOCH
>>> rsi = talib.RSI(c)
>>> k, d = talib.STOCH(rsi, rsi, rsi)
```

---

If the build appears to hang, you might be running on a VM with not enough memory - try 1 GB or 2 GB.

It has also been reported that using a swapfile could help, for example:

```shell
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
```

---

If you get "permission denied" errors such as this, you might need to give
your user access to the location where the underlying TA-Lib C library is
installed -- or install it to a user-accessible location.

```shell
talib/_ta_lib.c:747:28: fatal error: /usr/include/ta-lib/ta_defs.h: Permission denied
 #include "ta-lib/ta-defs.h"
                            ^
compilation terminated
error: command 'gcc' failed with exit status 1
```

---

If you're having trouble compiling the underlying TA-Lib C library on ARM64,
you might need to configure it with an explicit build type before running
`make` and `make install`, for example:

```shell
./configure --build=aarch64-unknown-linux-gnu
```

This is caused by old `config.guess` file, so another way to solve this is
to copy a newer version of config.guess into the underlying TA-Lib C library
sources:

```shell
cp /usr/share/automake-1.16/config.guess /path/to/extracted/ta-lib/config.guess
```

And then re-run configure:

```shell
./configure
```

---

If you're having trouble using [PyInstaller](https://pyinstaller.org) and
get an error that looks like this:

```shell
...site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in exec_module
    exec(bytecode, module.__dict__)
  File "talib\__init__.py", line 72, in <module>
ModuleNotFoundError: No module named 'talib.stream'
```

Then, perhaps you can use the `--hidden-import` argument to fix this:

```shell
pyinstaller --hidden-import talib.stream "replaceToYourFileName.py"
```

---

If you want to use `numpy<2`, then you should use `ta-lib<0.5`.

If you want to use `numpy>=2`, then you should use `ta-lib>=0.5`.

---

If you have trouble getting the code autocompletions to work in Visual
Studio Code, a suggestion was made to look for the `Python` extension
settings, and an option for `Language Server`, and change it from
`Default` (which means `Pylance if it is installed, Jedi otherwise`), to
manually set `Jedi` and the completions should work. It is possible that
you might need to [install it manually](https://github.com/pappasam/jedi-language-server) for this to
work.

## Function API

Similar to TA-Lib, the Function API provides a lightweight wrapper of the
exposed TA-Lib indicators.

Each function returns an output array and have default values for their
parameters, unless specified as keyword arguments. Typically, these functions
will have an initial "lookback" period (a required number of observations
before an output is generated) set to `NaN`.

For convenience, the Function API supports both `numpy.ndarray` and
`pandas.Series` and `polars.Series` inputs.

All of the following examples use the Function API:

```python
import numpy as np
import talib

close = np.random.random(100)
```

Calculate a simple moving average of the close prices:

```python
output = talib.SMA(close)
```

Calculating bollinger bands, with triple exponential moving average:

```python
from talib import MA_Type

upper, middle, lower = talib.BBANDS(close, matype=MA_Type.T3)
```

Calculating momentum of the close prices, with a time period of 5:

```python
output = talib.MOM(close, timeperiod=5)
```

### NaN's

The underlying TA-Lib C library handles NaN's in a sometimes surprising manner
by typically propagating NaN's to the end of the output, for example:

```python
>>> c = np.array([1.0, 2.0, 3.0, np.nan, 4.0, 5.0, 6.0])

>>> talib.SMA(c, 3)
array([nan, nan,  2., nan, nan, nan, nan])
```

You can compare that to a Pandas rolling mean, where their approach is to
output NaN until enough "lookback" values are observed to generate new outputs:

```python
>>> c = pandas.Series([1.0, 2.0, 3.0, np.nan, 4.0, 5.0, 6.0])

>>> c.rolling(3).mean()
0    NaN
1    NaN
2    2.0
3    NaN
4    NaN
5    NaN
6    5.0
dtype: float64
```

## Abstract API

If you're already familiar with using the function API, you should feel right
at home using the Abstract API.

Every function takes a collection of named inputs, either a ``dict`` of
``numpy.ndarray`` or ``pandas.Series`` or ``polars.Series``, or a
``pandas.DataFrame`` or ``polars.DataFrame``. If a ``pandas.DataFrame`` or
``polars.DataFrame`` is provided, the output is returned as the same type
with named output columns.

For example, inputs could be provided for the typical "OHLCV" data:

```python
import numpy as np

# note that all ndarrays must be the same length!
inputs = {
    'open': np.random.random(100),
    'high': np.random.random(100),
    'low': np.random.random(100),
    'close': np.random.random(100),
    'volume': np.random.random(100)
}
```

Functions can either be imported directly or instantiated by name:

```python
from talib import abstract

# directly
SMA = abstract.SMA

# or by name
SMA = abstract.Function('sma')
```

From there, calling functions is basically the same as the function API:

```python
from talib.abstract import *

# uses close prices (default)
output = SMA(inputs, timeperiod=25)

# uses open prices
output = SMA(inputs, timeperiod=25, price='open')

# uses close prices (default)
upper, middle, lower = BBANDS(inputs, 20, 2.0, 2.0)

# uses high, low, close (default)
slowk, slowd = STOCH(inputs, 5, 3, 0, 3, 0) # uses high, low, close by default

# uses high, low, open instead
slowk, slowd = STOCH(inputs, 5, 3, 0, 3, 0, prices=['high', 'low', 'open'])
```

## Streaming API

An experimental Streaming API was added that allows users to compute the latest
value of an indicator.  This can be faster than using the Function API, for
example in an application that receives streaming data, and wants to know just
the most recent updated indicator value.

```python
import talib
from talib import stream

close = np.random.random(100)

# the Function API
output = talib.SMA(close)

# the Streaming API
latest = stream.SMA(close)

# the latest value is the same as the last output value
assert (output[-1] - latest) < 0.00001
```

## Supported Indicators and Functions 📋

We can show all the TA functions supported by TA-Lib, either as a `list` or
as a `dict` sorted by group (e.g. "Overlap Studies", "Momentum Indicators",
etc):

```python
import talib

# list of functions
for name in talib.get_functions():
    print(name)

# dict of functions by group
for group, names in talib.get_function_groups().items():
    print(group)
    for name in names:
        print(f"  {name}")
```

### Indicator Groups 🏷️

* Overlap Studies
* Momentum Indicators
* Volume Indicators
* Volatility Indicators
* Price Transform
* Cycle Indicators
* Pattern Recognition

#### Overlap Studies

```text
BBANDS               Bollinger Bands
DEMA                 Double Exponential Moving Average
EMA                  Exponential Moving Average
HT_TRENDLINE         Hilbert Transform - Instantaneous Trendline
KAMA                 Kaufman Adaptive Moving Average
MA                   Moving average
MAMA                 MESA Adaptive Moving Average
MAVP                 Moving average with variable period
MIDPOINT             MidPoint over period
MIDPRICE             Midpoint Price over period
SAR                  Parabolic SAR
SAREXT               Parabolic SAR - Extended
SMA                  Simple Moving Average
T3                   Triple Exponential Moving Average (T3)
TEMA                 Triple Exponential Moving Average
TRIMA                Triangular Moving Average
WMA                  Weighted Moving Average
```

#### Momentum Indicators

```text
ADX                  Average Directional Movement Index
ADXR                 Average Directional Movement Index Rating
APO                  Absolute Price Oscillator
AROON                Aroon
AROONOSC             Aroon Oscillator
BOP                  Balance Of Power
CCI                  Commodity Channel Index
CMO                  Chande Momentum Oscillator
DX                   Directional Movement Index
MACD                 Moving Average Convergence/Divergence
MACDEXT              MACD with controllable MA type
MACDFIX              Moving Average Convergence/Divergence Fix 12/26
MFI                  Money Flow Index
MINUS_DI             Minus Directional Indicator
MINUS_DM             Minus Directional Movement
MOM                  Momentum
PLUS_DI              Plus Directional Indicator
PLUS_DM              Plus Directional Movement
PPO                  Percentage Price Oscillator
ROC                  Rate of change : ((price/prevPrice)-1)*100
ROCP                 Rate of change Percentage: (price-prevPrice)/prevPrice
ROCR                 Rate of change ratio: (price/prevPrice)
ROCR100              Rate of change ratio 100 scale: (price/prevPrice)*100
RSI                  Relative Strength Index
STOCH                Stochastic
STOCHF               Stochastic Fast
STOCHRSI             Stochastic Relative Strength Index
TRIX                 1-day Rate-Of-Change (ROC) of a Triple Smooth EMA
ULTOSC               Ultimate Oscillator
WILLR                Williams' %R
```

#### Volume Indicators

```text
AD                   Chaikin A/D Line
ADOSC                Chaikin A/D Oscillator
OBV                  On Balance Volume
```

#### Cycle Indicators

```text
HT_DCPERIOD          Hilbert Transform - Dominant Cycle Period
HT_DCPHASE           Hilbert Transform - Dominant Cycle Phase
HT_PHASOR            Hilbert Transform - Phasor Components
HT_SINE              Hilbert Transform - SineWave
HT_TRENDMODE         Hilbert Transform - Trend vs Cycle Mode
```

#### Price Transform

```text
AVGPRICE             Average Price
MEDPRICE             Median Price
TYPPRICE             Typical Price
WCLPRICE             Weighted Close Price
```

#### Volatility Indicators

```text
ATR                  Average True Range
NATR                 Normalized Average True Range
TRANGE               True Range
```

#### Pattern Recognition

```text
CDL2CROWS            Two Crows
CDL3BLACKCROWS       Three Black Crows
CDL3INSIDE           Three Inside Up/Down
CDL3LINESTRIKE       Three-Line Strike
CDL3OUTSIDE          Three Outside Up/Down
CDL3STARSINSOUTH     Three Stars In The South
CDL3WHITESOLDIERS    Three Advancing White Soldiers
CDLABANDONEDBABY     Abandoned Baby
CDLADVANCEBLOCK      Advance Block
CDLBELTHOLD          Belt-hold
CDLBREAKAWAY         Breakaway
CDLCLOSINGMARUBOZU   Closing Marubozu
CDLCONCEALBABYSWALL  Concealing Baby Swallow
CDLCOUNTERATTACK     Counterattack
CDLDARKCLOUDCOVER    Dark Cloud Cover
CDLDOJI              Doji
CDLDOJISTAR          Doji Star
CDLDRAGONFLYDOJI     Dragonfly Doji
CDLENGULFING         Engulfing Pattern
CDLEVENINGDOJISTAR   Evening Doji Star
CDLEVENINGSTAR       Evening Star
CDLGAPSIDESIDEWHITE  Up/Down-gap side-by-side white lines
CDLGRAVESTONEDOJI    Gravestone Doji
CDLHAMMER            Hammer
CDLHANGINGMAN        Hanging Man
CDLHARAMI            Harami Pattern
CDLHARAMICROSS       Harami Cross Pattern
CDLHIGHWAVE          High-Wave Candle
CDLHIKKAKE           Hikkake Pattern
CDLHIKKAKEMOD        Modified Hikkake Pattern
CDLHOMINGPIGEON      Homing Pigeon
CDLIDENTICAL3CROWS   Identical Three Crows
CDLINNECK            In-Neck Pattern
CDLINVERTEDHAMMER    Inverted Hammer
CDLKICKING           Kicking
CDLKICKINGBYLENGTH   Kicking - bull/bear determined by the longer marubozu
CDLLADDERBOTTOM      Ladder Bottom
CDLLONGLEGGEDDOJI    Long Legged Doji
CDLLONGLINE          Long Line Candle
CDLMARUBOZU          Marubozu
CDLMATCHINGLOW       Matching Low
CDLMATHOLD           Mat Hold
CDLMORNINGDOJISTAR   Morning Doji Star
CDLMORNINGSTAR       Morning Star
CDLONNECK            On-Neck Pattern
CDLPIERCING          Piercing Pattern
CDLRICKSHAWMAN       Rickshaw Man
CDLRISEFALL3METHODS  Rising/Falling Three Methods
CDLSEPARATINGLINES   Separating Lines
CDLSHOOTINGSTAR      Shooting Star
CDLSHORTLINE         Short Line Candle
CDLSPINNINGTOP       Spinning Top
CDLSTALLEDPATTERN    Stalled Pattern
CDLSTICKSANDWICH     Stick Sandwich
CDLTAKURI            Takuri (Dragonfly Doji with very long lower shadow)
CDLTASUKIGAP         Tasuki Gap
CDLTHRUSTING         Thrusting Pattern
CDLTRISTAR           Tristar Pattern
CDLUNIQUE3RIVER      Unique 3 River
CDLUPSIDEGAP2CROWS   Upside Gap Two Crows
CDLXSIDEGAP3METHODS  Upside/Downside Gap Three Methods
```

#### Statistic Functions

```text
BETA                 Beta
CORREL               Pearson's Correlation Coefficient (r)
LINEARREG            Linear Regression
LINEARREG_ANGLE      Linear Regression Angle
LINEARREG_INTERCEPT  Linear Regression Intercept
LINEARREG_SLOPE      Linear Regression Slope
STDDEV               Standard Deviation
TSF                  Time Series Forecast
VAR                  Variance
```


================================================
FILE: docs/abstract.md
================================================
# Abstract API Quick Start

If you're already familiar with using the function API, you should feel right
at home using the abstract API. Every function takes the same input, passed
as a dictionary of Numpy arrays:

```python
import numpy as np
# note that all ndarrays must be the same length!
inputs = {
    'open': np.random.random(100),
    'high': np.random.random(100),
    'low': np.random.random(100),
    'close': np.random.random(100),
    'volume': np.random.random(100)
}
```

Functions can either be imported directly or instantiated by name:

```python
from talib import abstract
sma = abstract.SMA
sma = abstract.Function('sma')
```

From there, calling functions is basically the same as the function API:

```python
from talib.abstract import *
output = SMA(inputs, timeperiod=25) # calculate on close prices by default
output = SMA(inputs, timeperiod=25, price='open') # calculate on opens
upper, middle, lower = BBANDS(inputs, 20, 2, 2)
slowk, slowd = STOCH(inputs, 5, 3, 0, 3, 0) # uses high, low, close by default
slowk, slowd = STOCH(inputs, 5, 3, 0, 3, 0, prices=['high', 'low', 'open'])
```

## Advanced Usage

For more advanced use cases of TA-Lib, the Abstract API also offers much more
flexibility. You can even subclass ``abstract.Function`` and override
``set_input_arrays`` to customize the type of input data Function accepts
(e.g. a pandas DataFrame).

Details about every function can be accessed via the info property:

```python
print Function('stoch').info
{
  'name': 'STOCH',
  'display_name': 'Stochastic',
  'group': 'Momentum Indicators',
  'input_names': OrderedDict([
    ('prices', ['high', 'low', 'close']),
  ]),
  'parameters': OrderedDict([
    ('fastk_period', 5),
    ('slowk_period', 3),
    ('slowk_matype', 0),
    ('slowd_period', 3),
    ('slowd_matype', 0),
  ]),
  'output_names': ['slowk', 'slowd'],
}

```
Or in human-readable format:
```python
help(STOCH)
str(STOCH)
```

Other useful properties of ``Function``:

```python
Function('x').function_flags
Function('x').input_names
Function('x').input_arrays
Function('x').parameters
Function('x').lookback
Function('x').output_names
Function('x').output_flags
Function('x').outputs
```

Aside from calling the function directly, Functions maintain state and will
remember their parameters/input_arrays after they've been set. You can set
parameters and recalculate with new input data using run():
```python
SMA.parameters = {'timeperiod': 15}
result1 = SMA.run(input_arrays1)
result2 = SMA.run(input_arrays2)

# Or set input_arrays and change the parameters:
SMA.input_arrays = input_arrays1
ma10 = SMA(timeperiod=10)
ma20 = SMA(20)
```

For more details, take a look at the
[code](https://github.com/ta-lib/ta-lib-python/blob/master/talib/abstract.pyx#L46).

[Documentation Index](doc_index.md)


================================================
FILE: docs/doc_index.md
================================================
# Documentation

* [Installation and Troubleshooting](install.md)
* [Using the Function API](func.md)
* [Using the Abstract API](abstract.md)
* [All Functions](funcs.md)
    * [Overlap Studies](func_groups/overlap_studies.md)
    * [Momentum Indicators](func_groups/momentum_indicators.md)
    * [Volume Indicators](func_groups/volume_indicators.md)
    * [Volatility Indicators](func_groups/volatility_indicators.md)
    * [Price Transform](func_groups/price_transform.md)
    * [Cycle Indicators](func_groups/cycle_indicators.md)
    * [Pattern Recognition](func_groups/pattern_recognition.md)
    * [Statistic Functions](func_groups/statistic_functions.md)
    * [Math Transform](func_groups/math_transform.md)
    * [Math Operators](func_groups/math_operators.md)


================================================
FILE: docs/func.md
================================================
# Function API Examples

Similar to TA-Lib, the function interface provides a lightweight wrapper of
the exposed TA-Lib indicators.

Each function returns an output array and have default values for their
parameters, unless specified as keyword arguments. Typically, these functions
will have an initial "lookback" period (a required number of observations
before an output is generated) set to ``NaN``.

All of the following examples use the function API:

```python
import numpy
import talib

close = numpy.random.random(100)
```

Calculate a simple moving average of the close prices:

```python
output = talib.SMA(close)
```

Calculating bollinger bands, with triple exponential moving average:

```python
from talib import MA_Type

upper, middle, lower = talib.BBANDS(close, matype=MA_Type.T3)
```

Calculating momentum of the close prices, with a time period of 5:

```python
output = talib.MOM(close, timeperiod=5)
```

Documentation for all functions:

* [Overlap Studies](func_groups/overlap_studies.md)
* [Momentum Indicators](func_groups/momentum_indicators.md)
* [Volume Indicators](func_groups/volume_indicators.md)
* [Volatility Indicators](func_groups/volatility_indicators.md)
* [Pattern Recognition](func_groups/pattern_recognition.md)
* [Cycle Indicators](func_groups/cycle_indicators.md)
* [Statistic Functions](func_groups/statistic_functions.md)
* [Price Transform](func_groups/price_transform.md)
* [Math Transform](func_groups/math_transform.md)
* [Math Operators](func_groups/math_operators.md)

[Documentation Index](doc_index.md)
[FLOAT_RIGHTNext: Using the Abstract API](abstract.md)


================================================
FILE: docs/func_groups/cycle_indicators.md
================================================
# Cycle Indicator Functions
### HT_DCPERIOD - Hilbert Transform - Dominant Cycle Period
NOTE: The ``HT_DCPERIOD`` function has an unstable period.  
```python
real = HT_DCPERIOD(real)
```

### HT_DCPHASE - Hilbert Transform - Dominant Cycle Phase
NOTE: The ``HT_DCPHASE`` function has an unstable period.  
```python
real = HT_DCPHASE(real)
```

### HT_PHASOR - Hilbert Transform - Phasor Components
NOTE: The ``HT_PHASOR`` function has an unstable period.  
```python
inphase, quadrature = HT_PHASOR(real)
```

### HT_SINE - Hilbert Transform - SineWave
NOTE: The ``HT_SINE`` function has an unstable period.  
```python
sine, leadsine = HT_SINE(real)
```

### HT_TRENDMODE - Hilbert Transform - Trend vs Cycle Mode
NOTE: The ``HT_TRENDMODE`` function has an unstable period.  
```python
integer = HT_TRENDMODE(real)
```


[Documentation Index](../doc_index.md)

[FLOAT_RIGHTAll Function Groups](../funcs.md)


================================================
FILE: docs/func_groups/math_operators.md
================================================
# Math Operator Functions
### ADD - Vector Arithmetic Add
```python
real = ADD(real0, real1)
```

### DIV - Vector Arithmetic Div
```python
real = DIV(real0, real1)
```

### MAX - Highest value over a specified period
```python
real = MAX(real, timeperiod=30)
```

### MAXINDEX - Index of highest value over a specified period
```python
integer = MAXINDEX(real, timeperiod=30)
```

### MIN - Lowest value over a specified period
```python
real = MIN(real, timeperiod=30)
```

### MININDEX - Index of lowest value over a specified period
```python
integer = MININDEX(real, timeperiod=30)
```

### MINMAX - Lowest and highest values over a specified period
```python
min, max = MINMAX(real, timeperiod=30)
```

### MINMAXINDEX - Indexes of lowest and highest values over a specified period
```python
minidx, maxidx = MINMAXINDEX(real, timeperiod=30)
```

### MULT - Vector Arithmetic Mult
```python
real = MULT(real0, real1)
```

### SUB - Vector Arithmetic Subtraction
```python
real = SUB(real0, real1)
```

### SUM - Summation
```python
real = SUM(real, timeperiod=30)
```


[Documentation Index](../doc_index.md)

[FLOAT_RIGHTAll Function Groups](../funcs.md)


================================================
FILE: docs/func_groups/math_transform.md
================================================
# Math Transform Functions
### ACOS - Vector Trigonometric ACos
```python
real = ACOS(real)
```

### ASIN - Vector Trigonometric ASin
```python
real = ASIN(real)
```

### ATAN - Vector Trigonometric ATan
```python
real = ATAN(real)
```

### CEIL - Vector Ceil
```python
real = CEIL(real)
```

### COS - Vector Trigonometric Cos
```python
real = COS(real)
```

### COSH - Vector Trigonometric Cosh
```python
real = COSH(real)
```

### EXP - Vector Arithmetic Exp
```python
real = EXP(real)
```

### FLOOR - Vector Floor
```python
real = FLOOR(real)
```

### LN - Vector Log Natural
```python
real = LN(real)
```

### LOG10 - Vector Log10
```python
real = LOG10(real)
```

### SIN - Vector Trigonometric Sin
```python
real = SIN(real)
```

### SINH - Vector Trigonometric Sinh
```python
real = SINH(real)
```

### SQRT - Vector Square Root
```python
real = SQRT(real)
```

### TAN - Vector Trigonometric Tan
```python
real = TAN(real)
```

### TANH - Vector Trigonometric Tanh
```python
real = TANH(real)
```


[Documentation Index](../doc_index.md)

[FLOAT_RIGHTAll Function Groups](../funcs.md)


================================================
FILE: docs/func_groups/momentum_indicators.md
================================================
# Momentum Indicator Functions
### ADX - Average Directional Movement Index
NOTE: The ``ADX`` function has an unstable period.  
```python
real = ADX(high, low, close, timeperiod=14)
```

### ADXR - Average Directional Movement Index Rating
NOTE: The ``ADXR`` function has an unstable period.  
```python
real = ADXR(high, low, close, timeperiod=14)
```

### APO - Absolute Price Oscillator
```python
real = APO(real, fastperiod=12, slowperiod=26, matype=0)
```

### AROON - Aroon
```python
aroondown, aroonup = AROON(high, low, timeperiod=14)
```

### AROONOSC - Aroon Oscillator
```python
real = AROONOSC(high, low, timeperiod=14)
```

### BOP - Balance Of Power
```python
real = BOP(open, high, low, close)
```

### CCI - Commodity Channel Index
```python
real = CCI(high, low, close, timeperiod=14)
```

### CMO - Chande Momentum Oscillator
NOTE: The ``CMO`` function has an unstable period.  
```python
real = CMO(real, timeperiod=14)
```

### DX - Directional Movement Index
NOTE: The ``DX`` function has an unstable period.  
```python
real = DX(high, low, close, timeperiod=14)
```

### IMI - Intraday Momentum Index
NOTE: The ``IMI`` function has an unstable period.
```python
real = IMI(open, close, timeperiod=14)
```

### MACD - Moving Average Convergence/Divergence
```python
macd, macdsignal, macdhist = MACD(real, fastperiod=12, slowperiod=26, signalperiod=9)
```

### MACDEXT - MACD with controllable MA type
```python
macd, macdsignal, macdhist = MACDEXT(real, fastperiod=12, fastmatype=0, slowperiod=26, slowmatype=0, signalperiod=9, signalmatype=0)
```

### MACDFIX - Moving Average Convergence/Divergence Fix 12/26
```python
macd, macdsignal, macdhist = MACDFIX(real, signalperiod=9)
```

### MFI - Money Flow Index
NOTE: The ``MFI`` function has an unstable period.  
```python
real = MFI(high, low, close, volume, timeperiod=14)
```

### MINUS_DI - Minus Directional Indicator
NOTE: The ``MINUS_DI`` function has an unstable period.  
```python
real = MINUS_DI(high, low, close, timeperiod=14)
```

### MINUS_DM - Minus Directional Movement
NOTE: The ``MINUS_DM`` function has an unstable period.  
```python
real = MINUS_DM(high, low, timeperiod=14)
```

### MOM - Momentum
```python
real = MOM(real, timeperiod=10)
```

### PLUS_DI - Plus Directional Indicator
NOTE: The ``PLUS_DI`` function has an unstable period.  
```python
real = PLUS_DI(high, low, close, timeperiod=14)
```

### PLUS_DM - Plus Directional Movement
NOTE: The ``PLUS_DM`` function has an unstable period.  
```python
real = PLUS_DM(high, low, timeperiod=14)
```

### PPO - Percentage Price Oscillator
```python
real = PPO(real, fastperiod=12, slowperiod=26, matype=0)
```

### ROC - Rate of change : ((price/prevPrice)-1)*100
```python
real = ROC(real, timeperiod=10)
```

### ROCP - Rate of change Percentage: (price-prevPrice)/prevPrice
```python
real = ROCP(real, timeperiod=10)
```

### ROCR - Rate of change ratio: (price/prevPrice)
```python
real = ROCR(real, timeperiod=10)
```

### ROCR100 - Rate of change ratio 100 scale: (price/prevPrice)*100
```python
real = ROCR100(real, timeperiod=10)
```

### RSI - Relative Strength Index
NOTE: The ``RSI`` function has an unstable period.  
```python
real = RSI(real, timeperiod=14)
```

### STOCH - Stochastic
```python
slowk, slowd = STOCH(high, low, close, fastk_period=5, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0)
```

### STOCHF - Stochastic Fast
```python
fastk, fastd = STOCHF(high, low, close, fastk_period=5, fastd_period=3, fastd_matype=0)
```

### STOCHRSI - Stochastic Relative Strength Index
NOTE: The ``STOCHRSI`` function has an unstable period.  
```python
fastk, fastd = STOCHRSI(real, timeperiod=14, fastk_period=5, fastd_period=3, fastd_matype=0)
```

### TRIX - 1-day Rate-Of-Change (ROC) of a Triple Smooth EMA
```python
real = TRIX(real, timeperiod=30)
```

### ULTOSC - Ultimate Oscillator
```python
real = ULTOSC(high, low, close, timeperiod1=7, timeperiod2=14, timeperiod3=28)
```

### WILLR - Williams' %R
```python
real = WILLR(high, low, close, timeperiod=14)
```


[Documentation Index](../doc_index.md)

[FLOAT_RIGHTAll Function Groups](../funcs.md)


================================================
FILE: docs/func_groups/overlap_studies.md
================================================
# Overlap Studies Functions
### ACCBANDS - Acceleration Bands
```python
upperband, middleband, lowerband = ACCBANDS(high, low, close, timeperiod=20)
```

### BBANDS - Bollinger Bands
```python
upperband, middleband, lowerband = BBANDS(real, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)
```

### DEMA - Double Exponential Moving Average
```python
real = DEMA(real, timeperiod=30)
```

### EMA - Exponential Moving Average
NOTE: The ``EMA`` function has an unstable period.  
```python
real = EMA(real, timeperiod=30)
```

### HT_TRENDLINE - Hilbert Transform - Instantaneous Trendline
NOTE: The ``HT_TRENDLINE`` function has an unstable period.  
```python
real = HT_TRENDLINE(real)
```

### KAMA - Kaufman Adaptive Moving Average
NOTE: The ``KAMA`` function has an unstable period.  
```python
real = KAMA(real, timeperiod=30)
```

### MA - Moving average
```python
real = MA(real, timeperiod=30, matype=0)
```

### MAMA - MESA Adaptive Moving Average
NOTE: The ``MAMA`` function has an unstable period.  
```python
mama, fama = MAMA(real, fastlimit=0, slowlimit=0)
```

### MAVP - Moving average with variable period
```python
real = MAVP(real, periods, minperiod=2, maxperiod=30, matype=0)
```

### MIDPOINT - MidPoint over period
```python
real = MIDPOINT(real, timeperiod=14)
```

### MIDPRICE - Midpoint Price over period
```python
real = MIDPRICE(high, low, timeperiod=14)
```

### SAR - Parabolic SAR
```python
real = SAR(high, low, acceleration=0, maximum=0)
```

### SAREXT - Parabolic SAR - Extended
```python
real = SAREXT(high, low, startvalue=0, offsetonreverse=0, accelerationinitlong=0, accelerationlong=0, accelerationmaxlong=0, accelerationinitshort=0, accelerationshort=0, accelerationmaxshort=0)
```

### SMA - Simple Moving Average
```python
real = SMA(real, timeperiod=30)
```

### T3 - Triple Exponential Moving Average (T3)
NOTE: The ``T3`` function has an unstable period.  
```python
real = T3(real, timeperiod=5, vfactor=0)
```

### TEMA - Triple Exponential Moving Average
```python
real = TEMA(real, timeperiod=30)
```

### TRIMA - Triangular Moving Average
```python
real = TRIMA(real, timeperiod=30)
```

### WMA - Weighted Moving Average
```python
real = WMA(real, timeperiod=30)
```

[Documentation Index](../doc_index.md)

[FLOAT_RIGHTAll Function Groups](../funcs.md)


================================================
FILE: docs/func_groups/pattern_recognition.md
================================================
# Pattern Recognition Functions
### CDL2CROWS - Two Crows
```python
integer = CDL2CROWS(open, high, low, close)
```

### CDL3BLACKCROWS - Three Black Crows
```python
integer = CDL3BLACKCROWS(open, high, low, close)
```

### CDL3INSIDE - Three Inside Up/Down
```python
integer = CDL3INSIDE(open, high, low, close)
```

### CDL3LINESTRIKE - Three-Line Strike 
```python
integer = CDL3LINESTRIKE(open, high, low, close)
```

### CDL3OUTSIDE - Three Outside Up/Down
```python
integer = CDL3OUTSIDE(open, high, low, close)
```

### CDL3STARSINSOUTH - Three Stars In The South
```python
integer = CDL3STARSINSOUTH(open, high, low, close)
```

### CDL3WHITESOLDIERS - Three Advancing White Soldiers
```python
integer = CDL3WHITESOLDIERS(open, high, low, close)
```

### CDLABANDONEDBABY - Abandoned Baby
```python
integer = CDLABANDONEDBABY(open, high, low, close, penetration=0)
```

### CDLADVANCEBLOCK - Advance Block
```python
integer = CDLADVANCEBLOCK(open, high, low, close)
```

### CDLBELTHOLD - Belt-hold
```python
integer = CDLBELTHOLD(open, high, low, close)
```

### CDLBREAKAWAY - Breakaway
```python
integer = CDLBREAKAWAY(open, high, low, close)
```

### CDLCLOSINGMARUBOZU - Closing Marubozu
```python
integer = CDLCLOSINGMARUBOZU(open, high, low, close)
```

### CDLCONCEALBABYSWALL - Concealing Baby Swallow
```python
integer = CDLCONCEALBABYSWALL(open, high, low, close)
```

### CDLCOUNTERATTACK - Counterattack
```python
integer = CDLCOUNTERATTACK(open, high, low, close)
```

### CDLDARKCLOUDCOVER - Dark Cloud Cover
```python
integer = CDLDARKCLOUDCOVER(open, high, low, close, penetration=0)
```

### CDLDOJI - Doji
```python
integer = CDLDOJI(open, high, low, close)
```

### CDLDOJISTAR - Doji Star
```python
integer = CDLDOJISTAR(open, high, low, close)
```

### CDLDRAGONFLYDOJI - Dragonfly Doji
```python
integer = CDLDRAGONFLYDOJI(open, high, low, close)
```

### CDLENGULFING - Engulfing Pattern
```python
integer = CDLENGULFING(open, high, low, close)
```

### CDLEVENINGDOJISTAR - Evening Doji Star
```python
integer = CDLEVENINGDOJISTAR(open, high, low, close, penetration=0)
```

### CDLEVENINGSTAR - Evening Star
```python
integer = CDLEVENINGSTAR(open, high, low, close, penetration=0)
```

### CDLGAPSIDESIDEWHITE - Up/Down-gap side-by-side white lines
```python
integer = CDLGAPSIDESIDEWHITE(open, high, low, close)
```

### CDLGRAVESTONEDOJI - Gravestone Doji
```python
integer = CDLGRAVESTONEDOJI(open, high, low, close)
```

### CDLHAMMER - Hammer
```python
integer = CDLHAMMER(open, high, low, close)
```

### CDLHANGINGMAN - Hanging Man
```python
integer = CDLHANGINGMAN(open, high, low, close)
```

### CDLHARAMI - Harami Pattern
```python
integer = CDLHARAMI(open, high, low, close)
```

### CDLHARAMICROSS - Harami Cross Pattern
```python
integer = CDLHARAMICROSS(open, high, low, close)
```

### CDLHIGHWAVE - High-Wave Candle
```python
integer = CDLHIGHWAVE(open, high, low, close)
```

### CDLHIKKAKE - Hikkake Pattern
```python
integer = CDLHIKKAKE(open, high, low, close)
```

### CDLHIKKAKEMOD - Modified Hikkake Pattern
```python
integer = CDLHIKKAKEMOD(open, high, low, close)
```

### CDLHOMINGPIGEON - Homing Pigeon
```python
integer = CDLHOMINGPIGEON(open, high, low, close)
```

### CDLIDENTICAL3CROWS - Identical Three Crows
```python
integer = CDLIDENTICAL3CROWS(open, high, low, close)
```

### CDLINNECK - In-Neck Pattern
```python
integer = CDLINNECK(open, high, low, close)
```

### CDLINVERTEDHAMMER - Inverted Hammer
```python
integer = CDLINVERTEDHAMMER(open, high, low, close)
```

### CDLKICKING - Kicking
```python
integer = CDLKICKING(open, high, low, close)
```

### CDLKICKINGBYLENGTH - Kicking - bull/bear determined by the longer marubozu
```python
integer = CDLKICKINGBYLENGTH(open, high, low, close)
```

### CDLLADDERBOTTOM - Ladder Bottom
```python
integer = CDLLADDERBOTTOM(open, high, low, close)
```

### CDLLONGLEGGEDDOJI - Long Legged Doji
```python
integer = CDLLONGLEGGEDDOJI(open, high, low, close)
```

### CDLLONGLINE - Long Line Candle
```python
integer = CDLLONGLINE(open, high, low, close)
```

### CDLMARUBOZU - Marubozu
```python
integer = CDLMARUBOZU(open, high, low, close)
```

### CDLMATCHINGLOW - Matching Low
```python
integer = CDLMATCHINGLOW(open, high, low, close)
```

### CDLMATHOLD - Mat Hold
```python
integer = CDLMATHOLD(open, high, low, close, penetration=0)
```

### CDLMORNINGDOJISTAR - Morning Doji Star
```python
integer = CDLMORNINGDOJISTAR(open, high, low, close, penetration=0)
```

### CDLMORNINGSTAR - Morning Star
```python
integer = CDLMORNINGSTAR(open, high, low, close, penetration=0)
```

### CDLONNECK - On-Neck Pattern
```python
integer = CDLONNECK(open, high, low, close)
```

### CDLPIERCING - Piercing Pattern
```python
integer = CDLPIERCING(open, high, low, close)
```

### CDLRICKSHAWMAN - Rickshaw Man
```python
integer = CDLRICKSHAWMAN(open, high, low, close)
```

### CDLRISEFALL3METHODS - Rising/Falling Three Methods
```python
integer = CDLRISEFALL3METHODS(open, high, low, close)
```

### CDLSEPARATINGLINES - Separating Lines
```python
integer = CDLSEPARATINGLINES(open, high, low, close)
```

### CDLSHOOTINGSTAR - Shooting Star
```python
integer = CDLSHOOTINGSTAR(open, high, low, close)
```

### CDLSHORTLINE - Short Line Candle
```python
integer = CDLSHORTLINE(open, high, low, close)
```

### CDLSPINNINGTOP - Spinning Top
```python
integer = CDLSPINNINGTOP(open, high, low, close)
```

### CDLSTALLEDPATTERN - Stalled Pattern
```python
integer = CDLSTALLEDPATTERN(open, high, low, close)
```

### CDLSTICKSANDWICH - Stick Sandwich
```python
integer = CDLSTICKSANDWICH(open, high, low, close)
```

### CDLTAKURI - Takuri (Dragonfly Doji with very long lower shadow)
```python
integer = CDLTAKURI(open, high, low, close)
```

### CDLTASUKIGAP - Tasuki Gap
```python
integer = CDLTASUKIGAP(open, high, low, close)
```

### CDLTHRUSTING - Thrusting Pattern
```python
integer = CDLTHRUSTING(open, high, low, close)
```

### CDLTRISTAR - Tristar Pattern
```python
integer = CDLTRISTAR(open, high, low, close)
```

### CDLUNIQUE3RIVER - Unique 3 River
```python
integer = CDLUNIQUE3RIVER(open, high, low, close)
```

### CDLUPSIDEGAP2CROWS - Upside Gap Two Crows
```python
integer = CDLUPSIDEGAP2CROWS(open, high, low, close)
```

### CDLXSIDEGAP3METHODS - Upside/Downside Gap Three Methods
```python
integer = CDLXSIDEGAP3METHODS(open, high, low, close)
```


[Documentation Index](../doc_index.md)

[FLOAT_RIGHTAll Function Groups](../funcs.md)

================================================
FILE: docs/func_groups/price_transform.md
================================================
# Price Transform Functions
### AVGDEV - Average Deviation
```python
real = AVGDEV(real, timeperiod=14)
```

### AVGPRICE - Average Price
```python
real = AVGPRICE(open, high, low, close)
```

### MEDPRICE - Median Price
```python
real = MEDPRICE(high, low)
```

### TYPPRICE - Typical Price
```python
real = TYPPRICE(high, low, close)
```

### WCLPRICE - Weighted Close Price
```python
real = WCLPRICE(high, low, close)
```


[Documentation Index](../doc_index.md)
[FLOAT_RIGHTAll Function Groups](../funcs.md)


================================================
FILE: docs/func_groups/statistic_functions.md
================================================
# Statistic Functions
### BETA - Beta
```python
real = BETA(real0, real1, timeperiod=5)
```

### CORREL - Pearson's Correlation Coefficient (r)
```python
real = CORREL(real0, real1, timeperiod=30)
```

### LINEARREG - Linear Regression
```python
real = LINEARREG(real, timeperiod=14)
```

### LINEARREG_ANGLE - Linear Regression Angle
```python
real = LINEARREG_ANGLE(real, timeperiod=14)
```

### LINEARREG_INTERCEPT - Linear Regression Intercept
```python
real = LINEARREG_INTERCEPT(real, timeperiod=14)
```

### LINEARREG_SLOPE - Linear Regression Slope
```python
real = LINEARREG_SLOPE(real, timeperiod=14)
```

### STDDEV - Standard Deviation
```python
real = STDDEV(real, timeperiod=5, nbdev=1)
```

### TSF - Time Series Forecast
```python
real = TSF(real, timeperiod=14)
```

### VAR - Variance
```python
real = VAR(real, timeperiod=5, nbdev=1)
```


[Documentation Index](../doc_index.md)

[FLOAT_RIGHTAll Function Groups](../funcs.md)


================================================
FILE: docs/func_groups/volatility_indicators.md
================================================
# Volatility Indicator Functions
### ATR - Average True Range
NOTE: The ``ATR`` function has an unstable period.  
```python
real = ATR(high, low, close, timeperiod=14)
```

### NATR - Normalized Average True Range
NOTE: The ``NATR`` function has an unstable period.  
```python
real = NATR(high, low, close, timeperiod=14)
```

### TRANGE - True Range
```python
real = TRANGE(high, low, close)
```


[Documentation Index](../doc_index.md)

[FLOAT_RIGHTAll Function Groups](../funcs.md)

================================================
FILE: docs/func_groups/volume_indicators.md
================================================
# Volume Indicator Functions
### AD - Chaikin A/D Line
```python
real = AD(high, low, close, volume)
```

### ADOSC - Chaikin A/D Oscillator
```python
real = ADOSC(high, low, close, volume, fastperiod=3, slowperiod=10)
```

### OBV - On Balance Volume
```python
real = OBV(close, volume)
```


[Documentation Index](../doc_index.md)

[FLOAT_RIGHTAll Function Groups](../funcs.md)

================================================
FILE: docs/funcs.md
================================================
# All Supported Indicators and Functions

* [Overlap Studies](func_groups/overlap_studies.md)
* [Momentum Indicators](func_groups/momentum_indicators.md)
* [Volume Indicators](func_groups/volume_indicators.md)
* [Volatility Indicators](func_groups/volatility_indicators.md)
* [Price Transform](func_groups/price_transform.md)
* [Cycle Indicators](func_groups/cycle_indicators.md)
* [Pattern Recognition](func_groups/pattern_recognition.md)
* [Statistic Functions](func_groups/statistic_functions.md)
* [Math Transform](func_groups/math_transform.md)
* [Math Operators](func_groups/math_operators.md)

#### [Overlap Studies](func_groups/overlap_studies.md)

```
BBANDS               Bollinger Bands
DEMA                 Double Exponential Moving Average
EMA                  Exponential Moving Average
HT_TRENDLINE         Hilbert Transform - Instantaneous Trendline
KAMA                 Kaufman Adaptive Moving Average
MA                   Moving average
MAMA                 MESA Adaptive Moving Average
MAVP                 Moving average with variable period
MIDPOINT             MidPoint over period
MIDPRICE             Midpoint Price over period
SAR                  Parabolic SAR
SAREXT               Parabolic SAR - Extended
SMA                  Simple Moving Average
T3                   Triple Exponential Moving Average (T3)
TEMA                 Triple Exponential Moving Average
TRIMA                Triangular Moving Average
WMA                  Weighted Moving Average
```

#### [Momentum Indicators](func_groups/momentum_indicators.md)

```
ADX                  Average Directional Movement Index
ADXR                 Average Directional Movement Index Rating
APO                  Absolute Price Oscillator
AROON                Aroon
AROONOSC             Aroon Oscillator
BOP                  Balance Of Power
CCI                  Commodity Channel Index
CMO                  Chande Momentum Oscillator
DX                   Directional Movement Index
MACD                 Moving Average Convergence/Divergence
MACDEXT              MACD with controllable MA type
MACDFIX              Moving Average Convergence/Divergence Fix 12/26
MFI                  Money Flow Index
MINUS_DI             Minus Directional Indicator
MINUS_DM             Minus Directional Movement
MOM                  Momentum
PLUS_DI              Plus Directional Indicator
PLUS_DM              Plus Directional Movement
PPO                  Percentage Price Oscillator
ROC                  Rate of change : ((price/prevPrice)-1)*100
ROCP                 Rate of change Percentage: (price-prevPrice)/prevPrice
ROCR                 Rate of change ratio: (price/prevPrice)
ROCR100              Rate of change ratio 100 scale: (price/prevPrice)*100
RSI                  Relative Strength Index
STOCH                Stochastic
STOCHF               Stochastic Fast
STOCHRSI             Stochastic Relative Strength Index
TRIX                 1-day Rate-Of-Change (ROC) of a Triple Smooth EMA
ULTOSC               Ultimate Oscillator
WILLR                Williams' %R
```

#### [Volume Indicators](func_groups/volume_indicators.md)

```
AD                   Chaikin A/D Line
ADOSC                Chaikin A/D Oscillator
OBV                  On Balance Volume
```

#### [Cycle Indicators](func_groups/cycle_indicators.md)

```
HT_DCPERIOD          Hilbert Transform - Dominant Cycle Period
HT_DCPHASE           Hilbert Transform - Dominant Cycle Phase
HT_PHASOR            Hilbert Transform - Phasor Components
HT_SINE              Hilbert Transform - SineWave
HT_TRENDMODE         Hilbert Transform - Trend vs Cycle Mode
```

#### [Price Transform](func_groups/price_transform.md)

```
AVGPRICE             Average Price
MEDPRICE             Median Price
TYPPRICE             Typical Price
WCLPRICE             Weighted Close Price
```

#### [Volatility Indicators](func_groups/volatility_indicators.md)

```
ATR                  Average True Range
NATR                 Normalized Average True Range
TRANGE               True Range
```

#### [Pattern Recognition](func_groups/pattern_recognition.md)

```
CDL2CROWS            Two Crows
CDL3BLACKCROWS       Three Black Crows
CDL3INSIDE           Three Inside Up/Down
CDL3LINESTRIKE       Three-Line Strike
CDL3OUTSIDE          Three Outside Up/Down
CDL3STARSINSOUTH     Three Stars In The South
CDL3WHITESOLDIERS    Three Advancing White Soldiers
CDLABANDONEDBABY     Abandoned Baby
CDLADVANCEBLOCK      Advance Block
CDLBELTHOLD          Belt-hold
CDLBREAKAWAY         Breakaway
CDLCLOSINGMARUBOZU   Closing Marubozu
CDLCONCEALBABYSWALL  Concealing Baby Swallow
CDLCOUNTERATTACK     Counterattack
CDLDARKCLOUDCOVER    Dark Cloud Cover
CDLDOJI              Doji
CDLDOJISTAR          Doji Star
CDLDRAGONFLYDOJI     Dragonfly Doji
CDLENGULFING         Engulfing Pattern
CDLEVENINGDOJISTAR   Evening Doji Star
CDLEVENINGSTAR       Evening Star
CDLGAPSIDESIDEWHITE  Up/Down-gap side-by-side white lines
CDLGRAVESTONEDOJI    Gravestone Doji
CDLHAMMER            Hammer
CDLHANGINGMAN        Hanging Man
CDLHARAMI            Harami Pattern
CDLHARAMICROSS       Harami Cross Pattern
CDLHIGHWAVE          High-Wave Candle
CDLHIKKAKE           Hikkake Pattern
CDLHIKKAKEMOD        Modified Hikkake Pattern
CDLHOMINGPIGEON      Homing Pigeon
CDLIDENTICAL3CROWS   Identical Three Crows
CDLINNECK            In-Neck Pattern
CDLINVERTEDHAMMER    Inverted Hammer
CDLKICKING           Kicking
CDLKICKINGBYLENGTH   Kicking - bull/bear determined by the longer marubozu
CDLLADDERBOTTOM      Ladder Bottom
CDLLONGLEGGEDDOJI    Long Legged Doji
CDLLONGLINE          Long Line Candle
CDLMARUBOZU          Marubozu
CDLMATCHINGLOW       Matching Low
CDLMATHOLD           Mat Hold
CDLMORNINGDOJISTAR   Morning Doji Star
CDLMORNINGSTAR       Morning Star
CDLONNECK            On-Neck Pattern
CDLPIERCING          Piercing Pattern
CDLRICKSHAWMAN       Rickshaw Man
CDLRISEFALL3METHODS  Rising/Falling Three Methods
CDLSEPARATINGLINES   Separating Lines
CDLSHOOTINGSTAR      Shooting Star
CDLSHORTLINE         Short Line Candle
CDLSPINNINGTOP       Spinning Top
CDLSTALLEDPATTERN    Stalled Pattern
CDLSTICKSANDWICH     Stick Sandwich
CDLTAKURI            Takuri (Dragonfly Doji with very long lower shadow)
CDLTASUKIGAP         Tasuki Gap
CDLTHRUSTING         Thrusting Pattern
CDLTRISTAR           Tristar Pattern
CDLUNIQUE3RIVER      Unique 3 River
CDLUPSIDEGAP2CROWS   Upside Gap Two Crows
CDLXSIDEGAP3METHODS  Upside/Downside Gap Three Methods
```

#### [Statistic Functions](func_groups/statistic_functions.md)

```
BETA                 Beta
CORREL               Pearson's Correlation Coefficient (r)
LINEARREG            Linear Regression
LINEARREG_ANGLE      Linear Regression Angle
LINEARREG_INTERCEPT  Linear Regression Intercept
LINEARREG_SLOPE      Linear Regression Slope
STDDEV               Standard Deviation
TSF                  Time Series Forecast
VAR                  Variance
```

#### [Math Transform](func_groups/math_transform.md)

```
ACOS                 Vector Trigonometric ACos
ASIN                 Vector Trigonometric ASin
ATAN                 Vector Trigonometric ATan
CEIL                 Vector Ceil
COS                  Vector Trigonometric Cos
COSH                 Vector Trigonometric Cosh
EXP                  Vector Arithmetic Exp
FLOOR                Vector Floor
LN                   Vector Log Natural
LOG10                Vector Log10
SIN                  Vector Trigonometric Sin
SINH                 Vector Trigonometric Sinh
SQRT                 Vector Square Root
TAN                  Vector Trigonometric Tan
TANH                 Vector Trigonometric Tanh
```

#### [Math Operators](func_groups/math_operators.md)

```
ADD                  Vector Arithmetic Add
DIV                  Vector Arithmetic Div
MAX                  Highest value over a specified period
MAXINDEX             Index of highest value over a specified period
MIN                  Lowest value over a specified period
MININDEX             Index of lowest value over a specified period
MINMAX               Lowest and highest values over a specified period
MINMAXINDEX          Indexes of lowest and highest values over a specified period
MULT                 Vector Arithmetic Mult
SUB                  Vector Arithmetic Subtraction
SUM                  Summation
```

[Documentation Index](doc_index.md)


================================================
FILE: docs/generate_html_pages.py
================================================
"""
USAGE:

To convert markdown docs into html docs:
$ python generate_html_pages.py /path/to/gh-pages/dir

To generate pygments code highlighting stylesheet:
$ pygmentize -f html -S [STYLE_NAME] -a .highlight > /path/to/gh-pages/stylesheets/dir/pygments_style.css

To list available style names (at python prompt)
>>> from pygments import styles
>>> sorted(styles.get_all_styles())
# default, lovelace and xcode are "normal" styles
"""

import os
import sys
import talib

import mistune

from pygments import highlight
from pygments.lexers import get_lexer_by_name
from pygments.formatters.html import HtmlFormatter

from bs4 import BeautifulSoup

from talib.abstract import Function


INPUT_DIR = os.path.dirname(os.path.realpath(__file__))
FUNCTION_GROUPS_DIR = os.path.join(INPUT_DIR, 'func_groups')
OUTPUT_DIR = os.path.join(INPUT_DIR, 'html')


HEADER = '''\
<!DOCTYPE html>
<html>

  <head>
    <meta charset='utf-8' />
    <meta http-equiv="X-UA-Compatible" content="chrome=1" />
    <meta name="description" content="TA-Lib : Python wrapper for TA-Lib (https://ta-lib.org/)." />
    <link rel="stylesheet" type="text/css" media="screen" href="stylesheets/stylesheet.css">
    <title>TA-Lib</title>
  </head>

  <body>
    <div id="header_wrap" class="outer">
        <header class="inner">
            <a id="forkme_banner" href="https://github.com/ta-lib/ta-lib-python">View on GitHub</a>
            <div class="clearfix">
                <ul id="menu" class="drop">
                    <li><a href="index.html">Home</a></li>
                    <li><a href="doc_index.html">Documentation</a></li>
                </ul>
            </div>
            <br>
            <h1 id="project_title"><a href="https://ta-lib.github.io/ta-lib-python/">TA-Lib</a></h1>
            <h2 id="project_tagline">Python wrapper for TA-Lib (https://ta-lib.org/).</h2>
            <section id="downloads">
                <a class="zip_download_link" href="https://github.com/ta-lib/ta-lib-python/zipball/master">Download this project as a .zip file</a>
                <a class="tar_download_link" href="https://github.com/ta-lib/ta-lib-python/tarball/master">Download this project as a tar.gz file</a>
            </section>
        </header>
    </div>

    <!-- MAIN CONTENT -->
    <div id="main_content_wrap" class="outer">
        <section id="main_content" class="inner">
'''

FOOTER = '''\
        </section>
    </div>

    <!-- FOOTER  -->
    <div id="footer_wrap" class="outer">
      <footer class="inner">
        <p class="copyright">TA-Lib written by <a href="https://github.com/mrjbq7">mrjbq7</a>
        and <a href="https://github.com/ta-lib/ta-lib-python/network/members">contributors</a></p>
        
        <p>Published with <a href="https://pages.github.com">GitHub Pages</a></p>
      </footer>
    </div>

  </body>
</html>
'''


def slugify(string):
    return string.lower().replace(' ', '_')


def get_doc_links():
    """Returns a dictionary of function names -> upstream documentation link"""
    tadoc_homepage = 'https://www.tadoc.org/'
    html_file_path = os.path.join(INPUT_DIR, '.tadoc.org.html')
    if os.path.exists(html_file_path):
        with open(html_file_path, 'r') as f:
            html = f.read()
    else:
        from urllib.request import urlopen

        html = urlopen(tadoc_homepage).read()
        with open(html_file_path, 'wb') as f:
            f.write(html)

    # find every link that's for an indicator and convert to absolute urls
    soup = BeautifulSoup(html, 'html.parser')
    links = [a for a in soup.find_all('a') if 'indicator' in a['href']]
    ret = {}
    for a in links:
        url = ''.join([tadoc_homepage, a['href']])
        func = url[url.rfind('/')+1:url.rfind('.')]
        ret[func] = url
    return ret


def generate_groups_markdown():
    """Generate and save markdown files for function group documentation"""
    for group, group_docs in get_groups_markdown().items():
        file_path = os.path.join(FUNCTION_GROUPS_DIR, '%s.md' % group)
        with open(file_path, 'w') as f:
            f.write(group_docs)


def get_groups_markdown():
    """Generate markdown for function groups using the Abstract API

    Returns a dictionary of group_name -> documentation for group functions
    """
    def unpluralize(noun):
        if noun.endswith('s'):
            if len(noun) > 2 and noun[-2] not in ["'", 'e']:
                return noun[:-1]
        return noun

    doc_links = get_doc_links()
    ret = {}
    for group, funcs in talib.get_function_groups().items():
        h1 = '# %s' % unpluralize(group)
        h1 = h1 + ' Functions' if 'Function' not in h1 else h1 + 's'
        group_docs = [h1]
        for func in funcs:
            # figure out this function's options
            f = Function(func)
            inputs = f.info['input_names']
            if 'price' in inputs and 'prices' in inputs:
                names = [inputs['price']]
                names.extend(inputs['prices'])
                input_names = ', '.join(names)
            elif 'prices' in inputs:
                input_names = ', '.join(inputs['prices'])
            else:
                input_names = ', '.join([x for x in inputs.values() if x])

            params = ', '.join(
                ['%s=%i' % (param, default)
                 for param, default in f.info['parameters'].items()])
            outputs = ', '.join(f.info['output_names'])

            # print the header
            group_docs.append('### %s - %s' % (func, f.info['display_name']))

            if f.function_flags and 'Function has an unstable period' in f.function_flags:
                group_docs.append('NOTE: The ``%s`` function has an unstable period.  ' % func)

            # print the code definition block
            group_docs.append("```python")
            if params:
                group_docs.append('%s = %s(%s, %s)' % (
                    outputs, func.upper(), input_names, params))
            else:
                group_docs.append('%s = %s(%s)' % (
                    outputs, func.upper(), input_names))
            group_docs.append("```\n")


            # print extra info if we can
            if func in doc_links:
                group_docs.append('Learn more about the %s at [tadoc.org](%s).  ' % (
                    f.info['display_name'], doc_links[func]))

        group_docs.append('\n[Documentation Index](../doc_index.md)')
        group_docs.append('[FLOAT_RIGHTAll Function Groups](../funcs.md)')

        ret[slugify(group)] = '\n'.join(group_docs) + '\n'
    return ret


def get_markdown_file_paths():
    file_names = [
        'index.md',
        'doc_index.md',
        'install.md',
        'func.md',
        'funcs.md',
        'abstract.md',
    ]
    file_names.extend(
        ['func_groups/%s' % x for x in os.listdir(FUNCTION_GROUPS_DIR) if x.endswith('.md')]
    )
    return [os.path.join(INPUT_DIR, fn) for fn in file_names]


def _get_markdown_renderer():
    """Returns a function to convert a Markdown string into pygments-highlighted HTML"""
    class PygmentsHighlighter(mistune.HTMLRenderer):
        def block_code(self, code, info=None):
            if not info:
                return '\n<pre><code>%s</code></pre>\n' % mistune.escape(code)
            lexer = get_lexer_by_name(info, stripall=True)
            formatter = HtmlFormatter(classprefix='highlight ')
            return highlight(code, lexer, formatter)
    return mistune.Markdown(renderer=PygmentsHighlighter())


def run_convert_to_html(output_dir):
    """Converts markdown files into their respective html files"""
    markdown_to_html = _get_markdown_renderer()
    for md_file_path in get_markdown_file_paths():
        with open(md_file_path, 'r') as f:
            html = markdown_to_html(f.read())
            html = html.replace('.md">', '.html">')

        head = HEADER
        if 'func_groups' in md_file_path:
            head = head.replace('"index.html"', '"../index.html"')
            head = head.replace('"doc_index.html"', '"../doc_index.html"')
            head = head.replace('"stylesheets/', '"../stylesheets/')

        lines = html.split('\n')
        for i, line in enumerate(lines):
            if 'FLOAT_RIGHT' in line:
                line = line.replace('FLOAT_RIGHT', '')
                lines[i] = line.replace('<a ', '<a class="float-right" ')
        html = ''.join([head, '\n'.join(lines), FOOTER])

        save_file_path = os.path.abspath(
            md_file_path.replace(INPUT_DIR, output_dir).replace('.md', '.html')
        )
        if not os.path.exists(os.path.dirname(save_file_path)):
            os.mkdir(os.path.dirname(save_file_path))
        with open(save_file_path, 'w') as f:
            f.write(html)
            print('Wrote %s' % save_file_path)


if __name__ == '__main__':
    generate_groups_markdown()
    run_convert_to_html(
        OUTPUT_DIR if len(sys.argv) == 1 else sys.argv[1]
    )


================================================
FILE: docs/index.md
================================================
# About

This is a Python wrapper for [TA-LIB](https://ta-lib.org) based on Cython
instead of SWIG. From the homepage:

> TA-Lib is widely used by trading software developers requiring to perform
> technical analysis of financial market data.

> * Includes 150+ indicators such as ADX, MACD, RSI, Stochastic, Bollinger
>   Bands, etc.
> * Candlestick pattern recognition
> * Open-source API for C/C++, Java, Perl, Python and 100% Managed .NET

The original Python bindings use [SWIG](https://swig.org) which unfortunately
are difficult to install and aren't as efficient as they could be. Therefore
this project uses Cython and Numpy to efficiently and cleanly bind to TA-Lib
-- producing results 2-4 times faster than the SWIG interface.

#### [Install TA-Lib](install.md) or [Read the Docs](doc_index.md)

## Examples

Similar to TA-Lib, the function interface provides a lightweight wrapper of
the exposed TA-Lib indicators.

Each function returns an output array and have default values for their
parameters, unless specified as keyword arguments. Typically, these functions
will have an initial "lookback" period (a required number of observations
before an output is generated) set to ``NaN``.

All of the following examples use the function API:

```python
import numpy
import talib

close = numpy.random.random(100)
```

Calculate a simple moving average of the close prices:

```python
output = talib.SMA(close)
```

Calculating bollinger bands, with triple exponential moving average:

```python
from talib import MA_Type

upper, middle, lower = talib.BBANDS(close, matype=MA_Type.T3)
```

Calculating momentum of the close prices, with a time period of 5:

```python
output = talib.MOM(close, timeperiod=5)
```

## Abstract API Quick Start

If you're already familiar with using the function API, you should feel right
at home using the abstract API. Every function takes the same input, passed
as a dictionary of Numpy arrays:

```python
import numpy as np
# note that all ndarrays must be the same length!
inputs = {
    'open': np.random.random(100),
    'high': np.random.random(100),
    'low': np.random.random(100),
    'close': np.random.random(100),
    'volume': np.random.random(100)
}
```

Functions can either be imported directly or instantiated by name:

```python
from talib import abstract
sma = abstract.SMA
sma = abstract.Function('sma')
```

From there, calling functions is basically the same as the function API:

```python
from talib.abstract import *
output = SMA(input_arrays, timeperiod=25) # calculate on close prices by default
output = SMA(input_arrays, timeperiod=25, price='open') # calculate on opens
upper, middle, lower = BBANDS(input_arrays, 20, 2, 2)
slowk, slowd = STOCH(input_arrays, 5, 3, 0, 3, 0) # uses high, low, close by default
slowk, slowd = STOCH(input_arrays, 5, 3, 0, 3, 0, prices=['high', 'low', 'open'])
```

Learn about more advanced usage of TA-Lib [here](abstract.md).

## Supported Indicators

We can show all the TA functions supported by TA-Lib, either as a ``list`` or
as a ``dict`` sorted by group (e.g. "Overlap Studies", "Momentum Indicators",
etc):

```python
import talib

print talib.get_functions()
print talib.get_function_groups()
```

### Function Groups

* [Overlap Studies](func_groups/overlap_studies.md)
* [Momentum Indicators](func_groups/momentum_indicators.md)
* [Volume Indicators](func_groups/volume_indicators.md)
* [Volatility Indicators](func_groups/volatility_indicators.md)
* [Price Transform](func_groups/price_transform.md)
* [Cycle Indicators](func_groups/cycle_indicators.md)
* [Pattern Recognition](func_groups/pattern_recognition.md)
* [Statistic Functions](func_groups/statistic_functions.md)
* [Math Transform](func_groups/math_transform.md)
* [Math Operators](func_groups/math_operators.md)

#### [Overlap Studies](func_groups/overlap_studies.md)

```
BBANDS               Bollinger Bands
DEMA                 Double Exponential Moving Average
EMA                  Exponential Moving Average
HT_TRENDLINE         Hilbert Transform - Instantaneous Trendline
KAMA                 Kaufman Adaptive Moving Average
MA                   Moving average
MAMA                 MESA Adaptive Moving Average
MAVP                 Moving average with variable period
MIDPOINT             MidPoint over period
MIDPRICE             Midpoint Price over period
SAR                  Parabolic SAR
SAREXT               Parabolic SAR - Extended
SMA                  Simple Moving Average
T3                   Triple Exponential Moving Average (T3)
TEMA                 Triple Exponential Moving Average
TRIMA                Triangular Moving Average
WMA                  Weighted Moving Average
```

#### [Momentum Indicators](func_groups/momentum_indicators.md)

```
ADX                  Average Directional Movement Index
ADXR                 Average Directional Movement Index Rating
APO                  Absolute Price Oscillator
AROON                Aroon
AROONOSC             Aroon Oscillator
BOP                  Balance Of Power
CCI                  Commodity Channel Index
CMO                  Chande Momentum Oscillator
DX                   Directional Movement Index
MACD                 Moving Average Convergence/Divergence
MACDEXT              MACD with controllable MA type
MACDFIX              Moving Average Convergence/Divergence Fix 12/26
MFI                  Money Flow Index
MINUS_DI             Minus Directional Indicator
MINUS_DM             Minus Directional Movement
MOM                  Momentum
PLUS_DI              Plus Directional Indicator
PLUS_DM              Plus Directional Movement
PPO                  Percentage Price Oscillator
ROC                  Rate of change : ((price/prevPrice)-1)*100
ROCP                 Rate of change Percentage: (price-prevPrice)/prevPrice
ROCR                 Rate of change ratio: (price/prevPrice)
ROCR100              Rate of change ratio 100 scale: (price/prevPrice)*100
RSI                  Relative Strength Index
STOCH                Stochastic
STOCHF               Stochastic Fast
STOCHRSI             Stochastic Relative Strength Index
TRIX                 1-day Rate-Of-Change (ROC) of a Triple Smooth EMA
ULTOSC               Ultimate Oscillator
WILLR                Williams' %R
```

#### [Volume Indicators](func_groups/volume_indicators.md)

```
AD                   Chaikin A/D Line
ADOSC                Chaikin A/D Oscillator
OBV                  On Balance Volume
```

#### [Volatility Indicators](func_groups/volatility_indicators.md)

```
ATR                  Average True Range
NATR                 Normalized Average True Range
TRANGE               True Range
```

#### [Price Transform](func_groups/price_transform.md)

```
AVGPRICE             Average Price
MEDPRICE             Median Price
TYPPRICE             Typical Price
WCLPRICE             Weighted Close Price
```

#### [Cycle Indicators](func_groups/cycle_indicators.md)

```
HT_DCPERIOD          Hilbert Transform - Dominant Cycle Period
HT_DCPHASE           Hilbert Transform - Dominant Cycle Phase
HT_PHASOR            Hilbert Transform - Phasor Components
HT_SINE              Hilbert Transform - SineWave
HT_TRENDMODE         Hilbert Transform - Trend vs Cycle Mode
```

#### [Pattern Recognition](func_groups/pattern_recognition.md)

```
CDL2CROWS            Two Crows
CDL3BLACKCROWS       Three Black Crows
CDL3INSIDE           Three Inside Up/Down
CDL3LINESTRIKE       Three-Line Strike
CDL3OUTSIDE          Three Outside Up/Down
CDL3STARSINSOUTH     Three Stars In The South
CDL3WHITESOLDIERS    Three Advancing White Soldiers
CDLABANDONEDBABY     Abandoned Baby
CDLADVANCEBLOCK      Advance Block
CDLBELTHOLD          Belt-hold
CDLBREAKAWAY         Breakaway
CDLCLOSINGMARUBOZU   Closing Marubozu
CDLCONCEALBABYSWALL  Concealing Baby Swallow
CDLCOUNTERATTACK     Counterattack
CDLDARKCLOUDCOVER    Dark Cloud Cover
CDLDOJI              Doji
CDLDOJISTAR          Doji Star
CDLDRAGONFLYDOJI     Dragonfly Doji
CDLENGULFING         Engulfing Pattern
CDLEVENINGDOJISTAR   Evening Doji Star
CDLEVENINGSTAR       Evening Star
CDLGAPSIDESIDEWHITE  Up/Down-gap side-by-side white lines
CDLGRAVESTONEDOJI    Gravestone Doji
CDLHAMMER            Hammer
CDLHANGINGMAN        Hanging Man
CDLHARAMI            Harami Pattern
CDLHARAMICROSS       Harami Cross Pattern
CDLHIGHWAVE          High-Wave Candle
CDLHIKKAKE           Hikkake Pattern
CDLHIKKAKEMOD        Modified Hikkake Pattern
CDLHOMINGPIGEON      Homing Pigeon
CDLIDENTICAL3CROWS   Identical Three Crows
CDLINNECK            In-Neck Pattern
CDLINVERTEDHAMMER    Inverted Hammer
CDLKICKING           Kicking
CDLKICKINGBYLENGTH   Kicking - bull/bear determined by the longer marubozu
CDLLADDERBOTTOM      Ladder Bottom
CDLLONGLEGGEDDOJI    Long Legged Doji
CDLLONGLINE          Long Line Candle
CDLMARUBOZU          Marubozu
CDLMATCHINGLOW       Matching Low
CDLMATHOLD           Mat Hold
CDLMORNINGDOJISTAR   Morning Doji Star
CDLMORNINGSTAR       Morning Star
CDLONNECK            On-Neck Pattern
CDLPIERCING          Piercing Pattern
CDLRICKSHAWMAN       Rickshaw Man
CDLRISEFALL3METHODS  Rising/Falling Three Methods
CDLSEPARATINGLINES   Separating Lines
CDLSHOOTINGSTAR      Shooting Star
CDLSHORTLINE         Short Line Candle
CDLSPINNINGTOP       Spinning Top
CDLSTALLEDPATTERN    Stalled Pattern
CDLSTICKSANDWICH     Stick Sandwich
CDLTAKURI            Takuri (Dragonfly Doji with very long lower shadow)
CDLTASUKIGAP         Tasuki Gap
CDLTHRUSTING         Thrusting Pattern
CDLTRISTAR           Tristar Pattern
CDLUNIQUE3RIVER      Unique 3 River
CDLUPSIDEGAP2CROWS   Upside Gap Two Crows
CDLXSIDEGAP3METHODS  Upside/Downside Gap Three Methods
```

#### [Statistic Functions](func_groups/statistic_functions.md)

```
BETA                 Beta
CORREL               Pearson's Correlation Coefficient (r)
LINEARREG            Linear Regression
LINEARREG_ANGLE      Linear Regression Angle
LINEARREG_INTERCEPT  Linear Regression Intercept
LINEARREG_SLOPE      Linear Regression Slope
STDDEV               Standard Deviation
TSF                  Time Series Forecast
VAR                  Variance
```


================================================
FILE: docs/install.md
================================================
# Installation

You can install from PyPI:

```
$ pip install TA-Lib
```

Or checkout the sources and run ``setup.py`` yourself:

```
$ python setup.py install
```

### Troubleshooting Install Errors

```
func.c:256:28: fatal error: ta-lib/ta_libc.h: No such file or directory
compilation terminated.
```

If you get build errors like this, it typically means that it can't find the
underlying ``TA-Lib`` library and needs to be installed:

# Dependencies
To use TA-Lib for python, you need to have the [TA-Lib](https://ta-lib.org/hdr_dw.html)
already installed:

#### Mac OS X
```
$ brew install ta-lib
```

#### Windows
Download [ta-lib-0.4.0-msvc.zip](https://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-msvc.zip)
and unzip to ``C:\ta-lib``

#### Linux
Download [ta-lib-0.4.0-src.tar.gz](https://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz) and:
```
$ tar zxvf ta-lib-0.4.0-src.tar.gz
$ cd ta-lib
$ ./configure --prefix=/usr
$ make
$ sudo make install
```

> If you build ``TA-Lib`` using ``make -jX`` it will fail but that's OK!
> Simply rerun ``make -jX`` followed by ``[sudo] make install``.

[Documentation Index](doc_index.md)
[FLOAT_RIGHTNext: Using the Function API](func.md)


================================================
FILE: pyproject.toml
================================================
[build-system]
requires = ["setuptools", "wheel", "Cython", "numpy"]
build-backend = "setuptools.build_meta"

[project]
name = "TA-Lib"
version = "0.6.9"
description = "Python wrapper for TA-Lib"
readme = "README.md"
license-files = ["LICENSE"]
authors = [
    {name = "John Benediktsson", email = "mrjbq7@gmail.com"}
]
urls = {homepage = "http://github.com/ta-lib/ta-lib-python", download = "https://github.com/ta-lib/ta-lib-python/releases"}
classifiers = [
    "Development Status :: 5 - Production/Stable",
    "Operating System :: Unix",
    "Operating System :: POSIX",
    "Operating System :: MacOS :: MacOS X",
    "Operating System :: Microsoft :: Windows",
    "Programming Language :: Python",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.9",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Programming Language :: Python :: 3.14",
    "Programming Language :: Cython",
    "Topic :: Office/Business :: Financial",
    "Topic :: Scientific/Engineering :: Mathematics",
    "Intended Audience :: Developers",
    "Intended Audience :: Science/Research",
    "Intended Audience :: Financial and Insurance Industry",
]
dependencies = [
    "build",
    "numpy",
]
requires-python = '>=3.9'

[tool.setuptools]
packages = ["talib"]
package-data = {"talib" = ["_ta_lib.pyi", "py.typed", "abstract.pyi"]}


================================================
FILE: requirements.txt
================================================
numpy
Cython


================================================
FILE: requirements_dev.txt
================================================
-r requirements.txt
beautifulsoup4
mistune
Pygments
build
cython


================================================
FILE: requirements_test.txt
================================================
-r requirements.txt
pandas
pytest
polars


================================================
FILE: setup.py
================================================
#!/usr/bin/env python

import sys
import os
import os.path
import warnings

from setuptools import setup, Extension

import numpy

platform_supported = False

lib_talib_name = 'ta-lib'               # the name as of TA-Lib 0.6.1

if any(s in sys.platform for s in ['darwin', 'linux', 'bsd', 'sunos']):
    platform_supported = True
    include_dirs = [
        '/usr/include',
        '/usr/local/include',
        '/opt/include',
        '/opt/local/include',
        '/opt/homebrew/include',
        '/opt/homebrew/opt/ta-lib/include',
    ]
    library_dirs = [
        '/usr/lib',
        '/usr/local/lib',
        '/usr/lib64',
        '/usr/local/lib64',
        '/opt/lib',
        '/opt/local/lib',
        '/opt/homebrew/lib',
        '/opt/homebrew/opt/ta-lib/lib',
    ]

elif sys.platform == "win32":
    platform_supported = True
    lib_talib_name = 'ta-lib-static'
    include_dirs = [
        r"c:\ta-lib\c\include",
        r"c:\Program Files\TA-Lib\include",
        r"c:\Program Files (x86)\TA-Lib\include",
    ]
    library_dirs = [
        r"c:\ta-lib\c\lib",
        r"c:\Program Files\TA-Lib\lib",
        r"c:\Program Files (x86)\TA-Lib\lib",
    ]

if 'TA_INCLUDE_PATH' in os.environ:
    include_dirs = os.environ['TA_INCLUDE_PATH'].split(os.pathsep)

if 'TA_LIBRARY_PATH' in os.environ:
    library_dirs = os.environ['TA_LIBRARY_PATH'].split(os.pathsep)

if not platform_supported:
    raise NotImplementedError(sys.platform)

for path in library_dirs:
    try:
        files = os.listdir(path)
        if any(lib_talib_name in f for f in files):
            break
    except OSError:
        pass
else:
    warnings.warn('Cannot find ta-lib library, installation may fail.')

# Get the Cython build_ext or fall back to setuptools build_ext
try:
    from Cython.Distutils import build_ext
    has_cython = True
except ImportError:
    from setuptools.command.build_ext import build_ext
    has_cython = False

class NumpyBuildExt(build_ext):
    """
    Custom build_ext command that adds numpy's include_dir to extensions.
    """

    def build_extensions(self):
        """
        Add numpy's include directory to Extension includes.
        """
        numpy_incl = numpy.get_include()
        for ext in self.extensions:
            ext.include_dirs.append(numpy_incl)

        super().build_extensions()

cmdclass = {'build_ext': NumpyBuildExt}

ext_modules = [
    Extension(
        'talib._ta_lib',
        ['talib/_ta_lib.pyx' if has_cython else 'talib/_ta_lib.c'],
        include_dirs=include_dirs,
        library_dirs=library_dirs,
        libraries=[lib_talib_name],
        runtime_library_dirs=[] if sys.platform == 'win32' else library_dirs)
]

setup(
    ext_modules=ext_modules,
    cmdclass=cmdclass,
)


================================================
FILE: talib/__init__.py
================================================

import atexit
from itertools import chain
from functools import wraps

# If polars is available, wrap talib functions so that they support
# polars.Series input
try:
    from polars import Series as _pl_Series
except ImportError as import_error:
    try:
        if not isinstance(import_error, ModuleNotFoundError) or import_error.name != 'polars':
            # Propagate the error when the module exists but failed to be imported.
            raise import_error
    # `ModuleNotFoundError` was introduced in Python 3.6.
    except NameError:
        pass

    # polars not available, nothing to wrap
    _pl_Series = None

# If pandas is available, wrap talib functions so that they support
# pandas.Series input
try:
    from pandas import Series as _pd_Series
except ImportError as import_error:
    try:
        if not isinstance(import_error, ModuleNotFoundError) or import_error.name != 'pandas':
            # Propagate the error when the module exists but failed to be imported.
            raise import_error
    # `ModuleNotFoundError` was introduced in Python 3.6.
    except NameError:
        pass

    # pandas not available, nothing to wrap
    _pd_Series = None

if _pl_Series is not None or _pd_Series is not None:

    def _wrapper(func):
        @wraps(func)
        def wrapper(*args, **kwds):

            if _pl_Series is not None:
                use_pl = any(isinstance(arg, _pl_Series) for arg in args) or \
                         any(isinstance(v, _pl_Series) for v in kwds.values())
            else:
                use_pl = False

            if _pd_Series is not None:
                use_pd = any(isinstance(arg, _pd_Series) for arg in args) or \
                         any(isinstance(v, _pd_Series) for v in kwds.values())
            else:
                use_pd = False

            if use_pl and use_pd:
                raise Exception("Cannot mix polars and pandas")

            # Use float64 values if polars or pandas, else use values as passed
            if use_pl:
                _args = [arg.to_numpy().astype(float) if isinstance(arg, _pl_Series) else
                         arg for arg in args]
                _kwds = {k: v.to_numpy().astype(float) if isinstance(v, _pl_Series) else
                            v for k, v in kwds.items()}

            elif use_pd:
                index = next(arg.index
                             for arg in chain(args, kwds.values())
                             if isinstance(arg, _pd_Series))

                _args = [arg.to_numpy().astype(float) if isinstance(arg, _pd_Series) else
                         arg for arg in args]
                _kwds = {k: v.to_numpy().astype(float) if isinstance(v, _pd_Series) else
                            v for k, v in kwds.items()}

            else:
                _args = args
                _kwds = kwds

            result = func(*_args, **_kwds)

            # check to see if we got a streaming result
            first_result = result[0] if isinstance(result, tuple) else result
            is_streaming_fn_result = not hasattr(first_result, '__len__')
            if is_streaming_fn_result:
                return result

            # Series was passed in, Series gets out
            if use_pl:
                if isinstance(result, tuple):
                    return tuple(_pl_Series(arr) for arr in result)
                else:
                    return _pl_Series(result)

            elif use_pd:
                if isinstance(result, tuple):
                    return tuple(_pd_Series(arr, index=index) for arr in result)
                else:
                    return _pd_Series(result, index=index)

            else:
                return result

        return wrapper
else:
    _wrapper = lambda x: x


from ._ta_lib import (
    _ta_initialize, _ta_shutdown, MA_Type, __ta_version__,
    _ta_set_unstable_period as set_unstable_period,
    _ta_get_unstable_period as get_unstable_period,
    _ta_set_compatibility as set_compatibility,
    _ta_get_compatibility as get_compatibility,
    __TA_FUNCTION_NAMES__
)

# import all the func and stream functions
from ._ta_lib import *

# wrap them for polars or pandas support
func = __import__("_ta_lib", globals(), locals(), __TA_FUNCTION_NAMES__, level=1)
for func_name in __TA_FUNCTION_NAMES__:
    wrapped_func = _wrapper(getattr(func, func_name))
    setattr(func, func_name, wrapped_func)
    globals()[func_name] = wrapped_func

stream_func_names = ['stream_%s' % fname for fname in __TA_FUNCTION_NAMES__]
stream = __import__("stream", globals(), locals(), stream_func_names, level=1)
for func_name, stream_func_name in zip(__TA_FUNCTION_NAMES__, stream_func_names):
    wrapped_func = _wrapper(getattr(stream, func_name))
    setattr(stream, func_name, wrapped_func)
    globals()[stream_func_name] = wrapped_func

__version__ = '0.6.9'

# In order to use this python library, talib (i.e. this __file__) will be
# imported at some point, either explicitly or indirectly via talib.func
# or talib.abstract. Here, we handle initializing and shutting down the
# underlying TA-Lib. Initialization happens on import, before any other TA-Lib
# functions are called. Finally, when the python process exits, we shutdown
# the underlying TA-Lib.

_ta_initialize()
atexit.register(_ta_shutdown)

__function_groups__ = {
    'Cycle Indicators': [
        'HT_DCPERIOD',
        'HT_DCPHASE',
        'HT_PHASOR',
        'HT_SINE',
        'HT_TRENDMODE',
        ],
    'Math Operators': [
        'ADD',
        'DIV',
        'MAX',
        'MAXINDEX',
        'MIN',
        'MININDEX',
        'MINMAX',
        'MINMAXINDEX',
        'MULT',
        'SUB',
        'SUM',
        ],
    'Math Transform': [
        'ACOS',
        'ASIN',
        'ATAN',
        'CEIL',
        'COS',
        'COSH',
        'EXP',
        'FLOOR',
        'LN',
        'LOG10',
        'SIN',
        'SINH',
        'SQRT',
        'TAN',
        'TANH',
        ],
    'Momentum Indicators': [
        'ADX',
        'ADXR',
        'APO',
        'AROON',
        'AROONOSC',
        'BOP',
        'CCI',
        'CMO',
        'DX',
        'IMI',
        'MACD',
        'MACDEXT',
        'MACDFIX',
        'MFI',
        'MINUS_DI',
        'MINUS_DM',
        'MOM',
        'PLUS_DI',
        'PLUS_DM',
        'PPO',
        'ROC',
        'ROCP',
        'ROCR',
        'ROCR100',
        'RSI',
        'STOCH',
        'STOCHF',
        'STOCHRSI',
        'TRIX',
        'ULTOSC',
        'WILLR',
        ],
    'Overlap Studies': [
        'ACCBANDS',
        'BBANDS',
        'DEMA',
        'EMA',
        'HT_TRENDLINE',
        'KAMA',
        'MA',
        'MAMA',
        'MAVP',
        'MIDPOINT',
        'MIDPRICE',
        'SAR',
        'SAREXT',
        'SMA',
        'T3',
        'TEMA',
        'TRIMA',
        'WMA',
        ],
    'Pattern Recognition': [
        'CDL2CROWS',
        'CDL3BLACKCROWS',
        'CDL3INSIDE',
        'CDL3LINESTRIKE',
        'CDL3OUTSIDE',
        'CDL3STARSINSOUTH',
        'CDL3WHITESOLDIERS',
        'CDLABANDONEDBABY',
        'CDLADVANCEBLOCK',
        'CDLBELTHOLD',
        'CDLBREAKAWAY',
        'CDLCLOSINGMARUBOZU',
        'CDLCONCEALBABYSWALL',
        'CDLCOUNTERATTACK',
        'CDLDARKCLOUDCOVER',
        'CDLDOJI',
        'CDLDOJISTAR',
        'CDLDRAGONFLYDOJI',
        'CDLENGULFING',
        'CDLEVENINGDOJISTAR',
        'CDLEVENINGSTAR',
        'CDLGAPSIDESIDEWHITE',
        'CDLGRAVESTONEDOJI',
        'CDLHAMMER',
        'CDLHANGINGMAN',
        'CDLHARAMI',
        'CDLHARAMICROSS',
        'CDLHIGHWAVE',
        'CDLHIKKAKE',
        'CDLHIKKAKEMOD',
        'CDLHOMINGPIGEON',
        'CDLIDENTICAL3CROWS',
        'CDLINNECK',
        'CDLINVERTEDHAMMER',
        'CDLKICKING',
        'CDLKICKINGBYLENGTH',
        'CDLLADDERBOTTOM',
        'CDLLONGLEGGEDDOJI',
        'CDLLONGLINE',
        'CDLMARUBOZU',
        'CDLMATCHINGLOW',
        'CDLMATHOLD',
        'CDLMORNINGDOJISTAR',
        'CDLMORNINGSTAR',
        'CDLONNECK',
        'CDLPIERCING',
        'CDLRICKSHAWMAN',
        'CDLRISEFALL3METHODS',
        'CDLSEPARATINGLINES',
        'CDLSHOOTINGSTAR',
        'CDLSHORTLINE',
        'CDLSPINNINGTOP',
        'CDLSTALLEDPATTERN',
        'CDLSTICKSANDWICH',
        'CDLTAKURI',
        'CDLTASUKIGAP',
        'CDLTHRUSTING',
        'CDLTRISTAR',
        'CDLUNIQUE3RIVER',
        'CDLUPSIDEGAP2CROWS',
        'CDLXSIDEGAP3METHODS',
        ],
    'Price Transform': [
        'AVGDEV',
        'AVGPRICE',
        'MEDPRICE',
        'TYPPRICE',
        'WCLPRICE',
        ],
    'Statistic Functions': [
        'BETA',
        'CORREL',
        'LINEARREG',
        'LINEARREG_ANGLE',
        'LINEARREG_INTERCEPT',
        'LINEARREG_SLOPE',
        'STDDEV',
        'TSF',
        'VAR',
        ],
    'Volatility Indicators': [
        'ATR',
        'NATR',
        'TRANGE',
        ],
    'Volume Indicators': [
        'AD',
        'ADOSC',
        'OBV'
        ],
    }

def get_functions():
    """
    Returns a list of all the functions supported by TALIB
    """
    ret = []
    for group in __function_groups__:
        ret.extend(__function_groups__[group])
    return ret

def get_function_groups():
    """
    Returns a dict with keys of function-group names and values of lists
    of function names ie {'group_names': ['function_names']}
    """
    return __function_groups__.copy()

__all__ = ['get_functions', 'get_function_groups'] + __TA_FUNCTION_NAMES__ + ["stream_%s" % name for name in __TA_FUNCTION_NAMES__]


================================================
FILE: talib/_abstract.pxi
================================================
'''
This file Copyright (c) 2013 Brian A Cappello <briancappello at gmail>
'''
import math
import threading
try:
    from collections import OrderedDict
except ImportError: # handle python 2.6 and earlier
    from ordereddict import OrderedDict
from cython.operator cimport dereference as deref
import numpy
import sys

cimport numpy as np
cimport _ta_lib as lib
# NOTE: _ta_check_success, MA_Type is defined in _common.pxi

np.import_array() # Initialize the NumPy C API

# lookup for TALIB input parameters which don't define expected price series inputs
__INPUT_PRICE_SERIES_DEFAULTS = {'price':   'close',
                                 'price0':  'high',
                                 'price1':  'low',
                                 'periods': 'periods', # only used by MAVP; not a price series!
                                 }

__INPUT_ARRAYS_TYPES = [dict]
__ARRAY_TYPES = [np.ndarray]

# allow use of pandas.DataFrame for input arrays
try:
    import pandas
    __INPUT_ARRAYS_TYPES.append(pandas.DataFrame)
    __ARRAY_TYPES.append(pandas.Series)
    __PANDAS_DATAFRAME = pandas.DataFrame
    __PANDAS_SERIES = pandas.Series
except ImportError as import_error:
    try:
        if not isinstance(import_error, ModuleNotFoundError) or import_error.name != 'pandas':
            # Propagate the error when the module exists but failed to be imported.
            raise import_error
    # `ModuleNotFoundError` was introduced in Python 3.6.
    except NameError:
        pass

    __PANDAS_DATAFRAME = None
    __PANDAS_SERIES = None

# allow use of polars.DataFrame for input arrays
try:
    import polars
    __INPUT_ARRAYS_TYPES.append(polars.DataFrame)
    __ARRAY_TYPES.append(polars.Series)
    __POLARS_DATAFRAME = polars.DataFrame
    __POLARS_SERIES = polars.Series
except ImportError as import_error:
    try:
        if not isinstance(import_error, ModuleNotFoundError) or import_error.name != 'polars':
            # Propagate the error when the module exists but failed to be imported.
            raise import_error
    # `ModuleNotFoundError` was introduced in Python 3.6.
    except NameError:
        pass

    __POLARS_DATAFRAME = None
    __POLARS_SERIES = None

__INPUT_ARRAYS_TYPES = tuple(__INPUT_ARRAYS_TYPES)
__ARRAY_TYPES = tuple(__ARRAY_TYPES)


if sys.version >= '3':

    def str2bytes(s):
        return bytes(s, 'ascii')

    def bytes2str(b):
        return b.decode('ascii')

else:

    def str2bytes(s):
        return s

    def bytes2str(b):
        return b

class Function(object):
    """
    This is a pythonic wrapper around TALIB's abstract interface. It is
    intended to simplify using individual TALIB functions by providing a
    unified interface for setting/controlling input data, setting function
    parameters and retrieving results. Input data consists of a ``dict`` of
    ``numpy`` arrays (or a ``pandas.DataFrame`` or ``polars.DataFrame``), one
    array for each of open, high, low, close and volume. This can be set with
    the set_input_arrays() method. Which keyed array(s) are used as inputs when
    calling the function is controlled using the input_names property.

    This class gets initialized with a TALIB function name and optionally an
    input_arrays object. It provides the following primary functions for
    setting inputs and retrieving results:

    ---- input_array/TA-function-parameter set-only functions -----
    - set_input_arrays(input_arrays)
    - set_function_args([input_arrays,] [param_args_andor_kwargs])

    Documentation for param_args_andor_kwargs can be seen by printing the
    Function instance or programmatically via the info, input_names and
    parameters properties.

    ----- result-returning functions -----
    - the outputs property wraps a method which ensures results are always valid
    - run([input_arrays]) # calls set_input_arrays and returns self.outputs
    - FunctionInstance([input_arrays,] [param_args_andor_kwargs]) # calls set_function_args and returns self.outputs
    """

    def __init__(self, function_name, func_object, *args, **kwargs):
        # make sure the function_name is valid and define all of our variables
        self.__name = function_name.upper()
        self.__namestr = self.__name
        self.__name = str2bytes(self.__name)

        # thread-local storage
        self.__localdata = threading.local()

        # finish initializing: query the TALIB abstract interface and set arguments
        self.set_function_args(*args, **kwargs)
        self.func_object = func_object

    @property
    def __local(self):
        local = self.__localdata
        if not hasattr(local, 'info'):
            local.info = None
            local.input_arrays = {}

            # dictionaries of function args. keys are input/opt_input/output parameter names
            local.input_names = OrderedDict()
            local.opt_inputs = OrderedDict()
            local.outputs = OrderedDict()
            local.outputs_valid = False

            # function info
            local.info = _ta_getFuncInfo(self.__name)

            # inputs (price series names)
            for i in xrange(local.info.pop('num_inputs')):
                info = _ta_getInputParameterInfo(self.__name, i)
                input_name = info['name']
                if info['price_series'] is None:
                    info['price_series'] = __INPUT_PRICE_SERIES_DEFAULTS[input_name]
                local.input_names[input_name] = info
            local.info['input_names'] = self.input_names

            # optional inputs (function parameters)
            for i in xrange(local.info.pop('num_opt_inputs')):
                info = _ta_getOptInputParameterInfo(self.__name, i)
                param_name = info['name']
                local.opt_inputs[param_name] = info
            local.info['parameters'] = self.parameters

            # outputs
            local.info['output_flags'] = OrderedDict()
            for i in xrange(local.info.pop('num_outputs')):
                info = _ta_getOutputParameterInfo(self.__name, i)
                output_name = info['name']
                local.info['output_flags'][output_name] = info['flags']
                local.outputs[output_name] = None
            local.info['output_names'] = self.output_names
        return local

    @property
    def info(self):
        """
        Returns a copy of the function's info dict.
        """
        return self.__local.info.copy()

    @property
    def function_flags(self):
        """
        Returns any function flags defined for this indicator function.
        """
        return self.__local.info['function_flags']

    @property
    def output_flags(self):
        """
        Returns the flags for each output for this indicator function.
        """
        return self.__local.info['output_flags'].copy()

    def get_input_names(self):
        """
        Returns the dict of input price series names that specifies which
        of the ndarrays in input_arrays will be used to calculate the function.
        """
        local = self.__local
        ret = OrderedDict()
        for input_name in local.input_names:
            ret[input_name] = local.input_names[input_name]['price_series']
        return ret

    def set_input_names(self, input_names):
        """
        Sets the input price series names to use.
        """
        local = self.__local
        for input_name, price_series in input_names.items():
            local.input_names[input_name]['price_series'] = price_series
            local.info['input_names'][input_name] = price_series
        local.outputs_valid = False

    input_names = property(get_input_names, set_input_names)

    def get_input_arrays(self):
        """
        Returns a copy of the dict of input arrays in use.
        """
        local = self.__local
        if __POLARS_DATAFRAME is not None \
            and isinstance(local.input_arrays, __POLARS_DATAFRAME):
            return local.input_arrays.clone()
        else:
            return local.input_arrays.copy()

    def set_input_arrays(self, input_arrays):
        """
        Sets the dict of input_arrays to use. Returns True/False for
        subclasses:

        If input_arrays is a dict with the keys open, high, low, close and
        volume, it is assigned as the input_array to use and this function
        returns True, returning False otherwise. If you implement your own
        data type and wish to subclass Function, you should wrap this function
        with an if-statement:

        class CustomFunction(Function):
            def __init__(self, function_name):
                Function.__init__(self, function_name)

            def set_input_arrays(self, input_data):
                if Function.set_input_arrays(self, input_data):
                    return True
                elif isinstance(input_data, some_module.CustomDataType):
                    input_arrays = Function.get_input_arrays(self)
                    # convert input_data to input_arrays and then call the super
                    Function.set_input_arrays(self, input_arrays)
                    return True
                return False
        """
        local = self.__local
        if isinstance(input_arrays, __INPUT_ARRAYS_TYPES):
            missing_keys = []
            for key in self.__input_price_series_names():
                if __POLARS_DATAFRAME is not None \
                    and isinstance(input_arrays, __POLARS_DATAFRAME):
                    missing = key not in input_arrays.columns
                else:
                    missing = key not in input_arrays
                if missing:
                    missing_keys.append(key)
            if len(missing_keys) == 0:
                local.input_arrays = input_arrays
                local.outputs_valid = False
                return True
            else:
                raise Exception('input_arrays parameter missing required data '\
                                'key%s: %s' % ('s' if len(missing_keys) > 1 \
                                                    else '',
                                                ', '.join(missing_keys)))
        return False

    input_arrays = property(get_input_arrays, set_input_arrays)

    def get_parameters(self):
        """
        Returns the function's optional parameters and their default values.
        """
        local = self.__local
        ret = OrderedDict()
        for opt_input in local.opt_inputs:
            ret[opt_input] = self.__get_opt_input_value(opt_input)
        return ret

    def set_parameters(self, parameters=None, **kwargs):
        """
        Sets the function parameter values.
        """
        local = self.__local
        parameters = parameters or {}
        parameters.update(kwargs)
        for param, value in parameters.items():
            if self.__check_opt_input_value(param, value):
                local.opt_inputs[param]['value'] = value
        local.outputs_valid = False
        local.info['parameters'] = self.parameters

    parameters = property(get_parameters, set_parameters)

    def set_function_args(self, *args, **kwargs):
        """
        optional args:[input_arrays,] [parameter_args,] [input_price_series_kwargs,] [parameter_kwargs]
        """
        local = self.__local
        update_info = False

        for key in kwargs:
            if key in local.opt_inputs:
                value = kwargs[key]
                if self.__check_opt_input_value(key, value):
                    local.opt_inputs[key]['value'] = kwargs[key]
                    update_info = True
            elif key in local.input_names:
                local.input_names[key]['price_series'] = kwargs[key]
                local.info['input_names'][key] = kwargs[key]

        if args:
            skip_first = 0
            if self.set_input_arrays(args[0]):
                skip_first = 1
            if len(args) > skip_first:
                for i, param_name in enumerate(local.opt_inputs):
                    i += skip_first
                    if i < len(args):
                        value = args[i]
                        if self.__check_opt_input_value(param_name, value):
                            local.opt_inputs[param_name]['value'] = value
                            update_info = True

        if args or kwargs:
            if update_info:
                local.info['parameters'] = self.parameters
            local.outputs_valid = False

    @property
    def lookback(self):
        """
        Returns the lookback window size for the function with the parameter
        values that are currently set.
        """
        local = self.__local
        cdef lib.TA_ParamHolder *holder
        holder = __ta_paramHolderAlloc(self.__name)
        for i, opt_input in enumerate(local.opt_inputs):
            value = self.__get_opt_input_value(opt_input)
            type_ = local.opt_inputs[opt_input]['type']
            if type_ == lib.TA_OptInput_RealRange or type_ == lib.TA_OptInput_RealList:
                __ta_setOptInputParamReal(holder, i, value)
            elif type_ == lib.TA_OptInput_IntegerRange or type_ == lib.TA_OptInput_IntegerList:
                __ta_setOptInputParamInteger(holder, i, value)

        lookback = __ta_getLookback(holder)
        __ta_paramHolderFree(holder)
        return lookback

    @property
    def output_names(self):
        """
        Returns a list of the output names returned by this function.
        """
        ret = self.__local.outputs.keys()
        if not isinstance(ret, list):
            ret = list(ret)
        return ret

    @property
    def outputs(self):
        """
        Returns the TA function values for the currently set input_arrays and
        parameters. Returned values are a ndarray if there is only one output
        or a list of ndarrays for more than one output.
        """
        local = self.__local
        if not local.outputs_valid:
            self.__call_function()
        ret = local.outputs.values()
        if not isinstance(ret, list):
            ret = list(ret)
        if __PANDAS_DATAFRAME is not None and \
                isinstance(local.input_arrays, __PANDAS_DATAFRAME):
            index = local.input_arrays.index
            if len(ret) == 1:
                return __PANDAS_SERIES(ret[0], index=index)
            else:
                return __PANDAS_DATAFRAME(numpy.column_stack(ret),
                                          index=index,
                                          columns=self.output_names)
        elif __POLARS_DATAFRAME is not None and \
                isinstance(local.input_arrays, __POLARS_DATAFRAME):
            if len(ret) == 1:
                return __POLARS_SERIES(ret[0])
            else:
                return __POLARS_DATAFRAME(numpy.column_stack(ret),
                                          schema=self.output_names)
        else:
            return ret[0] if len(ret) == 1 else ret

    def run(self, input_arrays=None):
        """
        run([input_arrays=None])

        This is a shortcut to the outputs property that also allows setting
        the input_arrays dict.
        """
        if input_arrays:
            self.set_input_arrays(input_arrays)
        self.__call_function()
        return self.outputs

    def __call__(self, *args, **kwargs):
        """
        func_instance([input_arrays,] [parameter_args,] [input_price_series_kwargs,] [parameter_kwargs])

        This is a shortcut to the outputs property that also allows setting
        the input_arrays dict and function parameters.
        """
        local = self.__local
        # do not cache ta-func parameters passed to __call__
        opt_input_values = [(param_name, local.opt_inputs[param_name]['value'])
                            for param_name in local.opt_inputs.keys()]
        price_series_name_values = [(n, local.input_names[n]['price_series'])
                                    for n in local.input_names]

        # allow calling with same signature as talib.func module functions
        args = list(args)
        input_arrays = {}
        input_price_series_names = self.__input_price_series_names()
        if args and not isinstance(args[0], __INPUT_ARRAYS_TYPES):
            for i, arg in enumerate(args):
                if not isinstance(arg, __ARRAY_TYPES):
                    break

                try:
                    input_arrays[input_price_series_names[i]] = arg
                except IndexError:
                    msg = 'Too many price arguments: expected %d (%s)' % (
                        len(input_price_series_names),
                        ', '.join(input_price_series_names))
                    raise TypeError(msg)

        if __PANDAS_DATAFRAME is not None \
                and isinstance(local.input_arrays, __PANDAS_DATAFRAME):
            no_existing_input_arrays = local.input_arrays.empty
        elif __POLARS_DATAFRAME is not None \
                and isinstance(local.input_arrays, __POLARS_DATAFRAME):
            no_existing_input_arrays = local.input_arrays.is_empty()
        else:
            no_existing_input_arrays = not bool(local.input_arrays)

        if len(input_arrays) == len(input_price_series_names):
            self.set_input_arrays(input_arrays)
            args = args[len(input_arrays):]
        elif len(input_arrays) or (no_existing_input_arrays and (
                not len(args) or not isinstance(args[0], __INPUT_ARRAYS_TYPES))):
            msg = 'Not enough price arguments: expected %d (%s)' % (
                len(input_price_series_names),
                ', '.join(input_price_series_names))
            raise TypeError(msg)

        self.set_function_args(*args, **kwargs)
        self.__call_function()

        # restore opt_input values to as they were before this call
        for param_name, value in opt_input_values:
            local.opt_inputs[param_name]['value'] = value
        local.info['parameters'] = self.parameters

        # restore input names values to as they were before this call
        for input_name, value in price_series_name_values:
            local.input_names[input_name]['price_series'] = value
            local.info['input_names'][input_name] = value

        return self.outputs

    # figure out which price series names we're using for inputs
    def __input_price_series_names(self):
        local = self.__local
        input_price_series_names = []
        for input_name in local.input_names:
            price_series = local.input_names[input_name]['price_series']
            if isinstance(price_series, list): # TALIB-supplied input names
                for name in price_series:
                    input_price_series_names.append(name)
            else: # name came from __INPUT_PRICE_SERIES_DEFAULTS
                input_price_series_names.append(price_series)
        return input_price_series_names

    def __call_function(self):
        local = self.__local
        input_price_series_names = self.__input_price_series_names()

        # populate the ordered args we'll call the function with
        args = []
        for price_series in input_price_series_names:
            series = local.input_arrays[price_series]
            if __PANDAS_SERIES is not None and \
                    isinstance(series, __PANDAS_SERIES):
                series = series.values.astype(float)
            elif __POLARS_SERIES is not None and \
                    isinstance(series, __POLARS_SERIES):
                series = series.to_numpy().astype(float)
            args.append(series)
        for opt_input in local.opt_inputs:
            value = self.__get_opt_input_value(opt_input)
            args.append(value)

        # Use the func module to actually call the function.
        results = self.func_object(*args)
        if isinstance(results, np.ndarray):
            keys = local.outputs.keys()
            if not isinstance(keys, list):
                keys = list(keys)
            local.outputs[keys[0]] = results
        else:
            for i, output in enumerate(local.outputs):
                local.outputs[output] = results[i]
        local.outputs_valid = True

    def __check_opt_input_value(self, input_name, value):
        type_ = self.__local.opt_inputs[input_name]['type']
        if type_ in {lib.TA_OptInput_IntegerList, lib.TA_OptInput_IntegerRange}:
            type_ = int
        elif type_ in {lib.TA_OptInput_RealList, lib.TA_OptInput_RealRange}:
            type_ = float

        if isinstance(value, type_):
           return True
        elif value is not None:
            raise TypeError(
                'Invalid parameter value for %s (expected %s, got %s)' % (
                    input_name, type_.__name__, type(value).__name__))
        return False

    def __get_opt_input_value(self, input_name):
        """
        Returns the user-set value if there is one, otherwise the default.
        """
        local = self.__local
        value = local.opt_inputs[input_name]['value']
        if value is None:
            value = local.opt_inputs[input_name]['default_value']
        return value

    def __repr__(self):
        return '%s' % self.info

    def __unicode__(self):
        return unicode(self.__str__())

    def __str__(self):
        return _get_defaults_and_docs(self.info)[1] # docstring includes defaults


######################  INTERNAL python-level functions  #######################
# These map 1-1 with native C TALIB abstract interface calls. Their names
# are the same except for having the leading 4 characters lowercased (and
# the Alloc/Free function pairs which have been combined into single get
# functions)
#
# These are TA function information-discovery calls. The Function class
# encapsulates these functions into an easy-to-use, pythonic interface. It's
# therefore recommended over using these functions directly.

def _ta_getGroupTable():
    """
    Returns the list of available TALIB function group names. *slow*
    """
    cdef lib.TA_StringTable *table
    _ta_check_success('TA_GroupTableAlloc', lib.TA_GroupTableAlloc(&table))
    groups = []
    for i in xrange(table.size):
        groups.append(deref(&table.string[i]))
    _ta_check_success('TA_GroupTableFree', lib.TA_GroupTableFree(table))
    return groups

def _ta_getFuncTable(char *group):
    """
    Returns a list of the functions for the specified group name. *slow*
    """
    cdef lib.TA_StringTable *table
    _ta_check_success('TA_FuncTableAlloc', lib.TA_FuncTableAlloc(group, &table))
    functions = []
    for i in xrange(table.size):
        functions.append(deref(&table.string[i]))
    _ta_check_success('TA_FuncTableFree', lib.TA_FuncTableFree(table))
    return functions

def __get_flags(int flag, dict flags_lookup_dict):
    """
    TA-LIB provides hints for multiple flags as a bitwise-ORed int.
    This function returns the flags from flag found in the provided
    flags_lookup_dict.
    """
    value_range = flags_lookup_dict.keys()
    if not isinstance(value_range, list):
        value_range = list(value_range)
    min_int = int(math.log(min(value_range), 2))
    max_int = int(math.log(max(value_range), 2))

    # if the flag we got is out-of-range, it just means no extra info provided
    if flag < 1 or flag > 2**max_int:
        return None

    # In this loop, i is essentially the bit-position, which represents an
    # input from flags_lookup_dict. We loop through as many flags_lookup_dict
    # bit-positions as we need to check, bitwise-ANDing each with flag for a hit.
    ret = []
    for i in xrange(min_int, max_int+1):
        if 2**i & flag:
            ret.append(flags_lookup_dict[2**i])
    return ret

TA_FUNC_FLAGS = {
    16777216: 'Output scale same as input',
    67108864: 'Output is over volume',
    134217728: 'Function has an unstable period',
    268435456: 'Output is a candlestick'
}

# when flag is 0, the function (should) work on any reasonable input ndarray
TA_INPUT_FLAGS = {
    1: 'open',
    2: 'high',
    4: 'low',
    8: 'close',
    16: 'volume',
    32: 'openInterest',
    64: 'timeStamp'
}

TA_OUTPUT_FLAGS = {
    1: 'Line',
    2: 'Dotted Line',
    4: 'Dashed Line',
    8: 'Dot',
    16: 'Histogram',
    32: 'Pattern (Bool)',
    64: 'Bull/Bear Pattern (Bearish < 0, Neutral = 0, Bullish > 0)',
    128: 'Strength Pattern ([-200..-100] = Bearish, [-100..0] = Getting Bearish, 0 = Neutral, [0..100] = Getting Bullish, [100-200] = Bullish)',
    256: 'Output can be positive',
    512: 'Output can be negative',
    1024: 'Output can be zero',
    2048: 'Values represent an upper limit',
    4096: 'Values represent a lower limit'
}

def _ta_getFuncInfo(char *function_name):
    """
    Returns the info dict for the function. It has the following keys: name,
    group, help, flags, num_inputs, num_opt_inputs and num_outputs.
    """
    cdef const lib.TA_FuncInfo *info
    retCode = lib.TA_GetFuncInfo(__ta_getFuncHandle(function_name), &info)
    _ta_check_success('TA_GetFuncInfo', retCode)

    return {
        'name': bytes2str(info.name),
        'group': bytes2str(info.group),
        'display_name': bytes2str(info.hint),
        'function_flags': __get_flags(info.flags, TA_FUNC_FLAGS),
        'num_inputs': int(info.nbInput),
        'num_opt_inputs': int(info.nbOptInput),
        'num_outputs': int(info.nbOutput)
    }

def _ta_getInputParameterInfo(char *function_name, int idx):
    """
    Returns the function's input info dict for the given index. It has two
    keys: name and flags.
    """
    cdef const lib.TA_InputParameterInfo *info
    retCode = lib.TA_GetInputParameterInfo(__ta_getFuncHandle(function_name), idx, &info)
    _ta_check_success('TA_GetInputParameterInfo', retCode)

    name = bytes2str(info.paramName)
    name = name[len('in'):].lower()
    if 'real' in name:
        name = name.replace('real', 'price')
    elif 'price' in name:
        name = 'prices'

    return {
        'name': name,
        'price_series': __get_flags(info.flags, TA_INPUT_FLAGS)
    }

def _ta_getOptInputParameterInfo(char *function_name, int idx):
    """
    Returns the function's opt_input info dict for the given index. It has the
    following keys: name, display_name, type, help, default_value and value.
    """
    cdef const lib.TA_OptInputParameterInfo *info
    retCode = lib.TA_GetOptInputParameterInfo(__ta_getFuncHandle(function_name), idx, &info)
    _ta_check_success('TA_GetOptInputParameterInfo', retCode)

    name = bytes2str(info.paramName)
    name = name[len('optIn'):].lower()
    default_value = int(info.defaultValue) if info.type > 1 else info.defaultValue

    return {
        'name': name,
        'display_name': bytes2str(info.displayName),
        'type': info.type,
        'help': bytes2str(info.hint),
        'default_value': default_value,
        'value': None
    }

def _ta_getOutputParameterInfo(char *function_name, int idx):
    """
    Returns the function's output info dict for the given index. It has two
    keys: name and flags.
    """
    cdef const lib.TA_OutputParameterInfo *info
    retCode = lib.TA_GetOutputParameterInfo(__ta_getFuncHandle(function_name), idx, &info)
    _ta_check_success('TA_GetOutputParameterInfo', retCode)

    name = bytes2str(info.paramName)
    name = name[len('out'):].lower()
    # chop off leading 'real' if a descriptive name follows
    if 'real' in name and name not in ['real', 'real0', 'real1']:
        name = name[len('real'):]

    return {
        'name': name,
        'flags': __get_flags(info.flags, TA_OUTPUT_FLAGS)
    }

def _get_defaults_and_docs(func_info):
    """
    Returns a tuple with two outputs: defaults, a dict of parameter defaults,
    and documentation, a formatted docstring for the function.
    .. Note: func_info should come from Function.info, *not* _ta_getFuncInfo.
    """
    defaults = {}
    func_line = [func_info['name'], '(']
    func_args = ['[input_arrays]']
    docs = []
    docs.append('%(display_name)s (%(group)s)\n' % func_info)

    input_names = func_info['input_names']
    docs.append('Inputs:')
    for input_name in input_names:
        value = input_names[input_name]
        if not isinstance(value, list):
            value = '(any ndarray)'
        docs.append('    %s: %s' % (input_name, value))

    params = func_info['parameters']
    if params:
        docs.append('Parameters:')
    for param in params:
        docs.append('    %s: %s' % (param, params[param]))
        func_args.append('[%s=%s]' % (param, params[param]))
        defaults[param] = params[param]
        if param == 'matype':
            docs[-1] = ' '.join([docs[-1], '(%s)' % MA_Type[params[param]]])

    outputs = func_info['output_names']
    docs.append('Outputs:')
    for output in outputs:
        if output == 'integer':
            output = 'integer (values are -100, 0 or 100)'
        docs.append('    %s' % output)

    func_line.append(', '.join(func_args))
    func_line.append(')\n')
    docs.insert(0, ''.join(func_line))
    documentation = '\n'.join(docs)
    return defaults, documentation


###############    PRIVATE C-level-only functions    ###########################
# These map 1-1 with native C TALIB abstract interface calls. Their names are the
# same except for having the leading 4 characters lowercased.

# These functions are for:
# - Getting TALIB handle and paramholder pointers
# - Setting TALIB paramholder optInput values and calling the lookback function

cdef const lib.TA_FuncHandle*  __ta_getFuncHandle(char *function_name):
    """
    Returns a pointer to a function handle for the given function name
    """
    cdef const lib.TA_FuncHandle *handle
    _ta_check_success('TA_GetFuncHandle', lib.TA_GetFuncHandle(function_name, &handle))
    return handle

cdef lib.TA_ParamHolder* __ta_paramHolderAlloc(char *function_name):
    """
    Returns a pointer to a parameter holder for the given function name
    """
    cdef lib.TA_ParamHolder *holder
    retCode = lib.TA_ParamHolderAlloc(__ta_getFuncHandle(function_name), &holder)
    _ta_check_success('TA_ParamHolderAlloc', retCode)
    return holder

cdef int __ta_paramHolderFree(lib.TA_ParamHolder *params):
    """
    Frees the memory allocated by __ta_paramHolderAlloc (call when done with the parameter holder)
    WARNING: Not properly calling this function will cause memory leaks!
    """
    _ta_check_success('TA_ParamHolderFree', lib.TA_ParamHolderFree(params))

cdef int __ta_setOptInputParamInteger(lib.TA_ParamHolder *holder, int idx, int value):
    retCode = lib.TA_SetOptInputParamInteger(holder, idx, value)
    _ta_check_success('TA_SetOptInputParamInteger', retCode)

cdef int __ta_setOptInputParamReal(lib.TA_ParamHolder *holder, int idx, double value):
    retCode = lib.TA_SetOptInputParamReal(holder, idx, value)
    _ta_check_success('TA_SetOptInputParamReal', retCode)

cdef int __ta_getLookback(lib.TA_ParamHolder *holder):
    cdef int lookback
    retCode = lib.TA_GetLookback(holder, &lookback)
    _ta_check_success('TA_GetLookback', retCode)
    return lookback


================================================
FILE: talib/_common.pxi
================================================
cimport _ta_lib as lib
from _ta_lib cimport TA_RetCode, TA_FuncUnstId

__ta_version__ = lib.TA_GetVersionString()

cpdef _ta_check_success(str function_name, TA_RetCode ret_code):
    if ret_code == 0:
        return True
    elif ret_code == 1:
        description = 'Library Not Initialized (TA_LIB_NOT_INITIALIZE)'
    elif ret_code == 2:
        description = 'Bad Parameter (TA_BAD_PARAM)'
    elif ret_code == 3:
        description = 'Allocation Error (TA_ALLOC_ERR)'
    elif ret_code == 4:
        description = 'Group Not Found (TA_GROUP_NOT_FOUND)'
    elif ret_code == 5:
        description = 'Function Not Found (TA_FUNC_NOT_FOUND)'
    elif ret_code == 6:
        description = 'Invalid Handle (TA_INVALID_HANDLE)'
    elif ret_code == 7:
        description = 'Invalid Parameter Holder (TA_INVALID_PARAM_HOLDER)'
    elif ret_code == 8:
        description = 'Invalid Parameter Holder Type (TA_INVALID_PARAM_HOLDER_TYPE)'
    elif ret_code == 9:
        description = 'Invalid Parameter Function (TA_INVALID_PARAM_FUNCTION)'
    elif ret_code == 10:
        description = 'Input Not All Initialized (TA_INPUT_NOT_ALL_INITIALIZE)'
    elif ret_code == 11:
        description = 'Output Not All Initialized (TA_OUTPUT_NOT_ALL_INITIALIZE)'
    elif ret_code == 12:
        description = 'Out-of-Range Start Index (TA_OUT_OF_RANGE_START_INDEX)'
    elif ret_code == 13:
        description = 'Out-of-Range End Index (TA_OUT_OF_RANGE_END_INDEX)'
    elif ret_code == 14:
        description = 'Invalid List Type (TA_INVALID_LIST_TYPE)'
    elif ret_code == 15:
        description = 'Bad Object (TA_BAD_OBJECT)'
    elif ret_code == 16:
        description = 'Not Supported (TA_NOT_SUPPORTED)'
    elif ret_code == 5000:
        description = 'Internal Error (TA_INTERNAL_ERROR)'
    elif ret_code == 65535:
        description = 'Unknown Error (TA_UNKNOWN_ERR)'
    else:
        description = 'Unknown Error'
    raise Exception('%s function failed with error code %s: %s' % (
        function_name, ret_code, description))

def _ta_initialize():
    cdef TA_RetCode ret_code
    ret_code = lib.TA_Initialize()
    _ta_check_success('TA_Initialize', ret_code)

def _ta_shutdown():
    cdef TA_RetCode ret_code
    ret_code = lib.TA_Shutdown()
    _ta_check_success('TA_Shutdown', ret_code)

class MA_Type(object):
    SMA, EMA, WMA, DEMA, TEMA, TRIMA, KAMA, MAMA, T3 = range(9)

    def __init__(self):
        self._lookup = {
            MA_Type.SMA: 'Simple Moving Average',
            MA_Type.EMA: 'Exponential Moving Average',
            MA_Type.WMA: 'Weighted Moving Average',
            MA_Type.DEMA: 'Double Exponential Moving Average',
            MA_Type.TEMA: 'Triple Exponential Moving Average',
            MA_Type.TRIMA: 'Triangular Moving Average',
            MA_Type.KAMA: 'Kaufman Adaptive Moving Average',
            MA_Type.MAMA: 'MESA Adaptive Moving Average',
            MA_Type.T3: 'Triple Generalized Double Exponential Moving Average',
            }

    def __getitem__(self, type_):
        return self._lookup[type_]

MA_Type = MA_Type()

_ta_func_unst_ids = {'NONE': -1}
for i, name in enumerate([
            'ADX', 'ADXR', 'ATR', 'CMO', 'DX', 'EMA', 'HT_DCPERIOD',
            'HT_DCPHASE', 'HT_PHASOR', 'HT_SINE', 'HT_TRENDLINE',
            'HT_TRENDMODE', 'KAMA', 'MAMA', 'MFI', 'MINUS_DI', 'MINUS_DM',
            'NATR', 'PLUS_DI', 'PLUS_DM', 'RSI', 'STOCHRSI', 'T3', 'ALL'
        ]):
    _ta_func_unst_ids[name] = i

def _ta_set_unstable_period(name, period):
    cdef TA_RetCode ret_code
    cdef TA_FuncUnstId id = _ta_func_unst_ids[name]
    ret_code = lib.TA_SetUnstablePeriod(id, period)
    _ta_check_success('TA_SetUnstablePeriod', ret_code)

def _ta_get_unstable_period(name):
    cdef unsigned int period
    cdef TA_FuncUnstId id = _ta_func_unst_ids[name]
    period = lib.TA_GetUnstablePeriod(id)
    return period

def _ta_set_compatibility(value):
    cdef TA_RetCode ret_code
    ret_code = lib.TA_SetCompatibility(value)
    _ta_check_success('TA_SetCompatibility', ret_code)

def _ta_get_compatibility():
    cdef int value
    value = lib.TA_GetCompatibility()
    return value

class CandleSettingType(object):
    BodyLong, BodyVeryLong, BodyShort, BodyDoji, ShadowLong, ShadowVeryLong, \
    ShadowShort, ShadowVeryShort, Near, Far, Equal, AllCandleSettings = \
    range(12)

CandleSettingType = CandleSettingType()

class RangeType(object):
    RealBody, HighLow, Shadows = range(3)

RangeType = RangeType()

def _ta_set_candle_settings(settingtype, rangetype, avgperiod, factor):
    cdef TA_RetCode ret_code
    ret_code = lib.TA_SetCandleSettings(settingtype, rangetype, avgperiod, factor)
    _ta_check_success('TA_SetCandleSettings', ret_code)

def _ta_restore_candle_default_settings(settingtype):
    cdef TA_RetCode ret_code
    ret_code = lib.TA_RestoreCandleDefaultSettings(settingtype)
    _ta_check_success('TA_RestoreCandleDefaultSettings', ret_code)


================================================
FILE: talib/_func.pxi
================================================
cimport numpy as np
from numpy import nan
from cython import boundscheck, wraparound

# _ta_check_success: defined in _common.pxi

cdef double NaN = nan

cdef extern from "numpy/arrayobject.h":
    int PyArray_TYPE(np.ndarray)
    np.ndarray PyArray_EMPTY(int, np.npy_intp*, int, int)
    int PyArray_FLAGS(np.ndarray)
    np.ndarray PyArray_GETCONTIGUOUS(np.ndarray)

np.import_array() # Initialize the NumPy C API

cimport _ta_lib as lib
from _ta_lib cimport TA_RetCode

cdef np.ndarray check_array(np.ndarray real):
    if PyArray_TYPE(real) != np.NPY_DOUBLE:
        raise Exception("input array type is not double")
    if real.ndim != 1:
        raise Exception("input array has wrong dimensions")
    if not (PyArray_FLAGS(real) & np.NPY_ARRAY_C_CONTIGUOUS):
        real = PyArray_GETCONTIGUOUS(real)
    return real

cdef np.npy_intp check_length2(np.ndarray a1, np.ndarray a2) except -1:
    cdef:
        np.npy_intp length
    length = a1.shape[0]
    if length != a2.shape[0]:
        raise Exception("input array lengths are different")
    return length

cdef np.npy_intp check_length3(np.ndarray a1, np.ndarray a2, np.ndarray a3) except -1:
    cdef:
        np.npy_intp length
    length = a1.shape[0]
    if length != a2.shape[0]:
        raise Exception("input array lengths are different")
    if length != a3.shape[0]:
        raise Exception("input array lengths are different")
    return length

cdef np.npy_intp check_length4(np.ndarray a1, np.ndarray a2, np.ndarray a3, np.ndarray a4) except -1:
    cdef:
        np.npy_intp length
    length = a1.shape[0]
    if length != a2.shape[0]:
        raise Exception("input array lengths are different")
    if length != a3.shape[0]:
        raise Exception("input array lengths are different")
    if length != a4.shape[0]:
        raise Exception("input array lengths are different")
    return length

cdef np.npy_int check_begidx1(np.npy_intp length, double* a1):
    cdef:
        double val
    for i from 0 <= i < length:
        val = a1[i]
        if val != val:
            continue
        return i
    else:
        return length - 1

cdef np.npy_int check_begidx2(np.npy_intp length, double* a1, double* a2):
    cdef:
        double val
    for i from 0 <= i < length:
        val = a1[i]
        if val != val:
            continue
        val = a2[i]
        if val != val:
            continue
        return i
    else:
        return length - 1

cdef np.npy_int check_begidx3(np.npy_intp length, double* a1, double* a2, double* a3):
    cdef:
        double val
    for i from 0 <= i < length:
        val = a1[i]
        if val != val:
            continue
        val = a2[i]
        if val != val:
            continue
        val = a3[i]
        if val != val:
            continue
        return i
    else:
        return length - 1

cdef np.npy_int check_begidx4(np.npy_intp length, double* a1, double* a2, double* a3, double* a4):
    cdef:
        double val
    for i from 0 <= i < length:
        val = a1[i]
        if val != val:
            continue
        val = a2[i]
        if val != val:
            continue
        val = a3[i]
        if val != val:
            continue
        val = a4[i]
        if val != val:
            continue
        return i
    else:
        return length - 1

cdef np.ndarray make_double_array(np.npy_intp length, int lookback):
    cdef:
        np.ndarray outreal
        double* outreal_data
    outreal = PyArray_EMPTY(1, &length, np.NPY_DOUBLE, np.NPY_ARRAY_DEFAULT)
    outreal_data = <double*>outreal.data
    for i from 0 <= i < min(lookback, length):
        outreal_data[i] = NaN
    return outreal

cdef np.ndarray make_int_array(np.npy_intp length, int lookback):
    cdef:
        np.ndarray outinteger
        int* outinteger_data
    outinteger = PyArray_EMPTY(1, &length, np.NPY_INT32, np.NPY_ARRAY_DEFAULT)
    outinteger_data = <int*>outinteger.data
    for i from 0 <= i < min(lookback, length):
        outinteger_data[i] = 0
    return outinteger


@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def ACCBANDS( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ):
    """ ACCBANDS(high, low, close[, timeperiod=?])

    Acceleration Bands (Overlap Studies)

    Inputs:
        prices: ['high', 'low', 'close']
    Parameters:
        timeperiod: 20
    Outputs:
        upperband
        middleband
        lowerband
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outrealupperband
        np.ndarray outrealmiddleband
        np.ndarray outreallowerband
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length3(high, low, close)
    begidx = check_begidx3(length, <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_ACCBANDS_Lookback( timeperiod )
    outrealupperband = make_double_array(length, lookback)
    outrealmiddleband = make_double_array(length, lookback)
    outreallowerband = make_double_array(length, lookback)
    retCode = lib.TA_ACCBANDS( 0 , endidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , timeperiod , &outbegidx , &outnbelement , <double *>(outrealupperband.data)+lookback , <double *>(outrealmiddleband.data)+lookback , <double *>(outreallowerband.data)+lookback )
    _ta_check_success("TA_ACCBANDS", retCode)
    return outrealupperband , outrealmiddleband , outreallowerband 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def ACOS( np.ndarray real not None ):
    """ ACOS(real)

    Vector Trigonometric ACos (Math Transform)

    Inputs:
        real: (any ndarray)
    Outputs:
        real
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outreal
    real = check_array(real)
    length = real.shape[0]
    begidx = check_begidx1(length, <double*>(real.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_ACOS_Lookback( )
    outreal = make_double_array(length, lookback)
    retCode = lib.TA_ACOS( 0 , endidx , <double *>(real.data)+begidx , &outbegidx , &outnbelement , <double *>(outreal.data)+lookback )
    _ta_check_success("TA_ACOS", retCode)
    return outreal 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def AD( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None ):
    """ AD(high, low, close, volume)

    Chaikin A/D Line (Volume Indicators)

    Inputs:
        prices: ['high', 'low', 'close', 'volume']
    Outputs:
        real
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outreal
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    volume = check_array(volume)
    length = check_length4(high, low, close, volume)
    begidx = check_begidx4(length, <double*>(high.data), <double*>(low.data), <double*>(close.data), <double*>(volume.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_AD_Lookback( )
    outreal = make_double_array(length, lookback)
    retCode = lib.TA_AD( 0 , endidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , <double *>(volume.data)+begidx , &outbegidx , &outnbelement , <double *>(outreal.data)+lookback )
    _ta_check_success("TA_AD", retCode)
    return outreal 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def ADD( np.ndarray real0 not None , np.ndarray real1 not None ):
    """ ADD(real0, real1)

    Vector Arithmetic Add (Math Operators)

    Inputs:
        real0: (any ndarray)
        real1: (any ndarray)
    Outputs:
        real
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outreal
    real0 = check_array(real0)
    real1 = check_array(real1)
    length = check_length2(real0, real1)
    begidx = check_begidx2(length, <double*>(real0.data), <double*>(real1.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_ADD_Lookback( )
    outreal = make_double_array(length, lookback)
    retCode = lib.TA_ADD( 0 , endidx , <double *>(real0.data)+begidx , <double *>(real1.data)+begidx , &outbegidx , &outnbelement , <double *>(outreal.data)+lookback )
    _ta_check_success("TA_ADD", retCode)
    return outreal 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def ADOSC( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , np.ndarray volume not None , int fastperiod=-2**31 , int slowperiod=-2**31 ):
    """ ADOSC(high, low, close, volume[, fastperiod=?, slowperiod=?])

    Chaikin A/D Oscillator (Volume Indicators)

    Inputs:
        prices: ['high', 'low', 'close', 'volume']
    Parameters:
        fastperiod: 3
        slowperiod: 10
    Outputs:
        real
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outreal
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    volume = check_array(volume)
    length = check_length4(high, low, close, volume)
    begidx = check_begidx4(length, <double*>(high.data), <double*>(low.data), <double*>(close.data), <double*>(volume.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_ADOSC_Lookback( fastperiod , slowperiod )
    outreal = make_double_array(length, lookback)
    retCode = lib.TA_ADOSC( 0 , endidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , <double *>(volume.data)+begidx , fastperiod , slowperiod , &outbegidx , &outnbelement , <double *>(outreal.data)+lookback )
    _ta_check_success("TA_ADOSC", retCode)
    return outreal 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def ADX( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ):
    """ ADX(high, low, close[, timeperiod=?])

    Average Directional Movement Index (Momentum Indicators)

    Inputs:
        prices: ['high', 'low', 'close']
    Parameters:
        timeperiod: 14
    Outputs:
        real
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outreal
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length3(high, low, close)
    begidx = check_begidx3(length, <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_ADX_Lookback( timeperiod )
    outreal = make_double_array(length, lookback)
    retCode = lib.TA_ADX( 0 , endidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , timeperiod , &outbegidx , &outnbelement , <double *>(outreal.data)+lookback )
    _ta_check_success("TA_ADX", retCode)
    return outreal 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def ADXR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ):
    """ ADXR(high, low, close[, timeperiod=?])

    Average Directional Movement Index Rating (Momentum Indicators)

    Inputs:
        prices: ['high', 'low', 'close']
    Parameters:
        timeperiod: 14
    Outputs:
        real
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outreal
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length3(high, low, close)
    begidx = check_begidx3(length, <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_ADXR_Lookback( timeperiod )
    outreal = make_double_array(length, lookback)
    retCode = lib.TA_ADXR( 0 , endidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , timeperiod , &outbegidx , &outnbelement , <double *>(outreal.data)+lookback )
    _ta_check_success("TA_ADXR", retCode)
    return outreal 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def APO( np.ndarray real not None , int fastperiod=-2**31 , int slowperiod=-2**31 , int matype=0 ):
    """ APO(real[, fastperiod=?, slowperiod=?, matype=?])

    Absolute Price Oscillator (Momentum Indicators)

    Inputs:
        real: (any ndarray)
    Parameters:
        fastperiod: 12
        slowperiod: 26
        matype: 0 (Simple Moving Average)
    Outputs:
        real
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outreal
    real = check_array(real)
    length = real.shape[0]
    begidx = check_begidx1(length, <double*>(real.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_APO_Lookback( fastperiod , slowperiod , matype )
    outreal = make_double_array(length, lookback)
    retCode = lib.TA_APO( 0 , endidx , <double *>(real.data)+begidx , fastperiod , slowperiod , matype , &outbegidx , &outnbelement , <double *>(outreal.data)+lookback )
    _ta_check_success("TA_APO", retCode)
    return outreal 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def AROON( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ):
    """ AROON(high, low[, timeperiod=?])

    Aroon (Momentum Indicators)

    Inputs:
        prices: ['high', 'low']
    Parameters:
        timeperiod: 14
    Outputs:
        aroondown
        aroonup
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outaroondown
        np.ndarray outaroonup
    high = check_array(high)
    low = check_array(low)
    length = check_length2(high, low)
    begidx = check_begidx2(length, <double*>(high.data), <double*>(low.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_AROON_Lookback( timeperiod )
    outaroondown = make_double_array(length, lookback)
    outaroonup = make_double_array(length, lookback)
    retCode = lib.TA_AROON( 0 , endidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , timeperiod , &outbegidx , &outnbelement , <double *>(outaroondown.data)+lookback , <double *>(outaroonup.data)+lookback )
    _ta_check_success("TA_AROON", retCode)
    return outaroondown , outaroonup 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def AROONOSC( np.ndarray high not None , np.ndarray low not None , int timeperiod=-2**31 ):
    """ AROONOSC(high, low[, timeperiod=?])

    Aroon Oscillator (Momentum Indicators)

    Inputs:
        prices: ['high', 'low']
    Parameters:
        timeperiod: 14
    Outputs:
        real
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outreal
    high = check_array(high)
    low = check_array(low)
    length = check_length2(high, low)
    begidx = check_begidx2(length, <double*>(high.data), <double*>(low.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_AROONOSC_Lookback( timeperiod )
    outreal = make_double_array(length, lookback)
    retCode = lib.TA_AROONOSC( 0 , endidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , timeperiod , &outbegidx , &outnbelement , <double *>(outreal.data)+lookback )
    _ta_check_success("TA_AROONOSC", retCode)
    return outreal 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def ASIN( np.ndarray real not None ):
    """ ASIN(real)

    Vector Trigonometric ASin (Math Transform)

    Inputs:
        real: (any ndarray)
    Outputs:
        real
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outreal
    real = check_array(real)
    length = real.shape[0]
    begidx = check_begidx1(length, <double*>(real.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_ASIN_Lookback( )
    outreal = make_double_array(length, lookback)
    retCode = lib.TA_ASIN( 0 , endidx , <double *>(real.data)+begidx , &outbegidx , &outnbelement , <double *>(outreal.data)+lookback )
    _ta_check_success("TA_ASIN", retCode)
    return outreal 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def ATAN( np.ndarray real not None ):
    """ ATAN(real)

    Vector Trigonometric ATan (Math Transform)

    Inputs:
        real: (any ndarray)
    Outputs:
        real
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outreal
    real = check_array(real)
    length = real.shape[0]
    begidx = check_begidx1(length, <double*>(real.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_ATAN_Lookback( )
    outreal = make_double_array(length, lookback)
    retCode = lib.TA_ATAN( 0 , endidx , <double *>(real.data)+begidx , &outbegidx , &outnbelement , <double *>(outreal.data)+lookback )
    _ta_check_success("TA_ATAN", retCode)
    return outreal 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def ATR( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ):
    """ ATR(high, low, close[, timeperiod=?])

    Average True Range (Volatility Indicators)

    Inputs:
        prices: ['high', 'low', 'close']
    Parameters:
        timeperiod: 14
    Outputs:
        real
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outreal
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length3(high, low, close)
    begidx = check_begidx3(length, <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_ATR_Lookback( timeperiod )
    outreal = make_double_array(length, lookback)
    retCode = lib.TA_ATR( 0 , endidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , timeperiod , &outbegidx , &outnbelement , <double *>(outreal.data)+lookback )
    _ta_check_success("TA_ATR", retCode)
    return outreal 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def AVGPRICE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ):
    """ AVGPRICE(open, high, low, close)

    Average Price (Price Transform)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Outputs:
        real
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outreal
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_AVGPRICE_Lookback( )
    outreal = make_double_array(length, lookback)
    retCode = lib.TA_AVGPRICE( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , &outbegidx , &outnbelement , <double *>(outreal.data)+lookback )
    _ta_check_success("TA_AVGPRICE", retCode)
    return outreal 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def AVGDEV( np.ndarray real not None , int timeperiod=-2**31 ):
    """ AVGDEV(real[, timeperiod=?])

    Average Deviation (Price Transform)

    Inputs:
        real: (any ndarray)
    Parameters:
        timeperiod: 14
    Outputs:
        real
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outreal
    real = check_array(real)
    length = real.shape[0]
    begidx = check_begidx1(length, <double*>(real.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_AVGDEV_Lookback( timeperiod )
    outreal = make_double_array(length, lookback)
    retCode = lib.TA_AVGDEV( 0 , endidx , <double *>(real.data)+begidx , timeperiod , &outbegidx , &outnbelement , <double *>(outreal.data)+lookback )
    _ta_check_success("TA_AVGDEV", retCode)
    return outreal 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def BBANDS( np.ndarray real not None , int timeperiod=-2**31 , double nbdevup=-4e37 , double nbdevdn=-4e37 , int matype=0 ):
    """ BBANDS(real[, timeperiod=?, nbdevup=?, nbdevdn=?, matype=?])

    Bollinger Bands (Overlap Studies)

    Inputs:
        real: (any ndarray)
    Parameters:
        timeperiod: 5
        nbdevup: 2.0
        nbdevdn: 2.0
        matype: 0 (Simple Moving Average)
    Outputs:
        upperband
        middleband
        lowerband
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outrealupperband
        np.ndarray outrealmiddleband
        np.ndarray outreallowerband
    real = check_array(real)
    length = real.shape[0]
    begidx = check_begidx1(length, <double*>(real.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_BBANDS_Lookback( timeperiod , nbdevup , nbdevdn , matype )
    outrealupperband = make_double_array(length, lookback)
    outrealmiddleband = make_double_array(length, lookback)
    outreallowerband = make_double_array(length, lookback)
    retCode = lib.TA_BBANDS( 0 , endidx , <double *>(real.data)+begidx , timeperiod , nbdevup , nbdevdn , matype , &outbegidx , &outnbelement , <double *>(outrealupperband.data)+lookback , <double *>(outrealmiddleband.data)+lookback , <double *>(outreallowerband.data)+lookback )
    _ta_check_success("TA_BBANDS", retCode)
    return outrealupperband , outrealmiddleband , outreallowerband 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def BETA( np.ndarray real0 not None , np.ndarray real1 not None , int timeperiod=-2**31 ):
    """ BETA(real0, real1[, timeperiod=?])

    Beta (Statistic Functions)

    Inputs:
        real0: (any ndarray)
        real1: (any ndarray)
    Parameters:
        timeperiod: 5
    Outputs:
        real
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outreal
    real0 = check_array(real0)
    real1 = check_array(real1)
    length = check_length2(real0, real1)
    begidx = check_begidx2(length, <double*>(real0.data), <double*>(real1.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_BETA_Lookback( timeperiod )
    outreal = make_double_array(length, lookback)
    retCode = lib.TA_BETA( 0 , endidx , <double *>(real0.data)+begidx , <double *>(real1.data)+begidx , timeperiod , &outbegidx , &outnbelement , <double *>(outreal.data)+lookback )
    _ta_check_success("TA_BETA", retCode)
    return outreal 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def BOP( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ):
    """ BOP(open, high, low, close)

    Balance Of Power (Momentum Indicators)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Outputs:
        real
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outreal
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_BOP_Lookback( )
    outreal = make_double_array(length, lookback)
    retCode = lib.TA_BOP( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , &outbegidx , &outnbelement , <double *>(outreal.data)+lookback )
    _ta_check_success("TA_BOP", retCode)
    return outreal 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CCI( np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , int timeperiod=-2**31 ):
    """ CCI(high, low, close[, timeperiod=?])

    Commodity Channel Index (Momentum Indicators)

    Inputs:
        prices: ['high', 'low', 'close']
    Parameters:
        timeperiod: 14
    Outputs:
        real
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outreal
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length3(high, low, close)
    begidx = check_begidx3(length, <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CCI_Lookback( timeperiod )
    outreal = make_double_array(length, lookback)
    retCode = lib.TA_CCI( 0 , endidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , timeperiod , &outbegidx , &outnbelement , <double *>(outreal.data)+lookback )
    _ta_check_success("TA_CCI", retCode)
    return outreal 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CDL2CROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ):
    """ CDL2CROWS(open, high, low, close)

    Two Crows (Pattern Recognition)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Outputs:
        integer (values are -100, 0 or 100)
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outinteger
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CDL2CROWS_Lookback( )
    outinteger = make_int_array(length, lookback)
    retCode = lib.TA_CDL2CROWS( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , &outbegidx , &outnbelement , <int *>(outinteger.data)+lookback )
    _ta_check_success("TA_CDL2CROWS", retCode)
    return outinteger 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CDL3BLACKCROWS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ):
    """ CDL3BLACKCROWS(open, high, low, close)

    Three Black Crows (Pattern Recognition)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Outputs:
        integer (values are -100, 0 or 100)
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outinteger
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CDL3BLACKCROWS_Lookback( )
    outinteger = make_int_array(length, lookback)
    retCode = lib.TA_CDL3BLACKCROWS( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , &outbegidx , &outnbelement , <int *>(outinteger.data)+lookback )
    _ta_check_success("TA_CDL3BLACKCROWS", retCode)
    return outinteger 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CDL3INSIDE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ):
    """ CDL3INSIDE(open, high, low, close)

    Three Inside Up/Down (Pattern Recognition)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Outputs:
        integer (values are -100, 0 or 100)
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outinteger
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CDL3INSIDE_Lookback( )
    outinteger = make_int_array(length, lookback)
    retCode = lib.TA_CDL3INSIDE( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , &outbegidx , &outnbelement , <int *>(outinteger.data)+lookback )
    _ta_check_success("TA_CDL3INSIDE", retCode)
    return outinteger 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CDL3LINESTRIKE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ):
    """ CDL3LINESTRIKE(open, high, low, close)

    Three-Line Strike  (Pattern Recognition)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Outputs:
        integer (values are -100, 0 or 100)
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outinteger
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CDL3LINESTRIKE_Lookback( )
    outinteger = make_int_array(length, lookback)
    retCode = lib.TA_CDL3LINESTRIKE( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , &outbegidx , &outnbelement , <int *>(outinteger.data)+lookback )
    _ta_check_success("TA_CDL3LINESTRIKE", retCode)
    return outinteger 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CDL3OUTSIDE( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ):
    """ CDL3OUTSIDE(open, high, low, close)

    Three Outside Up/Down (Pattern Recognition)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Outputs:
        integer (values are -100, 0 or 100)
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outinteger
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CDL3OUTSIDE_Lookback( )
    outinteger = make_int_array(length, lookback)
    retCode = lib.TA_CDL3OUTSIDE( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , &outbegidx , &outnbelement , <int *>(outinteger.data)+lookback )
    _ta_check_success("TA_CDL3OUTSIDE", retCode)
    return outinteger 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CDL3STARSINSOUTH( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ):
    """ CDL3STARSINSOUTH(open, high, low, close)

    Three Stars In The South (Pattern Recognition)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Outputs:
        integer (values are -100, 0 or 100)
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outinteger
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CDL3STARSINSOUTH_Lookback( )
    outinteger = make_int_array(length, lookback)
    retCode = lib.TA_CDL3STARSINSOUTH( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , &outbegidx , &outnbelement , <int *>(outinteger.data)+lookback )
    _ta_check_success("TA_CDL3STARSINSOUTH", retCode)
    return outinteger 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CDL3WHITESOLDIERS( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ):
    """ CDL3WHITESOLDIERS(open, high, low, close)

    Three Advancing White Soldiers (Pattern Recognition)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Outputs:
        integer (values are -100, 0 or 100)
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outinteger
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CDL3WHITESOLDIERS_Lookback( )
    outinteger = make_int_array(length, lookback)
    retCode = lib.TA_CDL3WHITESOLDIERS( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , &outbegidx , &outnbelement , <int *>(outinteger.data)+lookback )
    _ta_check_success("TA_CDL3WHITESOLDIERS", retCode)
    return outinteger 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CDLABANDONEDBABY( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ):
    """ CDLABANDONEDBABY(open, high, low, close[, penetration=?])

    Abandoned Baby (Pattern Recognition)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Parameters:
        penetration: 0.3
    Outputs:
        integer (values are -100, 0 or 100)
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outinteger
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CDLABANDONEDBABY_Lookback( penetration )
    outinteger = make_int_array(length, lookback)
    retCode = lib.TA_CDLABANDONEDBABY( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , penetration , &outbegidx , &outnbelement , <int *>(outinteger.data)+lookback )
    _ta_check_success("TA_CDLABANDONEDBABY", retCode)
    return outinteger 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CDLADVANCEBLOCK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ):
    """ CDLADVANCEBLOCK(open, high, low, close)

    Advance Block (Pattern Recognition)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Outputs:
        integer (values are -100, 0 or 100)
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outinteger
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CDLADVANCEBLOCK_Lookback( )
    outinteger = make_int_array(length, lookback)
    retCode = lib.TA_CDLADVANCEBLOCK( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , &outbegidx , &outnbelement , <int *>(outinteger.data)+lookback )
    _ta_check_success("TA_CDLADVANCEBLOCK", retCode)
    return outinteger 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CDLBELTHOLD( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ):
    """ CDLBELTHOLD(open, high, low, close)

    Belt-hold (Pattern Recognition)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Outputs:
        integer (values are -100, 0 or 100)
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outinteger
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CDLBELTHOLD_Lookback( )
    outinteger = make_int_array(length, lookback)
    retCode = lib.TA_CDLBELTHOLD( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , &outbegidx , &outnbelement , <int *>(outinteger.data)+lookback )
    _ta_check_success("TA_CDLBELTHOLD", retCode)
    return outinteger 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CDLBREAKAWAY( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ):
    """ CDLBREAKAWAY(open, high, low, close)

    Breakaway (Pattern Recognition)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Outputs:
        integer (values are -100, 0 or 100)
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outinteger
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CDLBREAKAWAY_Lookback( )
    outinteger = make_int_array(length, lookback)
    retCode = lib.TA_CDLBREAKAWAY( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , &outbegidx , &outnbelement , <int *>(outinteger.data)+lookback )
    _ta_check_success("TA_CDLBREAKAWAY", retCode)
    return outinteger 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CDLCLOSINGMARUBOZU( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ):
    """ CDLCLOSINGMARUBOZU(open, high, low, close)

    Closing Marubozu (Pattern Recognition)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Outputs:
        integer (values are -100, 0 or 100)
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outinteger
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CDLCLOSINGMARUBOZU_Lookback( )
    outinteger = make_int_array(length, lookback)
    retCode = lib.TA_CDLCLOSINGMARUBOZU( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , &outbegidx , &outnbelement , <int *>(outinteger.data)+lookback )
    _ta_check_success("TA_CDLCLOSINGMARUBOZU", retCode)
    return outinteger 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CDLCONCEALBABYSWALL( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ):
    """ CDLCONCEALBABYSWALL(open, high, low, close)

    Concealing Baby Swallow (Pattern Recognition)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Outputs:
        integer (values are -100, 0 or 100)
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outinteger
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CDLCONCEALBABYSWALL_Lookback( )
    outinteger = make_int_array(length, lookback)
    retCode = lib.TA_CDLCONCEALBABYSWALL( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , &outbegidx , &outnbelement , <int *>(outinteger.data)+lookback )
    _ta_check_success("TA_CDLCONCEALBABYSWALL", retCode)
    return outinteger 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CDLCOUNTERATTACK( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ):
    """ CDLCOUNTERATTACK(open, high, low, close)

    Counterattack (Pattern Recognition)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Outputs:
        integer (values are -100, 0 or 100)
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outinteger
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CDLCOUNTERATTACK_Lookback( )
    outinteger = make_int_array(length, lookback)
    retCode = lib.TA_CDLCOUNTERATTACK( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , &outbegidx , &outnbelement , <int *>(outinteger.data)+lookback )
    _ta_check_success("TA_CDLCOUNTERATTACK", retCode)
    return outinteger 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CDLDARKCLOUDCOVER( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.5 ):
    """ CDLDARKCLOUDCOVER(open, high, low, close[, penetration=?])

    Dark Cloud Cover (Pattern Recognition)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Parameters:
        penetration: 0.5
    Outputs:
        integer (values are -100, 0 or 100)
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outinteger
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CDLDARKCLOUDCOVER_Lookback( penetration )
    outinteger = make_int_array(length, lookback)
    retCode = lib.TA_CDLDARKCLOUDCOVER( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , penetration , &outbegidx , &outnbelement , <int *>(outinteger.data)+lookback )
    _ta_check_success("TA_CDLDARKCLOUDCOVER", retCode)
    return outinteger 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CDLDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ):
    """ CDLDOJI(open, high, low, close)

    Doji (Pattern Recognition)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Outputs:
        integer (values are -100, 0 or 100)
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outinteger
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CDLDOJI_Lookback( )
    outinteger = make_int_array(length, lookback)
    retCode = lib.TA_CDLDOJI( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , &outbegidx , &outnbelement , <int *>(outinteger.data)+lookback )
    _ta_check_success("TA_CDLDOJI", retCode)
    return outinteger 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CDLDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ):
    """ CDLDOJISTAR(open, high, low, close)

    Doji Star (Pattern Recognition)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Outputs:
        integer (values are -100, 0 or 100)
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outinteger
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CDLDOJISTAR_Lookback( )
    outinteger = make_int_array(length, lookback)
    retCode = lib.TA_CDLDOJISTAR( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , &outbegidx , &outnbelement , <int *>(outinteger.data)+lookback )
    _ta_check_success("TA_CDLDOJISTAR", retCode)
    return outinteger 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CDLDRAGONFLYDOJI( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ):
    """ CDLDRAGONFLYDOJI(open, high, low, close)

    Dragonfly Doji (Pattern Recognition)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Outputs:
        integer (values are -100, 0 or 100)
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outinteger
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CDLDRAGONFLYDOJI_Lookback( )
    outinteger = make_int_array(length, lookback)
    retCode = lib.TA_CDLDRAGONFLYDOJI( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , &outbegidx , &outnbelement , <int *>(outinteger.data)+lookback )
    _ta_check_success("TA_CDLDRAGONFLYDOJI", retCode)
    return outinteger 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CDLENGULFING( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None ):
    """ CDLENGULFING(open, high, low, close)

    Engulfing Pattern (Pattern Recognition)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Outputs:
        integer (values are -100, 0 or 100)
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outinteger
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CDLENGULFING_Lookback( )
    outinteger = make_int_array(length, lookback)
    retCode = lib.TA_CDLENGULFING( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , &outbegidx , &outnbelement , <int *>(outinteger.data)+lookback )
    _ta_check_success("TA_CDLENGULFING", retCode)
    return outinteger 

@wraparound(False)  # turn off relative indexing from end of lists
@boundscheck(False) # turn off bounds-checking for entire function
def CDLEVENINGDOJISTAR( np.ndarray open not None , np.ndarray high not None , np.ndarray low not None , np.ndarray close not None , double penetration=0.3 ):
    """ CDLEVENINGDOJISTAR(open, high, low, close[, penetration=?])

    Evening Doji Star (Pattern Recognition)

    Inputs:
        prices: ['open', 'high', 'low', 'close']
    Parameters:
        penetration: 0.3
    Outputs:
        integer (values are -100, 0 or 100)
    """
    cdef:
        np.npy_intp length
        int begidx, endidx, lookback
        TA_RetCode retCode
        int outbegidx
        int outnbelement
        np.ndarray outinteger
    open = check_array(open)
    high = check_array(high)
    low = check_array(low)
    close = check_array(close)
    length = check_length4(open, high, low, close)
    begidx = check_begidx4(length, <double*>(open.data), <double*>(high.data), <double*>(low.data), <double*>(close.data))
    endidx = <int>length - begidx - 1
    lookback = begidx + lib.TA_CDLEVENINGDOJISTAR_Lookback( penetration )
    outinteger = make_int_array(length, lookback)
    retCode = lib.TA_CDLEVENINGDOJISTAR( 0 , endidx , <double *>(open.data)+begidx , <double *>(high.data)+begidx , <double *>(low.data)+begidx , <double *>(close.data)+begidx , pe
Download .txt
gitextract_70ipxapd/

├── AUTHORS
├── CHANGELOG
├── CITATION.cff
├── COPYRIGHT
├── DEVELOPMENT
├── Dockerfile
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.md
├── docs/
│   ├── abstract.md
│   ├── doc_index.md
│   ├── func.md
│   ├── func_groups/
│   │   ├── cycle_indicators.md
│   │   ├── math_operators.md
│   │   ├── math_transform.md
│   │   ├── momentum_indicators.md
│   │   ├── overlap_studies.md
│   │   ├── pattern_recognition.md
│   │   ├── price_transform.md
│   │   ├── statistic_functions.md
│   │   ├── volatility_indicators.md
│   │   └── volume_indicators.md
│   ├── funcs.md
│   ├── generate_html_pages.py
│   ├── index.md
│   └── install.md
├── pyproject.toml
├── requirements.txt
├── requirements_dev.txt
├── requirements_test.txt
├── setup.py
├── talib/
│   ├── __init__.py
│   ├── _abstract.pxi
│   ├── _common.pxi
│   ├── _func.pxi
│   ├── _stream.pxi
│   ├── _ta_lib.c
│   ├── _ta_lib.pxd
│   ├── _ta_lib.pyi
│   ├── _ta_lib.pyx
│   ├── abstract.py
│   ├── abstract.pyi
│   ├── common.pxd
│   ├── deprecated.py
│   ├── py.typed
│   └── stream.py
├── tests/
│   ├── conftest.py
│   ├── test_abstract.py
│   ├── test_func.py
│   ├── test_pandas.py
│   ├── test_polars.py
│   └── test_stream.py
└── tools/
    ├── build_talib_linux.sh
    ├── build_talib_macos.sh
    ├── build_talib_windows.cmd
    ├── example.py
    ├── generate_abstract_stub.py
    ├── generate_func.py
    ├── generate_stream.py
    ├── perf_talib.py
    └── threads_talib.py
Download .txt
SYMBOL INDEX (1910 symbols across 18 files)

FILE: docs/generate_html_pages.py
  function slugify (line 92) | def slugify(string):
  function get_doc_links (line 96) | def get_doc_links():
  function generate_groups_markdown (line 121) | def generate_groups_markdown():
  function get_groups_markdown (line 129) | def get_groups_markdown():
  function get_markdown_file_paths (line 193) | def get_markdown_file_paths():
  function _get_markdown_renderer (line 208) | def _get_markdown_renderer():
  function run_convert_to_html (line 220) | def run_convert_to_html(output_dir):

FILE: setup.py
  class NumpyBuildExt (line 78) | class NumpyBuildExt(build_ext):
    method build_extensions (line 83) | def build_extensions(self):

FILE: talib/__init__.py
  function _wrapper (line 40) | def _wrapper(func):
  function get_functions (line 331) | def get_functions():
  function get_function_groups (line 340) | def get_function_groups():

FILE: talib/_ta_lib.c
  type __pyx_uintptr_t (line 467) | typedef uintptr_t  __pyx_uintptr_t;
  type PyObject (line 629) | typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *co...
  type PyObject (line 630) | typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, ...
  function CYTHON_INLINE (line 671) | static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *...
  function CYTHON_INLINE (line 675) | static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void (*c...
  type PyObject (line 685) | typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObjec...
  function CYTHON_INLINE (line 720) | static CYTHON_INLINE void *__Pyx__PyModule_GetState(PyObject *op)
  function CYTHON_INLINE (line 759) | static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, ...
  function CYTHON_INLINE (line 768) | static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObjec...
  type __Pyx_ReferenceSharing (line 876) | enum __Pyx_ReferenceSharing {
  function CYTHON_INLINE (line 918) | static CYTHON_INLINE int __Pyx_PyDict_GetItemRef(PyObject *dict, PyObjec...
  function CYTHON_INLINE (line 930) | static CYTHON_INLINE int __Pyx_PyDict_GetItemRef(PyObject *dict, PyObjec...
  type __Pyx_PySendResult (line 982) | typedef enum {
  type __Pyx_PySendResult (line 989) | typedef __Pyx_PySendResult (*__Pyx_pyiter_sendfunc)(PyObject *iter, PyOb...
  type __Pyx_PyAsyncMethodsStruct (line 1003) | typedef struct {
  function __Pyx_init_co_variable (line 1028) | static int __Pyx_init_co_variable(PyObject *inspect, const char* name, i...
  function __Pyx_init_co_variables (line 1068) | static int __Pyx_init_co_variables(void) {
  function CYTHON_INLINE (line 1172) | static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t l...
  function CYTHON_INLINE (line 1227) | static CYTHON_INLINE PyObject *__Pyx_NewRef(PyObject *obj) {
  function CYTHON_INLINE (line 1235) | static CYTHON_INLINE PyObject *__Pyx_XNewRef(PyObject *obj) {
  type Py_ssize_t (line 1286) | typedef Py_ssize_t  __Pyx_compact_pylong;
  type __Pyx_compact_upylong (line 1287) | typedef size_t  __Pyx_compact_upylong;
  type sdigit (line 1299) | typedef sdigit  __Pyx_compact_pylong;
  type digit (line 1300) | typedef digit  __Pyx_compact_upylong;
  function __Pyx_pretend_to_initialize (line 1331) | void __Pyx_pretend_to_initialize(T* ptr) {
  function CYTHON_INLINE (line 1339) | static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void...
  function CYTHON_INLINE (line 1461) | static CYTHON_INLINE int __pyx_atomic_int_cmp_exchange(__pyx_atomic_int_...
  function CYTHON_INLINE (line 1472) | static CYTHON_INLINE int __pyx_atomic_pointer_cmp_exchange(__pyx_atomic_...
  function CYTHON_INLINE (line 1494) | static CYTHON_INLINE int __pyx_atomic_int_cmp_exchange(__pyx_atomic_int_...
  function CYTHON_INLINE (line 1505) | static CYTHON_INLINE int __pyx_atomic_pointer_cmp_exchange(__pyx_atomic_...
  type npy_int8 (line 1556) | typedef npy_int8 __pyx_t_5numpy_int8_t;
  type npy_int16 (line 1558) | typedef npy_int16 __pyx_t_5numpy_int16_t;
  type npy_int32 (line 1560) | typedef npy_int32 __pyx_t_5numpy_int32_t;
  type npy_int64 (line 1562) | typedef npy_int64 __pyx_t_5numpy_int64_t;
  type npy_uint8 (line 1564) | typedef npy_uint8 __pyx_t_5numpy_uint8_t;
  type npy_uint16 (line 1566) | typedef npy_uint16 __pyx_t_5numpy_uint16_t;
  type npy_uint32 (line 1568) | typedef npy_uint32 __pyx_t_5numpy_uint32_t;
  type npy_uint64 (line 1570) | typedef npy_uint64 __pyx_t_5numpy_uint64_t;
  type npy_float32 (line 1572) | typedef npy_float32 __pyx_t_5numpy_float32_t;
  type npy_float64 (line 1574) | typedef npy_float64 __pyx_t_5numpy_float64_t;
  type npy_longlong (line 1576) | typedef npy_longlong __pyx_t_5numpy_longlong_t;
  type npy_ulonglong (line 1578) | typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t;
  type npy_intp (line 1580) | typedef npy_intp __pyx_t_5numpy_intp_t;
  type npy_uintp (line 1582) | typedef npy_uintp __pyx_t_5numpy_uintp_t;
  type npy_double (line 1584) | typedef npy_double __pyx_t_5numpy_float_t;
  type npy_double (line 1586) | typedef npy_double __pyx_t_5numpy_double_t;
  type npy_longdouble (line 1588) | typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
  type std (line 1593) | typedef ::std::complex< float > __pyx_t_float_complex;
  type __pyx_t_float_complex (line 1595) | typedef float _Complex __pyx_t_float_complex;
  type __pyx_t_float_complex (line 1598) | typedef struct { float real, imag; } __pyx_t_float_complex;
  type std (line 1605) | typedef ::std::complex< double > __pyx_t_double_complex;
  type __pyx_t_double_complex (line 1607) | typedef double _Complex __pyx_t_double_complex;
  type __pyx_t_double_complex (line 1610) | typedef struct { double real, imag; } __pyx_t_double_complex;
  type std (line 1617) | typedef ::std::complex< long double > __pyx_t_long_double_complex;
  type __pyx_t_long_double_complex (line 1619) | typedef long double _Complex __pyx_t_long_double_complex;
  type __pyx_t_long_double_complex (line 1622) | typedef struct { long double real, imag; } __pyx_t_long_double_complex;
  type __Pyx_RefNannyAPIStruct (line 1641) | typedef struct {
  type __Pyx_CachedCFunction (line 1921) | typedef struct {
  function CYTHON_INLINE (line 1932) | static CYTHON_INLINE int __Pyx_CachedCFunction_GetAndSetInitializing(__P...
  function CYTHON_INLINE (line 1943) | static CYTHON_INLINE void __Pyx_CachedCFunction_SetFinishedInitializing(...
  function CYTHON_INLINE (line 2171) | static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyO...
  function CYTHON_INLINE (line 2178) | static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
  function CYTHON_INLINE (line 2256) | static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject*...
  type __Pyx_ImportType_CheckSize_3_2_4 (line 2340) | enum __Pyx_ImportType_CheckSize_3_2_4 {
  type __Pyx_ImportType_CheckSize_3_2_4 (line 2345) | enum __Pyx_ImportType_CheckSize_3_2_4
  type __pyx_CyFunctionObject (line 2417) | typedef struct {
  type PyObject (line 2562) | typedef PyObject __Pyx_CachedCodeObjectType;
  type PyCodeObject (line 2564) | typedef PyCodeObject __Pyx_CachedCodeObjectType;
  type __Pyx_CodeObjectCacheEntry (line 2566) | typedef struct {
  type __Pyx_CodeObjectCache (line 2570) | struct __Pyx_CodeObjectCache {
  type PyObject (line 2766) | typedef PyObject *__Pyx_TypeName;
  function CYTHON_INLINE (line 2796) | static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *er...
  type __pyx_mstatetype (line 3325) | typedef struct {
  type PyModuleDef (line 3377) | struct PyModuleDef
  type PyModuleDef (line 3380) | struct PyModuleDef
  function CYTHON_SMALL_CODE (line 4573) | static CYTHON_SMALL_CODE int __pyx_m_clear(PyObject *m) {
  function CYTHON_SMALL_CODE (line 4618) | static CYTHON_SMALL_CODE int __pyx_m_traverse(PyObject *m, visitproc vis...
  function CYTHON_INLINE (line 4661) | static CYTHON_INLINE npy_intp __pyx_f_5numpy_5dtype_8itemsize_itemsize(P...
  function CYTHON_INLINE (line 4674) | static CYTHON_INLINE npy_intp __pyx_f_5numpy_5dtype_9alignment_alignment...
  function CYTHON_INLINE (line 4687) | static CYTHON_INLINE PyObject *__pyx_f_5numpy_5dtype_6fields_fields(PyAr...
  function CYTHON_INLINE (line 4708) | static CYTHON_INLINE PyObject *__pyx_f_5numpy_5dtype_5names_names(PyArra...
  function CYTHON_INLINE (line 4729) | static CYTHON_INLINE PyArray_ArrayDescr *__pyx_f_5numpy_5dtype_8subarray...
  function CYTHON_INLINE (line 4742) | static CYTHON_INLINE npy_uint64 __pyx_f_5numpy_5dtype_5flags_flags(PyArr...
  function CYTHON_INLINE (line 4755) | static CYTHON_INLINE int __pyx_f_5numpy_9broadcast_7numiter_numiter(PyAr...
  function CYTHON_INLINE (line 4768) | static CYTHON_INLINE npy_intp __pyx_f_5numpy_9broadcast_4size_size(PyArr...
  function CYTHON_INLINE (line 4781) | static CYTHON_INLINE npy_intp __pyx_f_5numpy_9broadcast_5index_index(PyA...
  function CYTHON_INLINE (line 4794) | static CYTHON_INLINE int __pyx_f_5numpy_9broadcast_2nd_nd(PyArrayMultiIt...
  function CYTHON_INLINE (line 4807) | static CYTHON_INLINE npy_intp *__pyx_f_5numpy_9broadcast_10dimensions_di...
  function CYTHON_INLINE (line 4820) | static CYTHON_INLINE void **__pyx_f_5numpy_9broadcast_5iters_iters(PyArr...
  function CYTHON_INLINE (line 4833) | static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArra...
  function CYTHON_INLINE (line 4846) | static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr...
  function CYTHON_INLINE (line 4867) | static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObjec...
  function CYTHON_INLINE (line 4880) | static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyAr...
  function CYTHON_INLINE (line 4893) | static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(...
  function CYTHON_INLINE (line 4906) | static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArray...
  function CYTHON_INLINE (line 4919) | static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObj...
  function CYTHON_INLINE (line 4932) | static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyOb...
  function CYTHON_INLINE (line 4961) | static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyOb...
  function CYTHON_INLINE (line 4990) | static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyOb...
  function CYTHON_INLINE (line 5019) | static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyOb...
  function CYTHON_INLINE (line 5048) | static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyOb...
  function CYTHON_INLINE (line 5077) | static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_D...
  function CYTHON_INLINE (line 5111) | static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *_...
  function CYTHON_INLINE (line 5130) | static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObje...
  function CYTHON_INLINE (line 5162) | static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) {
  function CYTHON_INLINE (line 5248) | static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) {
  function CYTHON_INLINE (line 5334) | static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) {
  function CYTHON_INLINE (line 5420) | static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *...
  function CYTHON_INLINE (line 5433) | static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *_...
  function CYTHON_INLINE (line 5446) | static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(Py...
  function CYTHON_INLINE (line 5459) | static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(...
  function CYTHON_INLINE (line 5472) | static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit...
  function PyObject (line 5492) | static PyObject *__pyx_f_5talib_7_ta_lib__ta_check_success(PyObject *__p...
  function PyObject (line 5689) | static PyObject *__pyx_pw_5talib_7_ta_lib_1_ta_check_success(PyObject *_...
  function PyObject (line 5783) | static PyObject *__pyx_pf_5talib_7_ta_lib__ta_check_success(CYTHON_UNUSE...
  function PyObject (line 5814) | static PyObject *__pyx_pw_5talib_7_ta_lib_3_ta_initialize(PyObject *__py...
  function PyObject (line 5827) | static PyObject *__pyx_pf_5talib_7_ta_lib_2_ta_initialize(CYTHON_UNUSED ...
  function PyObject (line 5862) | static PyObject *__pyx_pw_5talib_7_ta_lib_5_ta_shutdown(PyObject *__pyx_...
  function PyObject (line 5875) | static PyObject *__pyx_pf_5talib_7_ta_lib_4_ta_shutdown(CYTHON_UNUSED Py...
  function PyObject (line 5916) | static PyObject *__pyx_pw_5talib_7_ta_lib_7MA_Type_1__init__(PyObject *_...
  function PyObject (line 5992) | static PyObject *__pyx_pf_5talib_7_ta_lib_7MA_Type___init__(CYTHON_UNUSE...
  function PyObject (line 6107) | static PyObject *__pyx_pw_5talib_7_ta_lib_7MA_Type_3__getitem__(PyObject...
  function PyObject (line 6191) | static PyObject *__pyx_pf_5talib_7_ta_lib_7MA_Type_2__getitem__(CYTHON_U...
  function PyObject (line 6235) | static PyObject *__pyx_pw_5talib_7_ta_lib_7_ta_set_unstable_period(PyObj...
  function PyObject (line 6319) | static PyObject *__pyx_pf_5talib_7_ta_lib_6_ta_set_unstable_period(CYTHO...
  function PyObject (line 6375) | static PyObject *__pyx_pw_5talib_7_ta_lib_9_ta_get_unstable_period(PyObj...
  function PyObject (line 6451) | static PyObject *__pyx_pf_5talib_7_ta_lib_8_ta_get_unstable_period(CYTHO...
  function PyObject (line 6506) | static PyObject *__pyx_pw_5talib_7_ta_lib_11_ta_set_compatibility(PyObje...
  function PyObject (line 6582) | static PyObject *__pyx_pf_5talib_7_ta_lib_10_ta_set_compatibility(CYTHON...
  function PyObject (line 6619) | static PyObject *__pyx_pw_5talib_7_ta_lib_13_ta_get_compatibility(PyObje...
  function PyObject (line 6632) | static PyObject *__pyx_pf_5talib_7_ta_lib_12_ta_get_compatibility(CYTHON...
  function PyObject (line 6674) | static PyObject *__pyx_pw_5talib_7_ta_lib_15_ta_set_candle_settings(PyOb...
  function PyObject (line 6774) | static PyObject *__pyx_pf_5talib_7_ta_lib_14_ta_set_candle_settings(CYTH...
  function PyObject (line 6823) | static PyObject *__pyx_pw_5talib_7_ta_lib_17_ta_restore_candle_default_s...
  function PyObject (line 6899) | static PyObject *__pyx_pf_5talib_7_ta_lib_16_ta_restore_candle_default_s...
  function PyArrayObject (line 6932) | static PyArrayObject *__pyx_f_5talib_7_ta_lib_check_array(PyArrayObject ...
  function npy_intp (line 7011) | static npy_intp __pyx_f_5talib_7_ta_lib_check_length2(PyArrayObject *__p...
  function npy_intp (line 7060) | static npy_intp __pyx_f_5talib_7_ta_lib_check_length3(PyArrayObject *__p...
  function npy_intp (line 7127) | static npy_intp __pyx_f_5talib_7_ta_lib_check_length4(PyArrayObject *__p...
  function npy_int (line 7212) | static npy_int __pyx_f_5talib_7_ta_lib_check_begidx1(npy_intp __pyx_v_le...
  function npy_int (line 7248) | static npy_int __pyx_f_5talib_7_ta_lib_check_begidx2(npy_intp __pyx_v_le...
  function npy_int (line 7293) | static npy_int __pyx_f_5talib_7_ta_lib_check_begidx3(npy_intp __pyx_v_le...
  function npy_int (line 7347) | static npy_int __pyx_f_5talib_7_ta_lib_check_begidx4(npy_intp __pyx_v_le...
  function PyArrayObject (line 7410) | static PyArrayObject *__pyx_f_5talib_7_ta_lib_make_double_array(npy_intp...
  function PyArrayObject (line 7466) | static PyArrayObject *__pyx_f_5talib_7_ta_lib_make_int_array(npy_intp __...
  function PyObject (line 7532) | static PyObject *__pyx_pw_5talib_7_ta_lib_19ACCBANDS(PyObject *__pyx_self,
  function PyObject (line 7653) | static PyObject *__pyx_pf_5talib_7_ta_lib_18ACCBANDS(CYTHON_UNUSED PyObj...
  function PyObject (line 7768) | static PyObject *__pyx_pw_5talib_7_ta_lib_21ACOS(PyObject *__pyx_self,
  function PyObject (line 7854) | static PyObject *__pyx_pf_5talib_7_ta_lib_20ACOS(CYTHON_UNUSED PyObject ...
  function PyObject (line 7928) | static PyObject *__pyx_pw_5talib_7_ta_lib_23AD(PyObject *__pyx_self,
  function PyObject (line 8041) | static PyObject *__pyx_pf_5talib_7_ta_lib_22AD(CYTHON_UNUSED PyObject *_...
  function PyObject (line 8138) | static PyObject *__pyx_pw_5talib_7_ta_lib_25ADD(PyObject *__pyx_self,
  function PyObject (line 8233) | static PyObject *__pyx_pf_5talib_7_ta_lib_24ADD(CYTHON_UNUSED PyObject *...
  function PyObject (line 8316) | static PyObject *__pyx_pw_5talib_7_ta_lib_27ADOSC(PyObject *__pyx_self,
  function PyObject (line 8460) | static PyObject *__pyx_pf_5talib_7_ta_lib_26ADOSC(CYTHON_UNUSED PyObject...
  function PyObject (line 8557) | static PyObject *__pyx_pw_5talib_7_ta_lib_29ADX(PyObject *__pyx_self,
  function PyObject (line 8678) | static PyObject *__pyx_pf_5talib_7_ta_lib_28ADX(CYTHON_UNUSED PyObject *...
  function PyObject (line 8768) | static PyObject *__pyx_pw_5talib_7_ta_lib_31ADXR(PyObject *__pyx_self,
  function PyObject (line 8889) | static PyObject *__pyx_pf_5talib_7_ta_lib_30ADXR(CYTHON_UNUSED PyObject ...
  function PyObject (line 8979) | static PyObject *__pyx_pw_5talib_7_ta_lib_33APO(PyObject *__pyx_self,
  function PyObject (line 9110) | static PyObject *__pyx_pf_5talib_7_ta_lib_32APO(CYTHON_UNUSED PyObject *...
  function PyObject (line 9184) | static PyObject *__pyx_pw_5talib_7_ta_lib_35AROON(PyObject *__pyx_self,
  function PyObject (line 9296) | static PyObject *__pyx_pf_5talib_7_ta_lib_34AROON(CYTHON_UNUSED PyObject...
  function PyObject (line 9394) | static PyObject *__pyx_pw_5talib_7_ta_lib_37AROONOSC(PyObject *__pyx_self,
  function PyObject (line 9506) | static PyObject *__pyx_pf_5talib_7_ta_lib_36AROONOSC(CYTHON_UNUSED PyObj...
  function PyObject (line 9589) | static PyObject *__pyx_pw_5talib_7_ta_lib_39ASIN(PyObject *__pyx_self,
  function PyObject (line 9675) | static PyObject *__pyx_pf_5talib_7_ta_lib_38ASIN(CYTHON_UNUSED PyObject ...
  function PyObject (line 9749) | static PyObject *__pyx_pw_5talib_7_ta_lib_41ATAN(PyObject *__pyx_self,
  function PyObject (line 9835) | static PyObject *__pyx_pf_5talib_7_ta_lib_40ATAN(CYTHON_UNUSED PyObject ...
  function PyObject (line 9909) | static PyObject *__pyx_pw_5talib_7_ta_lib_43ATR(PyObject *__pyx_self,
  function PyObject (line 10030) | static PyObject *__pyx_pf_5talib_7_ta_lib_42ATR(CYTHON_UNUSED PyObject *...
  function PyObject (line 10120) | static PyObject *__pyx_pw_5talib_7_ta_lib_45AVGPRICE(PyObject *__pyx_self,
  function PyObject (line 10233) | static PyObject *__pyx_pf_5talib_7_ta_lib_44AVGPRICE(CYTHON_UNUSED PyObj...
  function PyObject (line 10330) | static PyObject *__pyx_pw_5talib_7_ta_lib_47AVGDEV(PyObject *__pyx_self,
  function PyObject (line 10433) | static PyObject *__pyx_pf_5talib_7_ta_lib_46AVGDEV(CYTHON_UNUSED PyObjec...
  function PyObject (line 10507) | static PyObject *__pyx_pw_5talib_7_ta_lib_49BBANDS(PyObject *__pyx_self,
  function PyObject (line 10652) | static PyObject *__pyx_pf_5talib_7_ta_lib_48BBANDS(CYTHON_UNUSED PyObjec...
  function PyObject (line 10751) | static PyObject *__pyx_pw_5talib_7_ta_lib_51BETA(PyObject *__pyx_self,
  function PyObject (line 10863) | static PyObject *__pyx_pf_5talib_7_ta_lib_50BETA(CYTHON_UNUSED PyObject ...
  function PyObject (line 10946) | static PyObject *__pyx_pw_5talib_7_ta_lib_53BOP(PyObject *__pyx_self,
  function PyObject (line 11059) | static PyObject *__pyx_pf_5talib_7_ta_lib_52BOP(CYTHON_UNUSED PyObject *...
  function PyObject (line 11156) | static PyObject *__pyx_pw_5talib_7_ta_lib_55CCI(PyObject *__pyx_self,
  function PyObject (line 11277) | static PyObject *__pyx_pf_5talib_7_ta_lib_54CCI(CYTHON_UNUSED PyObject *...
  function PyObject (line 11367) | static PyObject *__pyx_pw_5talib_7_ta_lib_57CDL2CROWS(PyObject *__pyx_self,
  function PyObject (line 11480) | static PyObject *__pyx_pf_5talib_7_ta_lib_56CDL2CROWS(CYTHON_UNUSED PyOb...
  function PyObject (line 11577) | static PyObject *__pyx_pw_5talib_7_ta_lib_59CDL3BLACKCROWS(PyObject *__p...
  function PyObject (line 11690) | static PyObject *__pyx_pf_5talib_7_ta_lib_58CDL3BLACKCROWS(CYTHON_UNUSED...
  function PyObject (line 11787) | static PyObject *__pyx_pw_5talib_7_ta_lib_61CDL3INSIDE(PyObject *__pyx_s...
  function PyObject (line 11900) | static PyObject *__pyx_pf_5talib_7_ta_lib_60CDL3INSIDE(CYTHON_UNUSED PyO...
  function PyObject (line 11997) | static PyObject *__pyx_pw_5talib_7_ta_lib_63CDL3LINESTRIKE(PyObject *__p...
  function PyObject (line 12110) | static PyObject *__pyx_pf_5talib_7_ta_lib_62CDL3LINESTRIKE(CYTHON_UNUSED...
  function PyObject (line 12207) | static PyObject *__pyx_pw_5talib_7_ta_lib_65CDL3OUTSIDE(PyObject *__pyx_...
  function PyObject (line 12320) | static PyObject *__pyx_pf_5talib_7_ta_lib_64CDL3OUTSIDE(CYTHON_UNUSED Py...
  function PyObject (line 12417) | static PyObject *__pyx_pw_5talib_7_ta_lib_67CDL3STARSINSOUTH(PyObject *_...
  function PyObject (line 12530) | static PyObject *__pyx_pf_5talib_7_ta_lib_66CDL3STARSINSOUTH(CYTHON_UNUS...
  function PyObject (line 12627) | static PyObject *__pyx_pw_5talib_7_ta_lib_69CDL3WHITESOLDIERS(PyObject *...
  function PyObject (line 12740) | static PyObject *__pyx_pf_5talib_7_ta_lib_68CDL3WHITESOLDIERS(CYTHON_UNU...
  function PyObject (line 12837) | static PyObject *__pyx_pw_5talib_7_ta_lib_71CDLABANDONEDBABY(PyObject *_...
  function PyObject (line 12967) | static PyObject *__pyx_pf_5talib_7_ta_lib_70CDLABANDONEDBABY(CYTHON_UNUS...
  function PyObject (line 13064) | static PyObject *__pyx_pw_5talib_7_ta_lib_73CDLADVANCEBLOCK(PyObject *__...
  function PyObject (line 13177) | static PyObject *__pyx_pf_5talib_7_ta_lib_72CDLADVANCEBLOCK(CYTHON_UNUSE...
  function PyObject (line 13274) | static PyObject *__pyx_pw_5talib_7_ta_lib_75CDLBELTHOLD(PyObject *__pyx_...
  function PyObject (line 13387) | static PyObject *__pyx_pf_5talib_7_ta_lib_74CDLBELTHOLD(CYTHON_UNUSED Py...
  function PyObject (line 13484) | static PyObject *__pyx_pw_5talib_7_ta_lib_77CDLBREAKAWAY(PyObject *__pyx...
  function PyObject (line 13597) | static PyObject *__pyx_pf_5talib_7_ta_lib_76CDLBREAKAWAY(CYTHON_UNUSED P...
  function PyObject (line 13694) | static PyObject *__pyx_pw_5talib_7_ta_lib_79CDLCLOSINGMARUBOZU(PyObject ...
  function PyObject (line 13807) | static PyObject *__pyx_pf_5talib_7_ta_lib_78CDLCLOSINGMARUBOZU(CYTHON_UN...
  function PyObject (line 13904) | static PyObject *__pyx_pw_5talib_7_ta_lib_81CDLCONCEALBABYSWALL(PyObject...
  function PyObject (line 14017) | static PyObject *__pyx_pf_5talib_7_ta_lib_80CDLCONCEALBABYSWALL(CYTHON_U...
  function PyObject (line 14114) | static PyObject *__pyx_pw_5talib_7_ta_lib_83CDLCOUNTERATTACK(PyObject *_...
  function PyObject (line 14227) | static PyObject *__pyx_pf_5talib_7_ta_lib_82CDLCOUNTERATTACK(CYTHON_UNUS...
  function PyObject (line 14324) | static PyObject *__pyx_pw_5talib_7_ta_lib_85CDLDARKCLOUDCOVER(PyObject *...
  function PyObject (line 14454) | static PyObject *__pyx_pf_5talib_7_ta_lib_84CDLDARKCLOUDCOVER(CYTHON_UNU...
  function PyObject (line 14551) | static PyObject *__pyx_pw_5talib_7_ta_lib_87CDLDOJI(PyObject *__pyx_self,
  function PyObject (line 14664) | static PyObject *__pyx_pf_5talib_7_ta_lib_86CDLDOJI(CYTHON_UNUSED PyObje...
  function PyObject (line 14761) | static PyObject *__pyx_pw_5talib_7_ta_lib_89CDLDOJISTAR(PyObject *__pyx_...
  function PyObject (line 14874) | static PyObject *__pyx_pf_5talib_7_ta_lib_88CDLDOJISTAR(CYTHON_UNUSED Py...
  function PyObject (line 14971) | static PyObject *__pyx_pw_5talib_7_ta_lib_91CDLDRAGONFLYDOJI(PyObject *_...
  function PyObject (line 15084) | static PyObject *__pyx_pf_5talib_7_ta_lib_90CDLDRAGONFLYDOJI(CYTHON_UNUS...
  function PyObject (line 15181) | static PyObject *__pyx_pw_5talib_7_ta_lib_93CDLENGULFING(PyObject *__pyx...
  function PyObject (line 15294) | static PyObject *__pyx_pf_5talib_7_ta_lib_92CDLENGULFING(CYTHON_UNUSED P...
  function PyObject (line 15391) | static PyObject *__pyx_pw_5talib_7_ta_lib_95CDLEVENINGDOJISTAR(PyObject ...
  function PyObject (line 15521) | static PyObject *__pyx_pf_5talib_7_ta_lib_94CDLEVENINGDOJISTAR(CYTHON_UN...
  function PyObject (line 15618) | static PyObject *__pyx_pw_5talib_7_ta_lib_97CDLEVENINGSTAR(PyObject *__p...
  function PyObject (line 15748) | static PyObject *__pyx_pf_5talib_7_ta_lib_96CDLEVENINGSTAR(CYTHON_UNUSED...
  function PyObject (line 15845) | static PyObject *__pyx_pw_5talib_7_ta_lib_99CDLGAPSIDESIDEWHITE(PyObject...
  function PyObject (line 15958) | static PyObject *__pyx_pf_5talib_7_ta_lib_98CDLGAPSIDESIDEWHITE(CYTHON_U...
  function PyObject (line 16055) | static PyObject *__pyx_pw_5talib_7_ta_lib_101CDLGRAVESTONEDOJI(PyObject ...
  function PyObject (line 16168) | static PyObject *__pyx_pf_5talib_7_ta_lib_100CDLGRAVESTONEDOJI(CYTHON_UN...
  function PyObject (line 16265) | static PyObject *__pyx_pw_5talib_7_ta_lib_103CDLHAMMER(PyObject *__pyx_s...
  function PyObject (line 16378) | static PyObject *__pyx_pf_5talib_7_ta_lib_102CDLHAMMER(CYTHON_UNUSED PyO...
  function PyObject (line 16475) | static PyObject *__pyx_pw_5talib_7_ta_lib_105CDLHANGINGMAN(PyObject *__p...
  function PyObject (line 16588) | static PyObject *__pyx_pf_5talib_7_ta_lib_104CDLHANGINGMAN(CYTHON_UNUSED...
  function PyObject (line 16685) | static PyObject *__pyx_pw_5talib_7_ta_lib_107CDLHARAMI(PyObject *__pyx_s...
  function PyObject (line 16798) | static PyObject *__pyx_pf_5talib_7_ta_lib_106CDLHARAMI(CYTHON_UNUSED PyO...
  function PyObject (line 16895) | static PyObject *__pyx_pw_5talib_7_ta_lib_109CDLHARAMICROSS(PyObject *__...
  function PyObject (line 17008) | static PyObject *__pyx_pf_5talib_7_ta_lib_108CDLHARAMICROSS(CYTHON_UNUSE...
  function PyObject (line 17105) | static PyObject *__pyx_pw_5talib_7_ta_lib_111CDLHIGHWAVE(PyObject *__pyx...
  function PyObject (line 17218) | static PyObject *__pyx_pf_5talib_7_ta_lib_110CDLHIGHWAVE(CYTHON_UNUSED P...
  function PyObject (line 17315) | static PyObject *__pyx_pw_5talib_7_ta_lib_113CDLHIKKAKE(PyObject *__pyx_...
  function PyObject (line 17428) | static PyObject *__pyx_pf_5talib_7_ta_lib_112CDLHIKKAKE(CYTHON_UNUSED Py...
  function PyObject (line 17525) | static PyObject *__pyx_pw_5talib_7_ta_lib_115CDLHIKKAKEMOD(PyObject *__p...
  function PyObject (line 17638) | static PyObject *__pyx_pf_5talib_7_ta_lib_114CDLHIKKAKEMOD(CYTHON_UNUSED...
  function PyObject (line 17735) | static PyObject *__pyx_pw_5talib_7_ta_lib_117CDLHOMINGPIGEON(PyObject *_...
  function PyObject (line 17848) | static PyObject *__pyx_pf_5talib_7_ta_lib_116CDLHOMINGPIGEON(CYTHON_UNUS...
  function PyObject (line 17945) | static PyObject *__pyx_pw_5talib_7_ta_lib_119CDLIDENTICAL3CROWS(PyObject...
  function PyObject (line 18058) | static PyObject *__pyx_pf_5talib_7_ta_lib_118CDLIDENTICAL3CROWS(CYTHON_U...
  function PyObject (line 18155) | static PyObject *__pyx_pw_5talib_7_ta_lib_121CDLINNECK(PyObject *__pyx_s...
  function PyObject (line 18268) | static PyObject *__pyx_pf_5talib_7_ta_lib_120CDLINNECK(CYTHON_UNUSED PyO...
  function PyObject (line 18365) | static PyObject *__pyx_pw_5talib_7_ta_lib_123CDLINVERTEDHAMMER(PyObject ...
  function PyObject (line 18478) | static PyObject *__pyx_pf_5talib_7_ta_lib_122CDLINVERTEDHAMMER(CYTHON_UN...
  function PyObject (line 18575) | static PyObject *__pyx_pw_5talib_7_ta_lib_125CDLKICKING(PyObject *__pyx_...
  function PyObject (line 18688) | static PyObject *__pyx_pf_5talib_7_ta_lib_124CDLKICKING(CYTHON_UNUSED Py...
  function PyObject (line 18785) | static PyObject *__pyx_pw_5talib_7_ta_lib_127CDLKICKINGBYLENGTH(PyObject...
  function PyObject (line 18898) | static PyObject *__pyx_pf_5talib_7_ta_lib_126CDLKICKINGBYLENGTH(CYTHON_U...
  function PyObject (line 18995) | static PyObject *__pyx_pw_5talib_7_ta_lib_129CDLLADDERBOTTOM(PyObject *_...
  function PyObject (line 19108) | static PyObject *__pyx_pf_5talib_7_ta_lib_128CDLLADDERBOTTOM(CYTHON_UNUS...
  function PyObject (line 19205) | static PyObject *__pyx_pw_5talib_7_ta_lib_131CDLLONGLEGGEDDOJI(PyObject ...
  function PyObject (line 19318) | static PyObject *__pyx_pf_5talib_7_ta_lib_130CDLLONGLEGGEDDOJI(CYTHON_UN...
  function PyObject (line 19415) | static PyObject *__pyx_pw_5talib_7_ta_lib_133CDLLONGLINE(PyObject *__pyx...
  function PyObject (line 19528) | static PyObject *__pyx_pf_5talib_7_ta_lib_132CDLLONGLINE(CYTHON_UNUSED P...
  function PyObject (line 19625) | static PyObject *__pyx_pw_5talib_7_ta_lib_135CDLMARUBOZU(PyObject *__pyx...
  function PyObject (line 19738) | static PyObject *__pyx_pf_5talib_7_ta_lib_134CDLMARUBOZU(CYTHON_UNUSED P...
  function PyObject (line 19835) | static PyObject *__pyx_pw_5talib_7_ta_lib_137CDLMATCHINGLOW(PyObject *__...
  function PyObject (line 19948) | static PyObject *__pyx_pf_5talib_7_ta_lib_136CDLMATCHINGLOW(CYTHON_UNUSE...
  function PyObject (line 20045) | static PyObject *__pyx_pw_5talib_7_ta_lib_139CDLMATHOLD(PyObject *__pyx_...
  function PyObject (line 20175) | static PyObject *__pyx_pf_5talib_7_ta_lib_138CDLMATHOLD(CYTHON_UNUSED Py...
  function PyObject (line 20272) | static PyObject *__pyx_pw_5talib_7_ta_lib_141CDLMORNINGDOJISTAR(PyObject...
  function PyObject (line 20402) | static PyObject *__pyx_pf_5talib_7_ta_lib_140CDLMORNINGDOJISTAR(CYTHON_U...
  function PyObject (line 20499) | static PyObject *__pyx_pw_5talib_7_ta_lib_143CDLMORNINGSTAR(PyObject *__...
  function PyObject (line 20629) | static PyObject *__pyx_pf_5talib_7_ta_lib_142CDLMORNINGSTAR(CYTHON_UNUSE...
  function PyObject (line 20726) | static PyObject *__pyx_pw_5talib_7_ta_lib_145CDLONNECK(PyObject *__pyx_s...
  function PyObject (line 20839) | static PyObject *__pyx_pf_5talib_7_ta_lib_144CDLONNECK(CYTHON_UNUSED PyO...
  function PyObject (line 20936) | static PyObject *__pyx_pw_5talib_7_ta_lib_147CDLPIERCING(PyObject *__pyx...
  function PyObject (line 21049) | static PyObject *__pyx_pf_5talib_7_ta_lib_146CDLPIERCING(CYTHON_UNUSED P...
  function PyObject (line 21146) | static PyObject *__pyx_pw_5talib_7_ta_lib_149CDLRICKSHAWMAN(PyObject *__...
  function PyObject (line 21259) | static PyObject *__pyx_pf_5talib_7_ta_lib_148CDLRICKSHAWMAN(CYTHON_UNUSE...
  function PyObject (line 21356) | static PyObject *__pyx_pw_5talib_7_ta_lib_151CDLRISEFALL3METHODS(PyObjec...
  function PyObject (line 21469) | static PyObject *__pyx_pf_5talib_7_ta_lib_150CDLRISEFALL3METHODS(CYTHON_...
  function PyObject (line 21566) | static PyObject *__pyx_pw_5talib_7_ta_lib_153CDLSEPARATINGLINES(PyObject...
  function PyObject (line 21679) | static PyObject *__pyx_pf_5talib_7_ta_lib_152CDLSEPARATINGLINES(CYTHON_U...
  function PyObject (line 21776) | static PyObject *__pyx_pw_5talib_7_ta_lib_155CDLSHOOTINGSTAR(PyObject *_...
  function PyObject (line 21889) | static PyObject *__pyx_pf_5talib_7_ta_lib_154CDLSHOOTINGSTAR(CYTHON_UNUS...
  function PyObject (line 21986) | static PyObject *__pyx_pw_5talib_7_ta_lib_157CDLSHORTLINE(PyObject *__py...
  function PyObject (line 22099) | static PyObject *__pyx_pf_5talib_7_ta_lib_156CDLSHORTLINE(CYTHON_UNUSED ...
  function PyObject (line 22196) | static PyObject *__pyx_pw_5talib_7_ta_lib_159CDLSPINNINGTOP(PyObject *__...
  function PyObject (line 22309) | static PyObject *__pyx_pf_5talib_7_ta_lib_158CDLSPINNINGTOP(CYTHON_UNUSE...
  function PyObject (line 22406) | static PyObject *__pyx_pw_5talib_7_ta_lib_161CDLSTALLEDPATTERN(PyObject ...
  function PyObject (line 22519) | static PyObject *__pyx_pf_5talib_7_ta_lib_160CDLSTALLEDPATTERN(CYTHON_UN...
  function PyObject (line 22616) | static PyObject *__pyx_pw_5talib_7_ta_lib_163CDLSTICKSANDWICH(PyObject *...
  function PyObject (line 22729) | static PyObject *__pyx_pf_5talib_7_ta_lib_162CDLSTICKSANDWICH(CYTHON_UNU...
  function PyObject (line 22826) | static PyObject *__pyx_pw_5talib_7_ta_lib_165CDLTAKURI(PyObject *__pyx_s...
  function PyObject (line 22939) | static PyObject *__pyx_pf_5talib_7_ta_lib_164CDLTAKURI(CYTHON_UNUSED PyO...
  function PyObject (line 23036) | static PyObject *__pyx_pw_5talib_7_ta_lib_167CDLTASUKIGAP(PyObject *__py...
  function PyObject (line 23149) | static PyObject *__pyx_pf_5talib_7_ta_lib_166CDLTASUKIGAP(CYTHON_UNUSED ...
  function PyObject (line 23246) | static PyObject *__pyx_pw_5talib_7_ta_lib_169CDLTHRUSTING(PyObject *__py...
  function PyObject (line 23359) | static PyObject *__pyx_pf_5talib_7_ta_lib_168CDLTHRUSTING(CYTHON_UNUSED ...
  function PyObject (line 23456) | static PyObject *__pyx_pw_5talib_7_ta_lib_171CDLTRISTAR(PyObject *__pyx_...
  function PyObject (line 23569) | static PyObject *__pyx_pf_5talib_7_ta_lib_170CDLTRISTAR(CYTHON_UNUSED Py...
  function PyObject (line 23666) | static PyObject *__pyx_pw_5talib_7_ta_lib_173CDLUNIQUE3RIVER(PyObject *_...
  function PyObject (line 23779) | static PyObject *__pyx_pf_5talib_7_ta_lib_172CDLUNIQUE3RIVER(CYTHON_UNUS...
  function PyObject (line 23876) | static PyObject *__pyx_pw_5talib_7_ta_lib_175CDLUPSIDEGAP2CROWS(PyObject...
  function PyObject (line 23989) | static PyObject *__pyx_pf_5talib_7_ta_lib_174CDLUPSIDEGAP2CROWS(CYTHON_U...
  function PyObject (line 24086) | static PyObject *__pyx_pw_5talib_7_ta_lib_177CDLXSIDEGAP3METHODS(PyObjec...
  function PyObject (line 24199) | static PyObject *__pyx_pf_5talib_7_ta_lib_176CDLXSIDEGAP3METHODS(CYTHON_...
  function PyObject (line 24296) | static PyObject *__pyx_pw_5talib_7_ta_lib_179CEIL(PyObject *__pyx_self,
  function PyObject (line 24382) | static PyObject *__pyx_pf_5talib_7_ta_lib_178CEIL(CYTHON_UNUSED PyObject...
  function PyObject (line 24456) | static PyObject *__pyx_pw_5talib_7_ta_lib_181CMO(PyObject *__pyx_self,
  function PyObject (line 24559) | static PyObject *__pyx_pf_5talib_7_ta_lib_180CMO(CYTHON_UNUSED PyObject ...
  function PyObject (line 24633) | static PyObject *__pyx_pw_5talib_7_ta_lib_183CORREL(PyObject *__pyx_self,
  function PyObject (line 24745) | static PyObject *__pyx_pf_5talib_7_ta_lib_182CORREL(CYTHON_UNUSED PyObje...
  function PyObject (line 24828) | static PyObject *__pyx_pw_5talib_7_ta_lib_185COS(PyObject *__pyx_self,
  function PyObject (line 24914) | static PyObject *__pyx_pf_5talib_7_ta_lib_184COS(CYTHON_UNUSED PyObject ...
  function PyObject (line 24988) | static PyObject *__pyx_pw_5talib_7_ta_lib_187COSH(PyObject *__pyx_self,
  function PyObject (line 25074) | static PyObject *__pyx_pf_5talib_7_ta_lib_186COSH(CYTHON_UNUSED PyObject...
  function PyObject (line 25148) | static PyObject *__pyx_pw_5talib_7_ta_lib_189DEMA(PyObject *__pyx_self,
  function PyObject (line 25251) | static PyObject *__pyx_pf_5talib_7_ta_lib_188DEMA(CYTHON_UNUSED PyObject...
  function PyObject (line 25325) | static PyObject *__pyx_pw_5talib_7_ta_lib_191DIV(PyObject *__pyx_self,
  function PyObject (line 25420) | static PyObject *__pyx_pf_5talib_7_ta_lib_190DIV(CYTHON_UNUSED PyObject ...
  function PyObject (line 25503) | static PyObject *__pyx_pw_5talib_7_ta_lib_193DX(PyObject *__pyx_self,
  function PyObject (line 25624) | static PyObject *__pyx_pf_5talib_7_ta_lib_192DX(CYTHON_UNUSED PyObject *...
  function PyObject (line 25714) | static PyObject *__pyx_pw_5talib_7_ta_lib_195EMA(PyObject *__pyx_self,
  function PyObject (line 25817) | static PyObject *__pyx_pf_5talib_7_ta_lib_194EMA(CYTHON_UNUSED PyObject ...
  function PyObject (line 25891) | static PyObject *__pyx_pw_5talib_7_ta_lib_197EXP(PyObject *__pyx_self,
  function PyObject (line 25977) | static PyObject *__pyx_pf_5talib_7_ta_lib_196EXP(CYTHON_UNUSED PyObject ...
  function PyObject (line 26051) | static PyObject *__pyx_pw_5talib_7_ta_lib_199FLOOR(PyObject *__pyx_self,
  function PyObject (line 26137) | static PyObject *__pyx_pf_5talib_7_ta_lib_198FLOOR(CYTHON_UNUSED PyObjec...
  function PyObject (line 26211) | static PyObject *__pyx_pw_5talib_7_ta_lib_201HT_DCPERIOD(PyObject *__pyx...
  function PyObject (line 26297) | static PyObject *__pyx_pf_5talib_7_ta_lib_200HT_DCPERIOD(CYTHON_UNUSED P...
  function PyObject (line 26371) | static PyObject *__pyx_pw_5talib_7_ta_lib_203HT_DCPHASE(PyObject *__pyx_...
  function PyObject (line 26457) | static PyObject *__pyx_pf_5talib_7_ta_lib_202HT_DCPHASE(CYTHON_UNUSED Py...
  function PyObject (line 26531) | static PyObject *__pyx_pw_5talib_7_ta_lib_205HT_PHASOR(PyObject *__pyx_s...
  function PyObject (line 26617) | static PyObject *__pyx_pf_5talib_7_ta_lib_204HT_PHASOR(CYTHON_UNUSED PyO...
  function PyObject (line 26706) | static PyObject *__pyx_pw_5talib_7_ta_lib_207HT_SINE(PyObject *__pyx_self,
  function PyObject (line 26792) | static PyObject *__pyx_pf_5talib_7_ta_lib_206HT_SINE(CYTHON_UNUSED PyObj...
  function PyObject (line 26881) | static PyObject *__pyx_pw_5talib_7_ta_lib_209HT_TRENDLINE(PyObject *__py...
  function PyObject (line 26967) | static PyObject *__pyx_pf_5talib_7_ta_lib_208HT_TRENDLINE(CYTHON_UNUSED ...
  function PyObject (line 27041) | static PyObject *__pyx_pw_5talib_7_ta_lib_211HT_TRENDMODE(PyObject *__py...
  function PyObject (line 27127) | static PyObject *__pyx_pf_5talib_7_ta_lib_210HT_TRENDMODE(CYTHON_UNUSED ...
  function PyObject (line 27201) | static PyObject *__pyx_pw_5talib_7_ta_lib_213IMI(PyObject *__pyx_self,
  function PyObject (line 27313) | static PyObject *__pyx_pf_5talib_7_ta_lib_212IMI(CYTHON_UNUSED PyObject ...
  function PyObject (line 27396) | static PyObject *__pyx_pw_5talib_7_ta_lib_215KAMA(PyObject *__pyx_self,
  function PyObject (line 27499) | static PyObject *__pyx_pf_5talib_7_ta_lib_214KAMA(CYTHON_UNUSED PyObject...
  function PyObject (line 27573) | static PyObject *__pyx_pw_5talib_7_ta_lib_217LINEARREG(PyObject *__pyx_s...
  function PyObject (line 27676) | static PyObject *__pyx_pf_5talib_7_ta_lib_216LINEARREG(CYTHON_UNUSED PyO...
  function PyObject (line 27750) | static PyObject *__pyx_pw_5talib_7_ta_lib_219LINEARREG_ANGLE(PyObject *_...
  function PyObject (line 27853) | static PyObject *__pyx_pf_5talib_7_ta_lib_218LINEARREG_ANGLE(CYTHON_UNUS...
  function PyObject (line 27927) | static PyObject *__pyx_pw_5talib_7_ta_lib_221LINEARREG_INTERCEPT(PyObjec...
  function PyObject (line 28030) | static PyObject *__pyx_pf_5talib_7_ta_lib_220LINEARREG_INTERCEPT(CYTHON_...
  function PyObject (line 28104) | static PyObject *__pyx_pw_5talib_7_ta_lib_223LINEARREG_SLOPE(PyObject *_...
  function PyObject (line 28207) | static PyObject *__pyx_pf_5talib_7_ta_lib_222LINEARREG_SLOPE(CYTHON_UNUS...
  function PyObject (line 28281) | static PyObject *__pyx_pw_5talib_7_ta_lib_225LN(PyObject *__pyx_self,
  function PyObject (line 28367) | static PyObject *__pyx_pf_5talib_7_ta_lib_224LN(CYTHON_UNUSED PyObject *...
  function PyObject (line 28441) | static PyObject *__pyx_pw_5talib_7_ta_lib_227LOG10(PyObject *__pyx_self,
  function PyObject (line 28527) | static PyObject *__pyx_pf_5talib_7_ta_lib_226LOG10(CYTHON_UNUSED PyObjec...
  function PyObject (line 28601) | static PyObject *__pyx_pw_5talib_7_ta_lib_229MA(PyObject *__pyx_self,
  function PyObject (line 28718) | static PyObject *__pyx_pf_5talib_7_ta_lib_228MA(CYTHON_UNUSED PyObject *...
  function PyObject (line 28792) | static PyObject *__pyx_pw_5talib_7_ta_lib_231MACD(PyObject *__pyx_self,
  function PyObject (line 28923) | static PyObject *__pyx_pf_5talib_7_ta_lib_230MACD(CYTHON_UNUSED PyObject...
  function PyObject (line 29022) | static PyObject *__pyx_pw_5talib_7_ta_lib_233MACDEXT(PyObject *__pyx_self,
  function PyObject (line 29195) | static PyObject *__pyx_pf_5talib_7_ta_lib_232MACDEXT(CYTHON_UNUSED PyObj...
  function PyObject (line 29294) | static PyObject *__pyx_pw_5talib_7_ta_lib_235MACDFIX(PyObject *__pyx_self,
  function PyObject (line 29397) | static PyObject *__pyx_pf_5talib_7_ta_lib_234MACDFIX(CYTHON_UNUSED PyObj...
  function PyObject (line 29496) | static PyObject *__pyx_pw_5talib_7_ta_lib_237MAMA(PyObject *__pyx_self,
  function PyObject (line 29613) | static PyObject *__pyx_pf_5talib_7_ta_lib_236MAMA(CYTHON_UNUSED PyObject...
  function PyObject (line 29702) | static PyObject *__pyx_pw_5talib_7_ta_lib_239MAVP(PyObject *__pyx_self,
  function PyObject (line 29842) | static PyObject *__pyx_pf_5talib_7_ta_lib_238MAVP(CYTHON_UNUSED PyObject...
  function PyObject (line 29925) | static PyObject *__pyx_pw_5talib_7_ta_lib_241MAX(PyObject *__pyx_self,
  function PyObject (line 30028) | static PyObject *__pyx_pf_5talib_7_ta_lib_240MAX(CYTHON_UNUSED PyObject ...
  function PyObject (line 30102) | static PyObject *__pyx_pw_5talib_7_ta_lib_243MAXINDEX(PyObject *__pyx_self,
  function PyObject (line 30205) | static PyObject *__pyx_pf_5talib_7_ta_lib_242MAXINDEX(CYTHON_UNUSED PyOb...
  function PyObject (line 30292) | static PyObject *__pyx_pw_5talib_7_ta_lib_245MEDPRICE(PyObject *__pyx_self,
  function PyObject (line 30387) | static PyObject *__pyx_pf_5talib_7_ta_lib_244MEDPRICE(CYTHON_UNUSED PyOb...
  function PyObject (line 30470) | static PyObject *__pyx_pw_5talib_7_ta_lib_247MFI(PyObject *__pyx_self,
  function PyObject (line 30600) | static PyObject *__pyx_pf_5talib_7_ta_lib_246MFI(CYTHON_UNUSED PyObject ...
  function PyObject (line 30697) | static PyObject *__pyx_pw_5talib_7_ta_lib_249MIDPOINT(PyObject *__pyx_self,
  function PyObject (line 30800) | static PyObject *__pyx_pf_5talib_7_ta_lib_248MIDPOINT(CYTHON_UNUSED PyOb...
  function PyObject (line 30874) | static PyObject *__pyx_pw_5talib_7_ta_lib_251MIDPRICE(PyObject *__pyx_self,
  function PyObject (line 30986) | static PyObject *__pyx_pf_5talib_7_ta_lib_250MIDPRICE(CYTHON_UNUSED PyOb...
  function PyObject (line 31069) | static PyObject *__pyx_pw_5talib_7_ta_lib_253MIN(PyObject *__pyx_self,
  function PyObject (line 31172) | static PyObject *__pyx_pf_5talib_7_ta_lib_252MIN(CYTHON_UNUSED PyObject ...
  function PyObject (line 31246) | static PyObject *__pyx_pw_5talib_7_ta_lib_255MININDEX(PyObject *__pyx_self,
  function PyObject (line 31349) | static PyObject *__pyx_pf_5talib_7_ta_lib_254MININDEX(CYTHON_UNUSED PyOb...
  function PyObject (line 31436) | static PyObject *__pyx_pw_5talib_7_ta_lib_257MINMAX(PyObject *__pyx_self,
  function PyObject (line 31539) | static PyObject *__pyx_pf_5talib_7_ta_lib_256MINMAX(CYTHON_UNUSED PyObje...
  function PyObject (line 31628) | static PyObject *__pyx_pw_5talib_7_ta_lib_259MINMAXINDEX(PyObject *__pyx...
  function PyObject (line 31731) | static PyObject *__pyx_pf_5talib_7_ta_lib_258MINMAXINDEX(CYTHON_UNUSED P...
  function PyObject (line 31843) | static PyObject *__pyx_pw_5talib_7_ta_lib_261MINUS_DI(PyObject *__pyx_self,
  function PyObject (line 31964) | static PyObject *__pyx_pf_5talib_7_ta_lib_260MINUS_DI(CYTHON_UNUSED PyOb...
  function PyObject (line 32054) | static PyObject *__pyx_pw_5talib_7_ta_lib_263MINUS_DM(PyObject *__pyx_self,
  function PyObject (line 32166) | static PyObject *__pyx_pf_5talib_7_ta_lib_262MINUS_DM(CYTHON_UNUSED PyOb...
  function PyObject (line 32249) | static PyObject *__pyx_pw_5talib_7_ta_lib_265MOM(PyObject *__pyx_self,
  function PyObject (line 32352) | static PyObject *__pyx_pf_5talib_7_ta_lib_264MOM(CYTHON_UNUSED PyObject ...
  function PyObject (line 32426) | static PyObject *__pyx_pw_5talib_7_ta_lib_267MULT(PyObject *__pyx_self,
  function PyObject (line 32521) | static PyObject *__pyx_pf_5talib_7_ta_lib_266MULT(CYTHON_UNUSED PyObject...
  function PyObject (line 32604) | static PyObject *__pyx_pw_5talib_7_ta_lib_269NATR(PyObject *__pyx_self,
  function PyObject (line 32725) | static PyObject *__pyx_pf_5talib_7_ta_lib_268NATR(CYTHON_UNUSED PyObject...
  function PyObject (line 32815) | static PyObject *__pyx_pw_5talib_7_ta_lib_271OBV(PyObject *__pyx_self,
  function PyObject (line 32910) | static PyObject *__pyx_pf_5talib_7_ta_lib_270OBV(CYTHON_UNUSED PyObject ...
  function PyObject (line 32993) | static PyObject *__pyx_pw_5talib_7_ta_lib_273PLUS_DI(PyObject *__pyx_self,
  function PyObject (line 33114) | static PyObject *__pyx_pf_5talib_7_ta_lib_272PLUS_DI(CYTHON_UNUSED PyObj...
  function PyObject (line 33204) | static PyObject *__pyx_pw_5talib_7_ta_lib_275PLUS_DM(PyObject *__pyx_self,
  function PyObject (line 33316) | static PyObject *__pyx_pf_5talib_7_ta_lib_274PLUS_DM(CYTHON_UNUSED PyObj...
  function PyObject (line 33399) | static PyObject *__pyx_pw_5talib_7_ta_lib_277PPO(PyObject *__pyx_self,
  function PyObject (line 33530) | static PyObject *__pyx_pf_5talib_7_ta_lib_276PPO(CYTHON_UNUSED PyObject ...
  function PyObject (line 33604) | static PyObject *__pyx_pw_5talib_7_ta_lib_279ROC(PyObject *__pyx_self,
  function PyObject (line 33707) | static PyObject *__pyx_pf_5talib_7_ta_lib_278ROC(CYTHON_UNUSED PyObject ...
  function PyObject (line 33781) | static PyObject *__pyx_pw_5talib_7_ta_lib_281ROCP(PyObject *__pyx_self,
  function PyObject (line 33884) | static PyObject *__pyx_pf_5talib_7_ta_lib_280ROCP(CYTHON_UNUSED PyObject...
  function PyObject (line 33958) | static PyObject *__pyx_pw_5talib_7_ta_lib_283ROCR(PyObject *__pyx_self,
  function PyObject (line 34061) | static PyObject *__pyx_pf_5talib_7_ta_lib_282ROCR(CYTHON_UNUSED PyObject...
  function PyObject (line 34135) | static PyObject *__pyx_pw_5talib_7_ta_lib_285ROCR100(PyObject *__pyx_self,
  function PyObject (line 34238) | static PyObject *__pyx_pf_5talib_7_ta_lib_284ROCR100(CYTHON_UNUSED PyObj...
  function PyObject (line 34312) | static PyObject *__pyx_pw_5talib_7_ta_lib_287RSI(PyObject *__pyx_self,
  function PyObject (line 34415) | static PyObject *__pyx_pf_5talib_7_ta_lib_286RSI(CYTHON_UNUSED PyObject ...
  function PyObject (line 34489) | static PyObject *__pyx_pw_5talib_7_ta_lib_289SAR(PyObject *__pyx_self,
  function PyObject (line 34615) | static PyObject *__pyx_pf_5talib_7_ta_lib_288SAR(CYTHON_UNUSED PyObject ...
  function PyObject (line 34698) | static PyObject *__pyx_pw_5talib_7_ta_lib_291SAREXT(PyObject *__pyx_self,
  function PyObject (line 34908) | static PyObject *__pyx_pf_5talib_7_ta_lib_290SAREXT(CYTHON_UNUSED PyObje...
  function PyObject (line 34991) | static PyObject *__pyx_pw_5talib_7_ta_lib_293SIN(PyObject *__pyx_self,
  function PyObject (line 35077) | static PyObject *__pyx_pf_5talib_7_ta_lib_292SIN(CYTHON_UNUSED PyObject ...
  function PyObject (line 35151) | static PyObject *__pyx_pw_5talib_7_ta_lib_295SINH(PyObject *__pyx_self,
  function PyObject (line 35237) | static PyObject *__pyx_pf_5talib_7_ta_lib_294SINH(CYTHON_UNUSED PyObject...
  function PyObject (line 35311) | static PyObject *__pyx_pw_5talib_7_ta_lib_297SMA(PyObject *__pyx_self,
  function PyObject (line 35414) | static PyObject *__pyx_pf_5talib_7_ta_lib_296SMA(CYTHON_UNUSED PyObject ...
  function PyObject (line 35488) | static PyObject *__pyx_pw_5talib_7_ta_lib_299SQRT(PyObject *__pyx_self,
  function PyObject (line 35574) | static PyObject *__pyx_pf_5talib_7_ta_lib_298SQRT(CYTHON_UNUSED PyObject...
  function PyObject (line 35648) | static PyObject *__pyx_pw_5talib_7_ta_lib_301STDDEV(PyObject *__pyx_self,
  function PyObject (line 35765) | static PyObject *__pyx_pf_5talib_7_ta_lib_300STDDEV(CYTHON_UNUSED PyObje...
  function PyObject (line 35839) | static PyObject *__pyx_pw_5talib_7_ta_lib_303STOCH(PyObject *__pyx_self,
  function PyObject (line 36016) | static PyObject *__pyx_pf_5talib_7_ta_lib_302STOCH(CYTHON_UNUSED PyObjec...
  function PyObject (line 36121) | static PyObject *__pyx_pw_5talib_7_ta_lib_305STOCHF(PyObject *__pyx_self,
  function PyObject (line 36270) | static PyObject *__pyx_pf_5talib_7_ta_lib_304STOCHF(CYTHON_UNUSED PyObje...
  function PyObject (line 36375) | static PyObject *__pyx_pw_5talib_7_ta_lib_307STOCHRSI(PyObject *__pyx_self,
  function PyObject (line 36520) | static PyObject *__pyx_pf_5talib_7_ta_lib_306STOCHRSI(CYTHON_UNUSED PyOb...
  function PyObject (line 36609) | static PyObject *__pyx_pw_5talib_7_ta_lib_309SUB(PyObject *__pyx_self,
  function PyObject (line 36704) | static PyObject *__pyx_pf_5talib_7_ta_lib_308SUB(CYTHON_UNUSED PyObject ...
  function PyObject (line 36787) | static PyObject *__pyx_pw_5talib_7_ta_lib_311SUM(PyObject *__pyx_self,
  function PyObject (line 36890) | static PyObject *__pyx_pf_5talib_7_ta_lib_310SUM(CYTHON_UNUSED PyObject ...
  function PyObject (line 36964) | static PyObject *__pyx_pw_5talib_7_ta_lib_313T3(PyObject *__pyx_self,
  function PyObject (line 37081) | static PyObject *__pyx_pf_5talib_7_ta_lib_312T3(CYTHON_UNUSED PyObject *...
  function PyObject (line 37155) | static PyObject *__pyx_pw_5talib_7_ta_lib_315TAN(PyObject *__pyx_self,
  function PyObject (line 37241) | static PyObject *__pyx_pf_5talib_7_ta_lib_314TAN(CYTHON_UNUSED PyObject ...
  function PyObject (line 37315) | static PyObject *__pyx_pw_5talib_7_ta_lib_317TANH(PyObject *__pyx_self,
  function PyObject (line 37401) | static PyObject *__pyx_pf_5talib_7_ta_lib_316TANH(CYTHON_UNUSED PyObject...
  function PyObject (line 37475) | static PyObject *__pyx_pw_5talib_7_ta_lib_319TEMA(PyObject *__pyx_self,
  function PyObject (line 37578) | static PyObject *__pyx_pf_5talib_7_ta_lib_318TEMA(CYTHON_UNUSED PyObject...
  function PyObject (line 37652) | static PyObject *__pyx_pw_5talib_7_ta_lib_321TRANGE(PyObject *__pyx_self,
  function PyObject (line 37756) | static PyObject *__pyx_pf_5talib_7_ta_lib_320TRANGE(CYTHON_UNUSED PyObje...
  function PyObject (line 37846) | static PyObject *__pyx_pw_5talib_7_ta_lib_323TRIMA(PyObject *__pyx_self,
  function PyObject (line 37949) | static PyObject *__pyx_pf_5talib_7_ta_lib_322TRIMA(CYTHON_UNUSED PyObjec...
  function PyObject (line 38023) | static PyObject *__pyx_pw_5talib_7_ta_lib_325TRIX(PyObject *__pyx_self,
  function PyObject (line 38126) | static PyObject *__pyx_pf_5talib_7_ta_lib_324TRIX(CYTHON_UNUSED PyObject...
  function PyObject (line 38200) | static PyObject *__pyx_pw_5talib_7_ta_lib_327TSF(PyObject *__pyx_self,
  function PyObject (line 38303) | static PyObject *__pyx_pf_5talib_7_ta_lib_326TSF(CYTHON_UNUSED PyObject ...
  function PyObject (line 38377) | static PyObject *__pyx_pw_5talib_7_ta_lib_329TYPPRICE(PyObject *__pyx_self,
  function PyObject (line 38481) | static PyObject *__pyx_pf_5talib_7_ta_lib_328TYPPRICE(CYTHON_UNUSED PyOb...
  function PyObject (line 38571) | static PyObject *__pyx_pw_5talib_7_ta_lib_331ULTOSC(PyObject *__pyx_self,
  function PyObject (line 38720) | static PyObject *__pyx_pf_5talib_7_ta_lib_330ULTOSC(CYTHON_UNUSED PyObje...
  function PyObject (line 38810) | static PyObject *__pyx_pw_5talib_7_ta_lib_333VAR(PyObject *__pyx_self,
  function PyObject (line 38927) | static PyObject *__pyx_pf_5talib_7_ta_lib_332VAR(CYTHON_UNUSED PyObject ...
  function PyObject (line 39001) | static PyObject *__pyx_pw_5talib_7_ta_lib_335WCLPRICE(PyObject *__pyx_self,
  function PyObject (line 39105) | static PyObject *__pyx_pf_5talib_7_ta_lib_334WCLPRICE(CYTHON_UNUSED PyOb...
  function PyObject (line 39195) | static PyObject *__pyx_pw_5talib_7_ta_lib_337WILLR(PyObject *__pyx_self,
  function PyObject (line 39316) | static PyObject *__pyx_pf_5talib_7_ta_lib_336WILLR(CYTHON_UNUSED PyObjec...
  function PyObject (line 39406) | static PyObject *__pyx_pw_5talib_7_ta_lib_339WMA(PyObject *__pyx_self,
  function PyObject (line 39509) | static PyObject *__pyx_pf_5talib_7_ta_lib_338WMA(CYTHON_UNUSED PyObject ...
  function PyObject (line 39583) | static PyObject *__pyx_pw_5talib_7_ta_lib_341str2bytes(PyObject *__pyx_s...
  function PyObject (line 39659) | static PyObject *__pyx_pf_5talib_7_ta_lib_340str2bytes(CYTHON_UNUSED PyO...
  function PyObject (line 39708) | static PyObject *__pyx_pw_5talib_7_ta_lib_343bytes2str(PyObject *__pyx_s...
  function PyObject (line 39784) | static PyObject *__pyx_pf_5talib_7_ta_lib_342bytes2str(CYTHON_UNUSED PyO...
  function PyObject (line 39834) | static PyObject *__pyx_pw_5talib_7_ta_lib_345str2bytes(PyObject *__pyx_s...
  function PyObject (line 39910) | static PyObject *__pyx_pf_5talib_7_ta_lib_344str2bytes(CYTHON_UNUSED PyO...
  function PyObject (line 39939) | static PyObject *__pyx_pw_5talib_7_ta_lib_347bytes2str(PyObject *__pyx_s...
  function PyObject (line 40015) | static PyObject *__pyx_pf_5talib_7_ta_lib_346bytes2str(CYTHON_UNUSED PyO...
  function PyObject (line 40044) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_1__init__(PyObject *...
  function PyObject (line 40152) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function___init__(CYTHON_UNUS...
  function PyObject (line 40281) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_3__local(PyObject *_...
  function PyObject (line 40357) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_2__local(CYTHON_UNUS...
  function PyObject (line 40880) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_5info(PyObject *__py...
  function PyObject (line 40956) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_4info(CYTHON_UNUSED ...
  function PyObject (line 41016) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_7function_flags(PyOb...
  function PyObject (line 41092) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_6function_flags(CYTH...
  function PyObject (line 41139) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_9output_flags(PyObje...
  function PyObject (line 41215) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_8output_flags(CYTHON...
  function PyObject (line 41278) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_11get_input_names(Py...
  function PyObject (line 41354) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_10get_input_names(CY...
  function PyObject (line 41504) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_13set_input_names(Py...
  function PyObject (line 41588) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_12set_input_names(CY...
  function PyObject (line 41781) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_15get_input_arrays(P...
  function PyObject (line 41857) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_14get_input_arrays(C...
  function PyObject (line 41965) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_17set_input_arrays(P...
  function PyObject (line 42049) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_16set_input_arrays(C...
  function PyObject (line 42297) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_19get_parameters(PyO...
  function PyObject (line 42373) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_18get_parameters(CYT...
  function PyObject (line 42525) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_21set_parameters(PyO...
  function PyObject (line 42621) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_20set_parameters(CYT...
  function PyObject (line 42861) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_23set_function_args(...
  function PyObject (line 42953) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_22set_function_args(...
  function PyObject (line 43304) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_25lookback(PyObject ...
  function PyObject (line 43380) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_24lookback(CYTHON_UN...
  function PyObject (line 43613) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_27output_names(PyObj...
  function PyObject (line 43689) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_26output_names(CYTHO...
  function PyObject (line 43767) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_29outputs(PyObject *...
  function PyObject (line 43843) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_28outputs(CYTHON_UNU...
  function PyObject (line 44233) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_31run(PyObject *__py...
  function PyObject (line 44324) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_30run(CYTHON_UNUSED ...
  function PyObject (line 44396) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_33__call__(PyObject ...
  function PyObject (line 44488) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_32__call__(CYTHON_UN...
  function PyObject (line 45344) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_35__input_price_seri...
  function PyObject (line 45420) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_34__input_price_seri...
  function PyObject (line 45624) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_37__call_function(Py...
  function PyObject (line 45700) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_36__call_function(CY...
  function PyObject (line 46148) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_39__check_opt_input_...
  function PyObject (line 46240) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_38__check_opt_input_...
  function PyObject (line 46425) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_41__get_opt_input_va...
  function PyObject (line 46509) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_40__get_opt_input_va...
  function PyObject (line 46585) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_43__repr__(PyObject ...
  function PyObject (line 46661) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_42__repr__(CYTHON_UN...
  function PyObject (line 46705) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_45__unicode__(PyObje...
  function PyObject (line 46781) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_44__unicode__(CYTHON...
  function PyObject (line 46834) | static PyObject *__pyx_pw_5talib_7_ta_lib_8Function_47__str__(PyObject *...
  function PyObject (line 46910) | static PyObject *__pyx_pf_5talib_7_ta_lib_8Function_46__str__(CYTHON_UNU...
  function PyObject (line 46977) | static PyObject *__pyx_pw_5talib_7_ta_lib_349_ta_getGroupTable(PyObject ...
  function PyObject (line 46990) | static PyObject *__pyx_pf_5talib_7_ta_lib_348_ta_getGroupTable(CYTHON_UN...
  function PyObject (line 47059) | static PyObject *__pyx_pw_5talib_7_ta_lib_351_ta_getFuncTable(PyObject *...
  function PyObject (line 47135) | static PyObject *__pyx_pf_5talib_7_ta_lib_350_ta_getFuncTable(CYTHON_UNU...
  function PyObject (line 47204) | static PyObject *__pyx_pw_5talib_7_ta_lib_353__get_flags(PyObject *__pyx...
  function PyObject (line 47298) | static PyObject *__pyx_pf_5talib_7_ta_lib_352__get_flags(CYTHON_UNUSED P...
  function PyObject (line 47554) | static PyObject *__pyx_pw_5talib_7_ta_lib_355_ta_getFuncInfo(PyObject *_...
  function PyObject (line 47630) | static PyObject *__pyx_pf_5talib_7_ta_lib_354_ta_getFuncInfo(CYTHON_UNUS...
  function PyObject (line 47854) | static PyObject *__pyx_pw_5talib_7_ta_lib_357_ta_getInputParameterInfo(P...
  function PyObject (line 47938) | static PyObject *__pyx_pf_5talib_7_ta_lib_356_ta_getInputParameterInfo(C...
  function PyObject (line 48105) | static PyObject *__pyx_pw_5talib_7_ta_lib_359_ta_getOptInputParameterInf...
  function PyObject (line 48189) | static PyObject *__pyx_pf_5talib_7_ta_lib_358_ta_getOptInputParameterInf...
  function PyObject (line 48383) | static PyObject *__pyx_pw_5talib_7_ta_lib_361_ta_getOutputParameterInfo(...
  function PyObject (line 48467) | static PyObject *__pyx_pf_5talib_7_ta_lib_360_ta_getOutputParameterInfo(...
  function PyObject (line 48650) | static PyObject *__pyx_pw_5talib_7_ta_lib_363_get_defaults_and_docs(PyOb...
  function PyObject (line 48726) | static PyObject *__pyx_pf_5talib_7_ta_lib_362_get_defaults_and_docs(CYTH...
  function TA_FuncHandle (line 49163) | static TA_FuncHandle const *__pyx_f_5talib_7_ta_lib___ta_getFuncHandle(c...
  function TA_ParamHolder (line 49192) | static TA_ParamHolder *__pyx_f_5talib_7_ta_lib___ta_paramHolderAlloc(cha...
  function __pyx_f_5talib_7_ta_lib___ta_paramHolderFree (line 49226) | static int __pyx_f_5talib_7_ta_lib___ta_paramHolderFree(TA_ParamHolder *...
  function __pyx_f_5talib_7_ta_lib___ta_setOptInputParamInteger (line 49253) | static int __pyx_f_5talib_7_ta_lib___ta_setOptInputParamInteger(TA_Param...
  function __pyx_f_5talib_7_ta_lib___ta_setOptInputParamReal (line 49283) | static int __pyx_f_5talib_7_ta_lib___ta_setOptInputParamReal(TA_ParamHol...
  function __pyx_f_5talib_7_ta_lib___ta_getLookback (line 49313) | static int __pyx_f_5talib_7_ta_lib___ta_getLookback(TA_ParamHolder *__py...
  function PyObject (line 49355) | static PyObject *__pyx_pw_5talib_7_ta_lib_365stream_ACCBANDS(PyObject *_...
  function PyObject (line 49476) | static PyObject *__pyx_pf_5talib_7_ta_lib_364stream_ACCBANDS(CYTHON_UNUS...
  function PyObject (line 49589) | static PyObject *__pyx_pw_5talib_7_ta_lib_367stream_ACOS(PyObject *__pyx...
  function PyObject (line 49675) | static PyObject *__pyx_pf_5talib_7_ta_lib_366stream_ACOS(CYTHON_UNUSED P...
  function PyObject (line 49739) | static PyObject *__pyx_pw_5talib_7_ta_lib_369stream_AD(PyObject *__pyx_s...
  function PyObject (line 49852) | static PyObject *__pyx_pf_5talib_7_ta_lib_368stream_AD(CYTHON_UNUSED PyO...
  function PyObject (line 49948) | static PyObject *__pyx_pw_5talib_7_ta_lib_371stream_ADD(PyObject *__pyx_...
  function PyObject (line 50043) | static PyObject *__pyx_pf_5talib_7_ta_lib_370stream_ADD(CYTHON_UNUSED Py...
  function PyObject (line 50119) | static PyObject *__pyx_pw_5talib_7_ta_lib_373stream_ADOSC(PyObject *__py...
  function PyObject (line 50263) | static PyObject *__pyx_pf_5talib_7_ta_lib_372stream_ADOSC(CYTHON_UNUSED ...
  function PyObject (line 50359) | static PyObject *__pyx_pw_5talib_7_ta_lib_375stream_ADX(PyObject *__pyx_...
  function PyObject (line 50480) | static PyObject *__pyx_pf_5talib_7_ta_lib_374stream_ADX(CYTHON_UNUSED Py...
  function PyObject (line 50566) | static PyObject *__pyx_pw_5talib_7_ta_lib_377stream_ADXR(PyObject *__pyx...
  function PyObject (line 50687) | static PyObject *__pyx_pf_5talib_7_ta_lib_376stream_ADXR(CYTHON_UNUSED P...
  function PyObject (line 50773) | static PyObject *__pyx_pw_5talib_7_ta_lib_379stream_APO(PyObject *__pyx_...
  function PyObject (line 50904) | static PyObject *__pyx_pf_5talib_7_ta_lib_378stream_APO(CYTHON_UNUSED Py...
  function PyObject (line 50968) | static PyObject *__pyx_pw_5talib_7_ta_lib_381stream_AROON(PyObject *__py...
  function PyObject (line 51080) | static PyObject *__pyx_pf_5talib_7_ta_lib_380stream_AROON(CYTHON_UNUSED ...
  function PyObject (line 51173) | static PyObject *__pyx_pw_5talib_7_ta_lib_383stream_AROONOSC(PyObject *_...
  function PyObject (line 51285) | static PyObject *__pyx_pf_5talib_7_ta_lib_382stream_AROONOSC(CYTHON_UNUS...
  function PyObject (line 51361) | static PyObject *__pyx_pw_5talib_7_ta_lib_385stream_ASIN(PyObject *__pyx...
  function PyObject (line 51447) | static PyObject *__pyx_pf_5talib_7_ta_lib_384stream_ASIN(CYTHON_UNUSED P...
  function PyObject (line 51511) | static PyObject *__pyx_pw_5talib_7_ta_lib_387stream_ATAN(PyObject *__pyx...
  function PyObject (line 51597) | static PyObject *__pyx_pf_5talib_7_ta_lib_386stream_ATAN(CYTHON_UNUSED P...
  function PyObject (line 51661) | static PyObject *__pyx_pw_5talib_7_ta_lib_389stream_ATR(PyObject *__pyx_...
  function PyObject (line 51782) | static PyObject *__pyx_pf_5talib_7_ta_lib_388stream_ATR(CYTHON_UNUSED Py...
  function PyObject (line 51868) | static PyObject *__pyx_pw_5talib_7_ta_lib_391stream_AVGPRICE(PyObject *_...
  function PyObject (line 51981) | static PyObject *__pyx_pf_5talib_7_ta_lib_390stream_AVGPRICE(CYTHON_UNUS...
  function PyObject (line 52077) | static PyObject *__pyx_pw_5talib_7_ta_lib_393stream_AVGDEV(PyObject *__p...
  function PyObject (line 52180) | static PyObject *__pyx_pf_5talib_7_ta_lib_392stream_AVGDEV(CYTHON_UNUSED...
  function PyObject (line 52244) | static PyObject *__pyx_pw_5talib_7_ta_lib_395stream_BBANDS(PyObject *__p...
  function PyObject (line 52389) | static PyObject *__pyx_pf_5talib_7_ta_lib_394stream_BBANDS(CYTHON_UNUSED...
  function PyObject (line 52480) | static PyObject *__pyx_pw_5talib_7_ta_lib_397stream_BETA(PyObject *__pyx...
  function PyObject (line 52592) | static PyObject *__pyx_pf_5talib_7_ta_lib_396stream_BETA(CYTHON_UNUSED P...
  function PyObject (line 52668) | static PyObject *__pyx_pw_5talib_7_ta_lib_399stream_BOP(PyObject *__pyx_...
  function PyObject (line 52781) | static PyObject *__pyx_pf_5talib_7_ta_lib_398stream_BOP(CYTHON_UNUSED Py...
  function PyObject (line 52877) | static PyObject *__pyx_pw_5talib_7_ta_lib_401stream_CCI(PyObject *__pyx_...
  function PyObject (line 52998) | static PyObject *__pyx_pf_5talib_7_ta_lib_400stream_CCI(CYTHON_UNUSED Py...
  function PyObject (line 53084) | static PyObject *__pyx_pw_5talib_7_ta_lib_403stream_CDL2CROWS(PyObject *...
  function PyObject (line 53197) | static PyObject *__pyx_pf_5talib_7_ta_lib_402stream_CDL2CROWS(CYTHON_UNU...
  function PyObject (line 53293) | static PyObject *__pyx_pw_5talib_7_ta_lib_405stream_CDL3BLACKCROWS(PyObj...
  function PyObject (line 53406) | static PyObject *__pyx_pf_5talib_7_ta_lib_404stream_CDL3BLACKCROWS(CYTHO...
  function PyObject (line 53502) | static PyObject *__pyx_pw_5talib_7_ta_lib_407stream_CDL3INSIDE(PyObject ...
  function PyObject (line 53615) | static PyObject *__pyx_pf_5talib_7_ta_lib_406stream_CDL3INSIDE(CYTHON_UN...
  function PyObject (line 53711) | static PyObject *__pyx_pw_5talib_7_ta_lib_409stream_CDL3LINESTRIKE(PyObj...
  function PyObject (line 53824) | static PyObject *__pyx_pf_5talib_7_ta_lib_408stream_CDL3LINESTRIKE(CYTHO...
  function PyObject (line 53920) | static PyObject *__pyx_pw_5talib_7_ta_lib_411stream_CDL3OUTSIDE(PyObject...
  function PyObject (line 54033) | static PyObject *__pyx_pf_5talib_7_ta_lib_410stream_CDL3OUTSIDE(CYTHON_U...
  function PyObject (line 54129) | static PyObject *__pyx_pw_5talib_7_ta_lib_413stream_CDL3STARSINSOUTH(PyO...
  function PyObject (line 54242) | static PyObject *__pyx_pf_5talib_7_ta_lib_412stream_CDL3STARSINSOUTH(CYT...
  function PyObject (line 54338) | static PyObject *__pyx_pw_5talib_7_ta_lib_415stream_CDL3WHITESOLDIERS(Py...
  function PyObject (line 54451) | static PyObject *__pyx_pf_5talib_7_ta_lib_414stream_CDL3WHITESOLDIERS(CY...
  function PyObject (line 54547) | static PyObject *__pyx_pw_5talib_7_ta_lib_417stream_CDLABANDONEDBABY(PyO...
  function PyObject (line 54677) | static PyObject *__pyx_pf_5talib_7_ta_lib_416stream_CDLABANDONEDBABY(CYT...
  function PyObject (line 54773) | static PyObject *__pyx_pw_5talib_7_ta_lib_419stream_CDLADVANCEBLOCK(PyOb...
  function PyObject (line 54886) | static PyObject *__pyx_pf_5talib_7_ta_lib_418stream_CDLADVANCEBLOCK(CYTH...
  function PyObject (line 54982) | static PyObject *__pyx_pw_5talib_7_ta_lib_421stream_CDLBELTHOLD(PyObject...
  function PyObject (line 55095) | static PyObject *__pyx_pf_5talib_7_ta_lib_420stream_CDLBELTHOLD(CYTHON_U...
  function PyObject (line 55191) | static PyObject *__pyx_pw_5talib_7_ta_lib_423stream_CDLBREAKAWAY(PyObjec...
  function PyObject (line 55304) | static PyObject *__pyx_pf_5talib_7_ta_lib_422stream_CDLBREAKAWAY(CYTHON_...
  function PyObject (line 55400) | static PyObject *__pyx_pw_5talib_7_ta_lib_425stream_CDLCLOSINGMARUBOZU(P...
  function PyObject (line 55513) | static PyObject *__pyx_pf_5talib_7_ta_lib_424stream_CDLCLOSINGMARUBOZU(C...
  function PyObject (line 55609) | static PyObject *__pyx_pw_5talib_7_ta_lib_427stream_CDLCONCEALBABYSWALL(...
  function PyObject (line 55722) | static PyObject *__pyx_pf_5talib_7_ta_lib_426stream_CDLCONCEALBABYSWALL(...
  function PyObject (line 55818) | static PyObject *__pyx_pw_5talib_7_ta_lib_429stream_CDLCOUNTERATTACK(PyO...
  function PyObject (line 55931) | static PyObject *__pyx_pf_5talib_7_ta_lib_428stream_CDLCOUNTERATTACK(CYT...
  function PyObject (line 56027) | static PyObject *__pyx_pw_5talib_7_ta_lib_431stream_CDLDARKCLOUDCOVER(Py...
  function PyObject (line 56157) | static PyObject *__pyx_pf_5talib_7_ta_lib_430stream_CDLDARKCLOUDCOVER(CY...
  function PyObject (line 56253) | static PyObject *__pyx_pw_5talib_7_ta_lib_433stream_CDLDOJI(PyObject *__...
  function PyObject (line 56366) | static PyObject *__pyx_pf_5talib_7_ta_lib_432stream_CDLDOJI(CYTHON_UNUSE...
  function PyObject (line 56462) | static PyObject *__pyx_pw_5talib_7_ta_lib_435stream_CDLDOJISTAR(PyObject...
  function PyObject (line 56575) | static PyObject *__pyx_pf_5talib_7_ta_lib_434stream_CDLDOJISTAR(CYTHON_U...
  function PyObject (line 56671) | static PyObject *__pyx_pw_5talib_7_ta_lib_437stream_CDLDRAGONFLYDOJI(PyO...
  function PyObject (line 56784) | static PyObject *__pyx_pf_5talib_7_ta_lib_436stream_CDLDRAGONFLYDOJI(CYT...
  function PyObject (line 56880) | static PyObject *__pyx_pw_5talib_7_ta_lib_439stream_CDLENGULFING(PyObjec...
  function PyObject (line 56993) | static PyObject *__pyx_pf_5talib_7_ta_lib_438stream_CDLENGULFING(CYTHON_...
  function PyObject (line 57089) | static PyObject *__pyx_pw_5talib_7_ta_lib_441stream_CDLEVENINGDOJISTAR(P...
  function PyObject (line 57219) | static PyObject *__pyx_pf_5talib_7_ta_lib_440stream_CDLEVENINGDOJISTAR(C...
  function PyObject (line 57315) | static PyObject *__pyx_pw_5talib_7_ta_lib_443stream_CDLEVENINGSTAR(PyObj...
  function PyObject (line 57445) | static PyObject *__pyx_pf_5talib_7_ta_lib_442stream_CDLEVENINGSTAR(CYTHO...
  function PyObject (line 57541) | static PyObject *__pyx_pw_5talib_7_ta_lib_445stream_CDLGAPSIDESIDEWHITE(...
  function PyObject (line 57654) | static PyObject *__pyx_pf_5talib_7_ta_lib_444stream_CDLGAPSIDESIDEWHITE(...
  function PyObject (line 57750) | static PyObject *__pyx_pw_5talib_7_ta_lib_447stream_CDLGRAVESTONEDOJI(Py...
  function PyObject (line 57863) | static PyObject *__pyx_pf_5talib_7_ta_lib_446stream_CDLGRAVESTONEDOJI(CY...
  function PyObject (line 57959) | static PyObject *__pyx_pw_5talib_7_ta_lib_449stream_CDLHAMMER(PyObject *...
  function PyObject (line 58072) | static PyObject *__pyx_pf_5talib_7_ta_lib_448stream_CDLHAMMER(CYTHON_UNU...
  function PyObject (line 58168) | static PyObject *__pyx_pw_5talib_7_ta_lib_451stream_CDLHANGINGMAN(PyObje...
  function PyObject (line 58281) | static PyObject *__pyx_pf_5talib_7_ta_lib_450stream_CDLHANGINGMAN(CYTHON...
  function PyObject (line 58377) | static PyObject *__pyx_pw_5talib_7_ta_lib_453stream_CDLHARAMI(PyObject *...
  function PyObject (line 58490) | static PyObject *__pyx_pf_5talib_7_ta_lib_452stream_CDLHARAMI(CYTHON_UNU...
  function PyObject (line 58586) | static PyObject *__pyx_pw_5talib_7_ta_lib_455stream_CDLHARAMICROSS(PyObj...
  function PyObject (line 58699) | static PyObject *__pyx_pf_5talib_7_ta_lib_454stream_CDLHARAMICROSS(CYTHO...
  function PyObject (line 58795) | static PyObject *__pyx_pw_5talib_7_ta_lib_457stream_CDLHIGHWAVE(PyObject...
  function PyObject (line 58908) | static PyObject *__pyx_pf_5talib_7_ta_lib_456stream_CDLHIGHWAVE(CYTHON_U...
  function PyObject (line 59004) | static PyObject *__pyx_pw_5talib_7_ta_lib_459stream_CDLHIKKAKE(PyObject ...
  function PyObject (line 59117) | static PyObject *__pyx_pf_5talib_7_ta_lib_458stream_CDLHIKKAKE(CYTHON_UN...
  function PyObject (line 59213) | static PyObject *__pyx_pw_5talib_7_ta_lib_461stream_CDLHIKKAKEMOD(PyObje...
  function PyObject (line 59326) | static PyObject *__pyx_pf_5talib_7_ta_lib_460stream_CDLHIKKAKEMOD(CYTHON...
  function PyObject (line 59422) | static PyObject *__pyx_pw_5talib_7_ta_lib_463stream_CDLHOMINGPIGEON(PyOb...
  function PyObject (line 59535) | static PyObject *__pyx_pf_5talib_7_ta_lib_462stream_CDLHOMINGPIGEON(CYTH...
  function PyObject (line 59631) | static PyObject *__pyx_pw_5talib_7_ta_lib_465stream_CDLIDENTICAL3CROWS(P...
  function PyObject (line 59744) | static PyObject *__pyx_pf_5talib_7_ta_lib_464stream_CDLIDENTICAL3CROWS(C...
  function PyObject (line 59840) | static PyObject *__pyx_pw_5talib_7_ta_lib_467stream_CDLINNECK(PyObject *...
  function PyObject (line 59953) | static PyObject *__pyx_pf_5talib_7_ta_lib_466stream_CDLINNECK(CYTHON_UNU...
  function PyObject (line 60049) | static PyObject *__pyx_pw_5talib_7_ta_lib_469stream_CDLINVERTEDHAMMER(Py...
  function PyObject (line 60162) | static PyObject *__pyx_pf_5talib_7_ta_lib_468stream_CDLINVERTEDHAMMER(CY...
  function PyObject (line 60258) | static PyObject *__pyx_pw_5talib_7_ta_lib_471stream_CDLKICKING(PyObject ...
  function PyObject (line 60371) | static PyObject *__pyx_pf_5talib_7_ta_lib_470stream_CDLKICKING(CYTHON_UN...
  function PyObject (line 60467) | static PyObject *__pyx_pw_5talib_7_ta_lib_473stream_CDLKICKINGBYLENGTH(P...
  function PyObject (line 60580) | static PyObject *__pyx_pf_5talib_7_ta_lib_472stream_CDLKICKINGBYLENGTH(C...
  function PyObject (line 60676) | static PyObject *__pyx_pw_5talib_7_ta_lib_475stream_CDLLADDERBOTTOM(PyOb...
  function PyObject (line 60789) | static PyObject *__pyx_pf_5talib_7_ta_lib_474stream_CDLLADDERBOTTOM(CYTH...
  function PyObject (line 60885) | static PyObject *__pyx_pw_5talib_7_ta_lib_477stream_CDLLONGLEGGEDDOJI(Py...
  function PyObject (line 60998) | static PyObject *__pyx_pf_5talib_7_ta_lib_476stream_CDLLONGLEGGEDDOJI(CY...
  function PyObject (line 61094) | static PyObject *__pyx_pw_5talib_7_ta_lib_479stream_CDLLONGLINE(PyObject...
  function PyObject (line 61207) | static PyObject *__pyx_pf_5talib_7_ta_lib_478stream_CDLLONGLINE(CYTHON_U...
  function PyObject (line 61303) | static PyObject *__pyx_pw_5talib_7_ta_lib_481stream_CDLMARUBOZU(PyObject...
  function PyObject (line 61416) | static PyObject *__pyx_pf_5talib_7_ta_lib_480stream_CDLMARUBOZU(CYTHON_U...
  function PyObject (line 61512) | static PyObject *__pyx_pw_5talib_7_ta_lib_483stream_CDLMATCHINGLOW(PyObj...
  function PyObject (line 61625) | static PyObject *__pyx_pf_5talib_7_ta_lib_482stream_CDLMATCHINGLOW(CYTHO...
  function PyObject (line 61721) | static PyObject *__pyx_pw_5talib_7_ta_lib_485stream_CDLMATHOLD(PyObject ...
  function PyObject (line 61851) | static PyObject *__pyx_pf_5talib_7_ta_lib_484stream_CDLMATHOLD(CYTHON_UN...
  function PyObject (line 61947) | static PyObject *__pyx_pw_5talib_7_ta_lib_487stream_CDLMORNINGDOJISTAR(P...
  function PyObject (line 62077) | static PyObject *__pyx_pf_5talib_7_ta_lib_486stream_CDLMORNINGDOJISTAR(C...
  function PyObject (line 62173) | static PyObject *__pyx_pw_5talib_7_ta_lib_489stream_CDLMORNINGSTAR(PyObj...
  function PyObject (line 62303) | static PyObject *__pyx_pf_5talib_7_ta_lib_488stream_CDLMORNINGSTAR(CYTHO...
  function PyObject (line 62399) | static PyObject *__pyx_pw_5talib_7_ta_lib_491stream_CDLONNECK(PyObject *...
  function PyObject (line 62512) | static PyObject *__pyx_pf_5talib_7_ta_lib_490stream_CDLONNECK(CYTHON_UNU...
  function PyObject (line 62608) | static PyObject *__pyx_pw_5talib_7_ta_lib_493stream_CDLPIERCING(PyObject...
  function PyObject (line 62721) | static PyObject *__pyx_pf_5talib_7_ta_lib_492stream_CDLPIERCING(CYTHON_U...
  function PyObject (line 62817) | static PyObject *__pyx_pw_5talib_7_ta_lib_495stream_CDLRICKSHAWMAN(PyObj...
  function PyObject (line 62930) | static PyObject *__pyx_pf_5talib_7_ta_lib_494stream_CDLRICKSHAWMAN(CYTHO...
  function PyObject (line 63026) | static PyObject *__pyx_pw_5talib_7_ta_lib_497stream_CDLRISEFALL3METHODS(...
  function PyObject (line 63139) | static PyObject *__pyx_pf_5talib_7_ta_lib_496stream_CDLRISEFALL3METHODS(...
  function PyObject (line 63235) | static PyObject *__pyx_pw_5talib_7_ta_lib_499stream_CDLSEPARATINGLINES(P...
  function PyObject (line 63348) | static PyObject *__pyx_pf_5talib_7_ta_lib_498stream_CDLSEPARATINGLINES(C...
  function PyObject (line 63444) | static PyObject *__pyx_pw_5talib_7_ta_lib_501stream_CDLSHOOTINGSTAR(PyOb...
  function PyObject (line 63557) | static PyObject *__pyx_pf_5talib_7_ta_lib_500stream_CDLSHOOTINGSTAR(CYTH...
  function PyObject (line 63653) | static PyObject *__pyx_pw_5talib_7_ta_lib_503stream_CDLSHORTLINE(PyObjec...
  function PyObject (line 63766) | static PyObject *__pyx_pf_5talib_7_ta_lib_502stream_CDLSHORTLINE(CYTHON_...
  function PyObject (line 63862) | static PyObject *__pyx_pw_5talib_7_ta_lib_505stream_CDLSPINNINGTOP(PyObj...
  function PyObject (line 63975) | static PyObject *__pyx_pf_5talib_7_ta_lib_504stream_CDLSPINNINGTOP(CYTHO...
  function PyObject (line 64071) | static PyObject *__pyx_pw_5talib_7_ta_lib_507stream_CDLSTALLEDPATTERN(Py...
  function PyObject (line 64184) | static PyObject *__pyx_pf_5talib_7_ta_lib_506stream_CDLSTALLEDPATTERN(CY...
  function PyObject (line 64280) | static PyObject *__pyx_pw_5talib_7_ta_lib_509stream_CDLSTICKSANDWICH(PyO...
  function PyObject (line 64393) | static PyObject *__pyx_pf_5talib_7_ta_lib_508stream_CDLSTICKSANDWICH(CYT...
  function PyObject (line 64489) | static PyObject *__pyx_pw_5talib_7_ta_lib_511stream_CDLTAKURI(PyObject *...
  function PyObject (line 64602) | static PyObject *__pyx_pf_5talib_7_ta_lib_510stream_CDLTAKURI(CYTHON_UNU...
  function PyObject (line 64698) | static PyObject *__pyx_pw_5talib_7_ta_lib_513stream_CDLTASUKIGAP(PyObjec...
  function PyObject (line 64811) | static PyObject *__pyx_pf_5talib_7_ta_lib_512stream_CDLTASUKIGAP(CYTHON_...
  function PyObject (line 64907) | static PyObject *__pyx_pw_5talib_7_ta_lib_515stream_CDLTHRUSTING(PyObjec...
  function PyObject (line 65020) | static PyObject *__pyx_pf_5talib_7_ta_lib_514stream_CDLTHRUSTING(CYTHON_...
  function PyObject (line 65116) | static PyObject *__pyx_pw_5talib_7_ta_lib_517stream_CDLTRISTAR(PyObject ...
  function PyObject (line 65229) | static PyObject *__pyx_pf_5talib_7_ta_lib_516stream_CDLTRISTAR(CYTHON_UN...
  function PyObject (line 65325) | static PyObject *__pyx_pw_5talib_7_ta_lib_519stream_CDLUNIQUE3RIVER(PyOb...
  function PyObject (line 65438) | static PyObject *__pyx_pf_5talib_7_ta_lib_518stream_CDLUNIQUE3RIVER(CYTH...
  function PyObject (line 65534) | static PyObject *__pyx_pw_5talib_7_ta_lib_521stream_CDLUPSIDEGAP2CROWS(P...
  function PyObject (line 65647) | static PyObject *__pyx_pf_5talib_7_ta_lib_520stream_CDLUPSIDEGAP2CROWS(C...
  function PyObject (line 65743) | static PyObject *__pyx_pw_5talib_7_ta_lib_523stream_CDLXSIDEGAP3METHODS(...
  function PyObject (line 65856) | static PyObject *__pyx_pf_5talib_7_ta_lib_522stream_CDLXSIDEGAP3METHODS(...
  function PyObject (line 65952) | static PyObject *__pyx_pw_5talib_7_ta_lib_525stream_CEIL(PyObject *__pyx...
  function PyObject (line 66038) | static PyObject *__pyx_pf_5talib_7_ta_lib_524stream_CEIL(CYTHON_UNUSED P...
  function PyObject (line 66102) | static PyObject *__pyx_pw_5talib_7_ta_lib_527stream_CMO(PyObject *__pyx_...
  function PyObject (line 66205) | static PyObject *__pyx_pf_5talib_7_ta_lib_526stream_CMO(CYTHON_UNUSED Py...
  function PyObject (line 66269) | static PyObject *__pyx_pw_5talib_7_ta_lib_529stream_CORREL(PyObject *__p...
  function PyObject (line 66381) | static PyObject *__pyx_pf_5talib_7_ta_lib_528stream_CORREL(CYTHON_UNUSED...
  function PyObject (line 66457) | static PyObject *__pyx_pw_5talib_7_ta_lib_531stream_COS(PyObject *__pyx_...
  function PyObject (line 66543) | static PyObject *__pyx_pf_5talib_7_ta_lib_530stream_COS(CYTHON_UNUSED Py...
  function PyObject (line 66607) | static PyObject *__pyx_pw_5talib_7_ta_lib_533stream_COSH(PyObject *__pyx...
  function PyObject (line 66693) | static PyObject *__pyx_pf_5talib_7_ta_lib_532stream_COSH(CYTHON_UNUSED P...
  function PyObject (line 66757) | static PyObject *__pyx_pw_5talib_7_ta_lib_535stream_DEMA(PyObject *__pyx...
  function PyObject (line 66860) | static PyObject *__pyx_pf_5talib_7_ta_lib_534stream_DEMA(CYTHON_UNUSED P...
  function PyObject (line 66924) | static PyObject *__pyx_pw_5talib_7_ta_lib_537stream_DIV(PyObject *__pyx_...
  function PyObject (line 67019) | static PyObject *__pyx_pf_5talib_7_ta_lib_536stream_DIV(CYTHON_UNUSED Py...
  function PyObject (line 67095) | static PyObject *__pyx_pw_5talib_7_ta_lib_539stream_DX(PyObject *__pyx_s...
  function PyObject (line 67216) | static PyObject *__pyx_pf_5talib_7_ta_lib_538stream_DX(CYTHON_UNUSED PyO...
  function PyObject (line 67302) | static PyObject *__pyx_pw_5talib_7_ta_lib_541stream_EMA(PyObject *__pyx_...
  function PyObject (line 67405) | static PyObject *__pyx_pf_5talib_7_ta_lib_540stream_EMA(CYTHON_UNUSED Py...
  function PyObject (line 67469) | static PyObject *__pyx_pw_5talib_7_ta_lib_543stream_EXP(PyObject *__pyx_...
  function PyObject (line 67555) | static PyObject *__pyx_pf_5talib_7_ta_lib_542stream_EXP(CYTHON_UNUSED Py...
  function PyObject (line 67619) | static PyObject *__pyx_pw_5talib_7_ta_lib_545stream_FLOOR(PyObject *__py...
  function PyObject (line 67705) | static PyObject *__pyx_pf_5talib_7_ta_lib_544stream_FLOOR(CYTHON_UNUSED ...
  function PyObject (line 67769) | static PyObject *__pyx_pw_5talib_7_ta_lib_547stream_HT_DCPERIOD(PyObject...
  function PyObject (line 67855) | static PyObject *__pyx_pf_5talib_7_ta_lib_546stream_HT_DCPERIOD(CYTHON_U...
  function PyObject (line 67919) | static PyObject *__pyx_pw_5talib_7_ta_lib_549stream_HT_DCPHASE(PyObject ...
  function PyObject (line 68005) | static PyObject *__pyx_pf_5talib_7_ta_lib_548stream_HT_DCPHASE(CYTHON_UN...
  function PyObject (line 68069) | static PyObject *__pyx_pw_5talib_7_ta_lib_551stream_HT_PHASOR(PyObject *...
  function PyObject (line 68155) | static PyObject *__pyx_pf_5talib_7_ta_lib_550stream_HT_PHASOR(CYTHON_UNU...
  function PyObject (line 68236) | static PyObject *__pyx_pw_5talib_7_ta_lib_553stream_HT_SINE(PyObject *__...
  function PyObject (line 68322) | static PyObject *__pyx_pf_5talib_7_ta_lib_552stream_HT_SINE(CYTHON_UNUSE...
  function PyObject (line 68403) | static PyObject *__pyx_pw_5talib_7_ta_lib_555stream_HT_TRENDLINE(PyObjec...
  function PyObject (line 68489) | static PyObject *__pyx_pf_5talib_7_ta_lib_554stream_HT_TRENDLINE(CYTHON_...
  function PyObject (line 68553) | static PyObject *__pyx_pw_5talib_7_ta_lib_557stream_HT_TRENDMODE(PyObjec...
  function PyObject (line 68639) | static PyObject *__pyx_pf_5talib_7_ta_lib_556stream_HT_TRENDMODE(CYTHON_...
  function PyObject (line 68703) | static PyObject *__pyx_pw_5talib_7_ta_lib_559stream_IMI(PyObject *__pyx_...
  function PyObject (line 68815) | static PyObject *__pyx_pf_5talib_7_ta_lib_558stream_IMI(CYTHON_UNUSED Py...
  function PyObject (line 68891) | static PyObject *__pyx_pw_5talib_7_ta_lib_561stream_KAMA(PyObject *__pyx...
  function PyObject (line 68994) | static PyObject *__pyx_pf_5talib_7_ta_lib_560stream_KAMA(CYTHON_UNUSED P...
  function PyObject (line 69058) | static PyObject *__pyx_pw_5talib_7_ta_lib_563stream_LINEARREG(PyObject *...
  function PyObject (line 69161) | static PyObject *__pyx_pf_5talib_7_ta_lib_562stream_LINEARREG(CYTHON_UNU...
  function PyObject (line 69225) | static PyObject *__pyx_pw_5talib_7_ta_lib_565stream_LINEARREG_ANGLE(PyOb...
  function PyObject (line 69328) | static PyObject *__pyx_pf_5talib_7_ta_lib_564stream_LINEARREG_ANGLE(CYTH...
  function PyObject (line 69392) | static PyObject *__pyx_pw_5talib_7_ta_lib_567stream_LINEARREG_INTERCEPT(...
  function PyObject (line 69495) | static PyObject *__pyx_pf_5talib_7_ta_lib_566stream_LINEARREG_INTERCEPT(...
  function PyObject (line 69559) | static PyObject *__pyx_pw_5talib_7_ta_lib_569stream_LINEARREG_SLOPE(PyOb...
  function PyObject (line 69662) | static PyObject *__pyx_pf_5talib_7_ta_lib_568stream_LINEARREG_SLOPE(CYTH...
  function PyObject (line 69726) | static PyObject *__pyx_pw_5talib_7_ta_lib_571stream_LN(PyObject *__pyx_s...
  function PyObject (line 69812) | static PyObject *__pyx_pf_5talib_7_ta_lib_570stream_LN(CYTHON_UNUSED PyO...
  function PyObject (line 69876) | static PyObject *__pyx_pw_5talib_7_ta_lib_573stream_LOG10(PyObject *__py...
  function PyObject (line 69962) | static PyObject *__pyx_pf_5talib_7_ta_lib_572stream_LOG10(CYTHON_UNUSED ...
  function PyObject (line 70026) | static PyObject *__pyx_pw_5talib_7_ta_lib_575stream_MA(PyObject *__pyx_s...
  function PyObject (line 70143) | static PyObject *__pyx_pf_5talib_7_ta_lib_574stream_MA(CYTHON_UNUSED PyO...
  function PyObject (line 70207) | static PyObject *__pyx_pw_5talib_7_ta_lib_577stream_MACD(PyObject *__pyx...
  function PyObject (line 70338) | static PyObject *__pyx_pf_5talib_7_ta_lib_576stream_MACD(CYTHON_UNUSED P...
  function PyObject (line 70429) | static PyObject *__pyx_pw_5talib_7_ta_lib_579stream_MACDEXT(PyObject *__...
  function PyObject (line 70602) | static PyObject *__pyx_pf_5talib_7_ta_lib_578stream_MACDEXT(CYTHON_UNUSE...
  function PyObject (line 70693) | static PyObject *__pyx_pw_5talib_7_ta_lib_581stream_MACDFIX(PyObject *__...
  function PyObject (line 70796) | static PyObject *__pyx_pf_5talib_7_ta_lib_580stream_MACDFIX(CYTHON_UNUSE...
  function PyObject (line 70887) | static PyObject *__pyx_pw_5talib_7_ta_lib_583stream_MAMA(PyObject *__pyx...
  function PyObject (line 71004) | static PyObject *__pyx_pf_5talib_7_ta_lib_582stream_MAMA(CYTHON_UNUSED P...
  function PyObject (line 71085) | static PyObject *__pyx_pw_5talib_7_ta_lib_585stream_MAVP(PyObject *__pyx...
  function PyObject (line 71225) | static PyObject *__pyx_pf_5talib_7_ta_lib_584stream_MAVP(CYTHON_UNUSED P...
  function PyObject (line 71301) | static PyObject *__pyx_pw_5talib_7_ta_lib_587stream_MAX(PyObject *__pyx_...
  function PyObject (line 71404) | static PyObject *__pyx_pf_5talib_7_ta_lib_586stream_MAX(CYTHON_UNUSED Py...
  function PyObject (line 71468) | static PyObject *__pyx_pw_5talib_7_ta_lib_589stream_MAXINDEX(PyObject *_...
  function PyObject (line 71571) | static PyObject *__pyx_pf_5talib_7_ta_lib_588stream_MAXINDEX(CYTHON_UNUS...
  function PyObject (line 71635) | static PyObject *__pyx_pw_5talib_7_ta_lib_591stream_MEDPRICE(PyObject *_...
  function PyObject (line 71730) | static PyObject *__pyx_pf_5talib_7_ta_lib_590stream_MEDPRICE(CYTHON_UNUS...
  function PyObject (line 71806) | static PyObject *__pyx_pw_5talib_7_ta_lib_593stream_MFI(PyObject *__pyx_...
  function PyObject (line 71936) | static PyObject *__pyx_pf_5talib_7_ta_lib_592stream_MFI(CYTHON_UNUSED Py...
  function PyObject (line 72032) | static PyObject *__pyx_pw_5talib_7_ta_lib_595stream_MIDPOINT(PyObject *_...
  function PyObject (line 72135) | static PyObject *__pyx_pf_5talib_7_ta_lib_594stream_MIDPOINT(CYTHON_UNUS...
  function PyObject (line 72199) | static PyObject *__pyx_pw_5talib_7_ta_lib_597stream_MIDPRICE(PyObject *_...
  function PyObject (line 72311) | static PyObject *__pyx_pf_5talib_7_ta_lib_596stream_MIDPRICE(CYTHON_UNUS...
  function PyObject (line 72387) | static PyObject *__pyx_pw_5talib_7_ta_lib_599stream_MIN(PyObject *__pyx_...
  function PyObject (line 72490) | static PyObject *__pyx_pf_5talib_7_ta_lib_598stream_MIN(CYTHON_UNUSED Py...
  function PyObject (line 72554) | static PyObject *__pyx_pw_5talib_7_ta_lib_601stream_MININDEX(PyObject *_...
  function PyObject (line 72657) | static PyObject *__pyx_pf_5talib_7_ta_lib_600stream_MININDEX(CYTHON_UNUS...
  function PyObject (line 72721) | static PyObject *__pyx_pw_5talib_7_ta_lib_603stream_MINMAX(PyObject *__p...
  function PyObject (line 72824) | static PyObject *__pyx_pf_5talib_7_ta_lib_602stream_MINMAX(CYTHON_UNUSED...
  function PyObject (line 72905) | static PyObject *__pyx_pw_5talib_7_ta_lib_605stream_MINMAXINDEX(PyObject...
  function PyObject (line 73008) | static PyObject *__pyx_pf_5talib_7_ta_lib_604stream_MINMAXINDEX(CYTHON_U...
  function PyObject (line 73089) | static PyObject *__pyx_pw_5talib_7_ta_lib_607stream_MINUS_DI(PyObject *_...
  function PyObject (line 73210) | static PyObject *__pyx_pf_5talib_7_ta_lib_606stream_MINUS_DI(CYTHON_UNUS...
  function PyObject (line 73296) | static PyObject *__pyx_pw_5talib_7_ta_lib_609stream_MINUS_DM(PyObject *_...
  function PyObject (line 73408) | static PyObject *__pyx_pf_5talib_7_ta_lib_608stream_MINUS_DM(CYTHON_UNUS...
  function PyObject (line 73484) | static PyObject *__pyx_pw_5talib_7_ta_lib_611stream_MOM(PyObject *__pyx_...
  function PyObject (line 73587) | static PyObject *__pyx_pf_5talib_7_ta_lib_610stream_MOM(CYTHON_UNUSED Py...
  function PyObject (line 73651) | static PyObject *__pyx_pw_5talib_7_ta_lib_613stream_MULT(PyObject *__pyx...
  function PyObject (line 73746) | static PyObject *__pyx_pf_5talib_7_ta_lib_612stream_MULT(CYTHON_UNUSED P...
  function PyObject (line 73822) | static PyObject *__pyx_pw_5talib_7_ta_lib_615stream_NATR(PyObject *__pyx...
  function PyObject (line 73943) | static PyObject *__pyx_pf_5talib_7_ta_lib_614stream_NATR(CYTHON_UNUSED P...
  function PyObject (line 74029) | static PyObject *__pyx_pw_5talib_7_ta_lib_617stream_OBV(PyObject *__pyx_...
  function PyObject (line 74124) | static PyObject *__pyx_pf_5talib_7_ta_lib_616stream_OBV(CYTHON_UNUSED Py...
  function PyObject (line 74200) | static PyObject *__pyx_pw_5talib_7_ta_lib_619stream_PLUS_DI(PyObject *__...
  function PyObject (line 74321) | static PyObject *__pyx_pf_5talib_7_ta_lib_618stream_PLUS_DI(CYTHON_UNUSE...
  function PyObject (line 74407) | static PyObject *__pyx_pw_5talib_7_ta_lib_621stream_PLUS_DM(PyObject *__...
  function PyObject (line 74519) | static PyObject *__pyx_pf_5talib_7_ta_lib_620stream_PLUS_DM(CYTHON_UNUSE...
  function PyObject (line 74595) | static PyObject *__pyx_pw_5talib_7_ta_lib_623stream_PPO(PyObject *__pyx_...
  function PyObject (line 74726) | static PyObject *__pyx_pf_5talib_7_ta_lib_622stream_PPO(CYTHON_UNUSED Py...
  function PyObject (line 74790) | static PyObject *__pyx_pw_5talib_7_ta_lib_625stream_ROC(PyObject *__pyx_...
  function PyObject (line 74893) | static PyObject *__pyx_pf_5talib_7_ta_lib_624stream_ROC(CYTHON_UNUSED Py...
  function PyObject (line 74957) | static PyObject *__pyx_pw_5talib_7_ta_lib_627stream_ROCP(PyObject *__pyx...
  function PyObject (line 75060) | static PyObject *__pyx_pf_5talib_7_ta_lib_626stream_ROCP(CYTHON_UNUSED P...
  function PyObject (line 75124) | static PyObject *__pyx_pw_5talib_7_ta_lib_629stream_ROCR(PyObject *__pyx...
  function PyObject (line 75227) | static PyObject *__pyx_pf_5talib_7_ta_lib_628stream_ROCR(CYTHON_UNUSED P...
  function PyObject (line 75291) | static PyObject *__pyx_pw_5talib_7_ta_lib_631stream_ROCR100(PyObject *__...
  function PyObject (line 75394) | static PyObject *__pyx_pf_5talib_7_ta_lib_630stream_ROCR100(CYTHON_UNUSE...
  function PyObject (line 75458) | static PyObject *__pyx_pw_5talib_7_ta_lib_633stream_RSI(PyObject *__pyx_...
  function PyObject (line 75561) | static PyObject *__pyx_pf_5talib_7_ta_lib_632stream_RSI(CYTHON_UNUSED Py...
  function PyObject (line 75625) | static PyObject *__pyx_pw_5talib_7_ta_lib_635stream_SAR(PyObject *__pyx_...
  function PyObject (line 75751) | static PyObject *__pyx_pf_5talib_7_ta_lib_634stream_SAR(CYTHON_UNUSED Py...
  function PyObject (line 75827) | static PyObject *__pyx_pw_5talib_7_ta_lib_637stream_SAREXT(PyObject *__p...
  function PyObject (line 76037) | static PyObject *__pyx_pf_5talib_7_ta_lib_636stream_SAREXT(CYTHON_UNUSED...
  function PyObject (line 76113) | static PyObject *__pyx_pw_5talib_7_ta_lib_639stream_SIN(PyObject *__pyx_...
  function PyObject (line 76199) | static PyObject *__pyx_pf_5talib_7_ta_lib_638stream_SIN(CYTHON_UNUSED Py...
  function PyObject (line 76263) | static PyObject *__pyx_pw_5talib_7_ta_lib_641stream_SINH(PyObject *__pyx...
  function PyObject (line 76349) | static PyObject *__pyx_pf_5talib_7_ta_lib_640stream_SINH(CYTHON_UNUSED P...
  function PyObject (line 76413) | static PyObject *__pyx_pw_5talib_7_ta_lib_643stream_SMA(PyObject *__pyx_...
  function PyObject (line 76516) | static PyObject *__pyx_pf_5talib_7_ta_lib_642stream_SMA(CYTHON_UNUSED Py...
  function PyObject (line 76580) | static PyObject *__pyx_pw_5talib_7_ta_lib_645stream_SQRT(PyObject *__pyx...
  function PyObject (line 76666) | static PyObject *__pyx_pf_5talib_7_ta_lib_644stream_SQRT(CYTHON_UNUSED P...
  function PyObject (line 76730) | static PyObject *__pyx_pw_5talib_7_ta_lib_647stream_STDDEV(PyObject *__p...
  function PyObject (line 76847) | static PyObject *__pyx_pf_5talib_7_ta_lib_646stream_STDDEV(CYTHON_UNUSED...
  function PyObject (line 76911) | static PyObject *__pyx_pw_5talib_7_ta_lib_649stream_STOCH(PyObject *__py...
  function PyObject (line 77088) | static PyObject *__pyx_pf_5talib_7_ta_lib_648stream_STOCH(CYTHON_UNUSED ...
  function PyObject (line 77191) | static PyObject *__pyx_pw_5talib_7_ta_lib_651stream_STOCHF(PyObject *__p...
  function PyObject (line 77340) | static PyObject *__pyx_pf_5talib_7_ta_lib_650stream_STOCHF(CYTHON_UNUSED...
  function PyObject (line 77443) | static PyObject *__pyx_pw_5talib_7_ta_lib_653stream_STOCHRSI(PyObject *_...
  function PyObject (line 77588) | static PyObject *__pyx_pf_5talib_7_ta_lib_652stream_STOCHRSI(CYTHON_UNUS...
  function PyObject (line 77669) | static PyObject *__pyx_pw_5talib_7_ta_lib_655stream_SUB(PyObject *__pyx_...
  function PyObject (line 77764) | static PyObject *__pyx_pf_5talib_7_ta_lib_654stream_SUB(CYTHON_UNUSED Py...
  function PyObject (line 77840) | static PyObject *__pyx_pw_5talib_7_ta_lib_657stream_SUM(PyObject *__pyx_...
  function PyObject (line 77943) | static PyObject *__pyx_pf_5talib_7_ta_lib_656stream_SUM(CYTHON_UNUSED Py...
  function PyObject (line 78007) | static PyObject *__pyx_pw_5talib_7_ta_lib_659stream_T3(PyObject *__pyx_s...
  function PyObject (line 78124) | static PyObject *__pyx_pf_5talib_7_ta_lib_658stream_T3(CYTHON_UNUSED PyO...
  function PyObject (line 78188) | static PyObject *__pyx_pw_5talib_7_ta_lib_661stream_TAN(PyObject *__pyx_...
  function PyObject (line 78274) | static PyObject *__pyx_pf_5talib_7_ta_lib_660stream_TAN(CYTHON_UNUSED Py...
  function PyObject (line 78338) | static PyObject *__pyx_pw_5talib_7_ta_lib_663stream_TANH(PyObject *__pyx...
  function PyObject (line 78424) | static PyObject *__pyx_pf_5talib_7_ta_lib_662stream_TANH(CYTHON_UNUSED P...
  function PyObject (line 78488) | static PyObject *__pyx_pw_5talib_7_ta_lib_665stream_TEMA(PyObject *__pyx...
  function PyObject (line 78591) | static PyObject *__pyx_pf_5talib_7_ta_lib_664stream_TEMA(CYTHON_UNUSED P...
  function PyObject (line 78655) | static PyObject *__pyx_pw_5talib_7_ta_lib_667stream_TRANGE(PyObject *__p...
  function PyObject (line 78759) | static PyObject *__pyx_pf_5talib_7_ta_lib_666stream_TRANGE(CYTHON_UNUSED...
  function PyObject (line 78845) | static PyObject *__pyx_pw_5talib_7_ta_lib_669stream_TRIMA(PyObject *__py...
  function PyObject (line 78948) | static PyObject *__pyx_pf_5talib_7_ta_lib_668stream_TRIMA(CYTHON_UNUSED ...
  function PyObject (line 79012) | static PyObject *__pyx_pw_5talib_7_ta_lib_671stream_TRIX(PyObject *__pyx...
  function PyObject (line 79115) | static PyObject *__pyx_pf_5talib_7_ta_lib_670stream_TRIX(CYTHON_UNUSED P...
  function PyObject (line 79179) | static PyObject *__pyx_pw_5talib_7_ta_lib_673stream_TSF(PyObject *__pyx_...
  function PyObject (line 79282) | static PyObject *__pyx_pf_5talib_7_ta_lib_672stream_TSF(CYTHON_UNUSED Py...
  function PyObject (line 79346) | static PyObject *__pyx_pw_5talib_7_ta_lib_675stream_TYPPRICE(PyObject *_...
  function PyObject (line 79450) | static PyObject *__pyx_pf_5talib_7_ta_lib_674stream_TYPPRICE(CYTHON_UNUS...
  function PyObject (line 79536) | static PyObject *__pyx_pw_5talib_7_ta_lib_677stream_ULTOSC(PyObject *__p...
  function PyObject (line 79685) | static PyObject *__pyx_pf_5talib_7_ta_lib_676stream_ULTOSC(CYTHON_UNUSED...
  function PyObject (line 79771) | static PyObject *__pyx_pw_5talib_7_ta_lib_679stream_VAR(PyObject *__pyx_...
  function PyObject (line 79888) | static PyObject *__pyx_pf_5talib_7_ta_lib_678stream_VAR(CYTHON_UNUSED Py...
  function PyObject (line 79952) | static PyObject *__pyx_pw_5talib_7_ta_lib_681stream_WCLPRICE(PyObject *_...
  function PyObject (line 80056) | static PyObject *__pyx_pf_5talib_7_ta_lib_680stream_WCLPRICE(CYTHON_UNUS...
  function PyObject (line 80142) | static PyObject *__pyx_pw_5talib_7_ta_lib_683stream_WILLR(PyObject *__py...
  function PyObject (line 80263) | static PyObject *__pyx_pf_5talib_7_ta_lib_682stream_WILLR(CYTHON_UNUSED ...
  function PyObject (line 80349) | static PyObject *__pyx_pw_5talib_7_ta_lib_685stream_WMA(PyObject *__pyx_...
  function PyObject (line 80452) | static PyObject *__pyx_pf_5talib_7_ta_lib_684stream_WMA(CYTHON_UNUSED Py...
  function __Pyx_modinit_global_init_code (line 80524) | static int __Pyx_modinit_global_init_code(__pyx_mstatetype *__pyx_mstate) {
  function __Pyx_modinit_variable_export_code (line 80533) | static int __Pyx_modinit_variable_export_code(__pyx_mstatetype *__pyx_ms...
  function __Pyx_modinit_function_export_code (line 80542) | static int __Pyx_modinit_function_export_code(__pyx_mstatetype *__pyx_ms...
  function __Pyx_modinit_type_init_code (line 80551) | static int __Pyx_modinit_type_init_code(__pyx_mstatetype *__pyx_mstate) {
  function __Pyx_modinit_type_import_code (line 80560) | static int __Pyx_modinit_type_import_code(__pyx_mstatetype *__pyx_mstate) {
  function __Pyx_modinit_variable_import_code (line 80727) | static int __Pyx_modinit_variable_import_code(__pyx_mstatetype *__pyx_ms...
  function __Pyx_modinit_function_import_code (line 80736) | static int __Pyx_modinit_function_import_code(__pyx_mstatetype *__pyx_ms...
  type PyModuleDef (line 80763) | struct PyModuleDef
  type PyModuleDef (line 80765) | struct PyModuleDef
  function __Pyx_PyMODINIT_FUNC (line 80808) | __Pyx_PyMODINIT_FUNC PyInit__ta_lib(void)
  function PY_INT64_T (line 80816) | static PY_INT64_T __Pyx_GetCurrentInterpreterId(void) {
  function CYTHON_SMALL_CODE (line 80843) | static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) {
  function CYTHON_SMALL_CODE (line 80872) | static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, P...
  function CYTHON_SMALL_CODE (line 80888) | static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, Py...
  function CYTHON_SMALL_CODE (line 80915) | static CYTHON_SMALL_CODE int __pyx_pymod_exec__ta_lib(PyObject *__pyx_py...
  function __Pyx_InitCachedBuiltins (line 86658) | static int __Pyx_InitCachedBuiltins(__pyx_mstatetype *__pyx_mstate) {
  function __Pyx_InitCachedConstants (line 86681) | static int __Pyx_InitCachedConstants(__pyx_mstatetype *__pyx_mstate) {
  function __Pyx_InitConstants (line 86748) | static int __Pyx_InitConstants(__pyx_mstatetype *__pyx_mstate) {
  type __Pyx_PyCode_New_function_description (line 86856) | typedef struct {
  function __Pyx_CreateCodeObjects (line 86875) | static int __Pyx_CreateCodeObjects(__pyx_mstatetype *__pyx_mstate) {
  function __Pyx_InitGlobals (line 88731) | static int __Pyx_InitGlobals(void) {
  function __Pyx_RefNannyAPIStruct (line 88785) | static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modn...
  function __Pyx_PyErr_ExceptionMatchesTuple (line 88802) | static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObjec...
  function CYTHON_INLINE (line 88813) | static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadSta...
  function CYTHON_INLINE (line 88843) | static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate,...
  function CYTHON_INLINE (line 88871) | static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, P...
  function CYTHON_INLINE (line 88902) | static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, ...
  function __Pyx_PyObject_GetAttrStr_ClearAttributeError (line 88912) | static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) {
  function CYTHON_INLINE (line 88919) | static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject...
  function PyObject (line 88940) | static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
  function _PyErr_StackItem (line 88951) | static _PyErr_StackItem *
  function CYTHON_INLINE (line 88966) | static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, Py...
  function CYTHON_INLINE (line 88998) | static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, P...
  function __Pyx_GetException (line 89035) | static int __Pyx_GetException(PyObject **type, PyObject **value, PyObjec...
  function CYTHON_INLINE (line 89136) | static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObj...
  function CYTHON_INLINE (line 89156) | static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, ...
  function PyObject (line 89176) | static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObje...
  function CYTHON_INLINE (line 89196) | static CYTHON_INLINE vectorcallfunc __Pyx_PyVectorcall_Function(PyObject...
  function CYTHON_INLINE (line 89217) | static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *fun...
  function __Pyx_Raise (line 89252) | static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, P...
  function CYTHON_INLINE (line 89360) | static CYTHON_INLINE PyObject* __Pyx_PyUnicode_Unicode(PyObject *obj) {
  function PyObject (line 89395) | static PyObject* __Pyx_PyUnicode_BuildFromAscii(Py_ssize_t ulength, cons...
  function CYTHON_INLINE (line 89458) | static CYTHON_INLINE int __Pyx_CheckUnicodeValue(int value) {
  function PyObject (line 89461) | static PyObject* __Pyx_PyUnicode_FromOrdinal_Padded(int value, Py_ssize_...
  function CYTHON_INLINE (line 89518) | static CYTHON_INLINE PyObject* __Pyx_uchar___Pyx_PyUnicode_From_TA_RetCo...
  function CYTHON_INLINE (line 89538) | static CYTHON_INLINE PyObject* __Pyx____Pyx_PyUnicode_From_TA_RetCode(TA...
  function PyObject (line 89611) | static PyObject* __Pyx_PyUnicode_Join(PyObject** values, Py_ssize_t valu...
  function CYTHON_INLINE (line 89690) | static CYTHON_INLINE PyObject *
  function CYTHON_INLINE (line 89710) | static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHO...
  function CYTHON_INLINE (line 89718) | static CYTHON_INLINE PyObject *
  function CYTHON_INLINE (line 89730) | static CYTHON_INLINE PyObject *
  function CYTHON_INLINE (line 89745) | static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2...
  function CYTHON_INLINE (line 89793) | static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* ...
  function CYTHON_INLINE (line 89868) | static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwna...
  function CYTHON_UNUSED (line 89897) | CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwn...
  function CYTHON_INLINE (line 89928) | static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func,...
  function PyObject (line 89935) | static PyObject *__Pyx_SelflessCall(PyObject *method, PyObject *args, Py...
  function PyObject (line 89944) | static PyObject *__Pyx_SelflessCall(PyObject *method, PyObject **args, P...
  function PyObject (line 89949) | static PyObject *__Pyx_SelflessCall(PyObject *method, PyObject *const *a...
  function __Pyx_TryUnpackUnboundCMethod (line 89969) | static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) {
  function CYTHON_INLINE (line 90020) | static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod0(__Pyx_CachedCFu...
  function PyObject (line 90052) | static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc...
  function CYTHON_INLINE (line 90060) | static CYTHON_INLINE PyObject* __Pyx_PyDict_Items(PyObject* d) {
  function CYTHON_INLINE (line 90065) | static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d) {
  function __Pyx_PyDict_NextRef (line 90071) | static int __Pyx_PyDict_NextRef(PyObject *p, PyObject **ppos, PyObject *...
  function __Pyx_PyDict_NextRef (line 90114) | static int __Pyx_PyDict_NextRef(PyObject *p, Py_ssize_t *ppos, PyObject ...
  function __Pyx_RaiseDoubleKeywordsError (line 90125) | static void __Pyx_RaiseDoubleKeywordsError(
  function CYTHON_INLINE (line 90135) | static CYTHON_INLINE PyObject *__Pyx_CallUnboundCMethod2(__Pyx_CachedCFu...
  function PyObject (line 90162) | static PyObject* __Pyx__CallUnboundCMethod2(__Pyx_CachedCFunction* cfunc...
  function __Pyx_ValidateDuplicatePosArgs (line 90188) | static int __Pyx_ValidateDuplicatePosArgs(
  function CYTHON_INLINE (line 90209) | static CYTHON_INLINE int __Pyx_UnicodeKeywordsEqual(PyObject *s1, PyObje...
  function __Pyx_MatchKeywordArg_str (line 90220) | static int __Pyx_MatchKeywordArg_str(
  function __Pyx_MatchKeywordArg_nostr (line 90287) | static int __Pyx_MatchKeywordArg_nostr(
  function CYTHON_INLINE (line 90326) | static CYTHON_INLINE int __Pyx_MatchKeywordArg(
  function __Pyx_ParseKeywordDict (line 90384) | static int __Pyx_ParseKeywordDict(
  function __Pyx_ParseKeywordDictToDict (line 90435) | static int __Pyx_ParseKeywordDictToDict(
  function __Pyx_ParseKeywordsTuple (line 90492) | static int __Pyx_ParseKeywordsTuple(
  function __Pyx_ParseKeywords (line 90555) | static int __Pyx_ParseKeywords(
  function __Pyx_RaiseArgtupleInvalid (line 90575) | static void __Pyx_RaiseArgtupleInvalid(
  function __Pyx__ArgTypeTest (line 90601) | static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const c...
  function CYTHON_INLINE (line 90650) | static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) {
  function CYTHON_INLINE (line 90654) | static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject ...
  function CYTHON_INLINE (line 90666) | static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj...
  function CYTHON_INLINE (line 90678) | static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name)
  function CYTHON_INLINE (line 90712) | static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObje...
  function PyObject (line 90721) | static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
  function CYTHON_INLINE (line 90728) | static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, P...
  function CYTHON_INLINE (line 90749) | static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, ...
  function CYTHON_INLINE (line 90767) | static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssi...
  function PyObject (line 90825) | static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject *index) {
  function PyObject (line 90841) | static PyObject *__Pyx_PyObject_GetItem_Slow(PyObject *obj, PyObject *ke...
  function PyObject (line 90859) | static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key) {
  function PyObject (line 90875) | static PyObject *__Pyx_PyObject_FastCallMethod(PyObject *name, PyObject ...
  function CYTHON_INLINE (line 90888) | static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
  function PyObject (line 90907) | static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
  function CYTHON_INLINE (line 90925) | static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expec...
  function CYTHON_INLINE (line 90931) | static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t inde...
  function CYTHON_INLINE (line 90938) | static CYTHON_INLINE int __Pyx_IterFinish(void) {
  function __Pyx_IternextUnpackEndCheck (line 90953) | static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t exp...
  function CYTHON_INLINE (line 90963) | static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
  function __Pyx_PyObject_GetMethod (line 90970) | static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObj...
  function PyObject (line 91061) | static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* met...
  function CYTHON_INLINE (line 91084) | static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
  function __Pyx_UnpackTupleError (line 91089) | static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) {
  function CYTHON_INLINE (line 91106) | static CYTHON_INLINE int __Pyx_unpack_tuple2(
  function CYTHON_INLINE (line 91125) | static CYTHON_INLINE int __Pyx_unpack_tuple2_exact(
  function __Pyx_unpack_tuple2_generic (line 91149) | static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalu...
  function CYTHON_INLINE (line 91180) | static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, i...
  function CYTHON_INLINE (line 91225) | static CYTHON_INLINE int __Pyx_dict_iter_next_source_is_dict(
  function CYTHON_INLINE (line 91271) | static CYTHON_INLINE int __Pyx_dict_iter_next(
  function PyObject (line 91334) | static PyObject* __Pyx_Fallback___Pyx_PyLong_AddObjC(PyObject *op1, PyOb...
  function PyObject (line 91338) | static PyObject* __Pyx_Unpacked___Pyx_PyLong_AddObjC(PyObject *op1, PyOb...
  function PyObject (line 91407) | static PyObject* __Pyx_Float___Pyx_PyLong_AddObjC(PyObject *float_val, l...
  function CYTHON_INLINE (line 91416) | static CYTHON_INLINE PyObject* __Pyx_PyLong_AddObjC(PyObject *op1, PyObj...
  function __Pyx_VectorcallBuilder_AddArg (line 91433) | static int __Pyx_VectorcallBuilder_AddArg(PyObject *key, PyObject *value...
  function CYTHON_UNUSED (line 91440) | CYTHON_UNUSED static int __Pyx_VectorcallBuilder_AddArg_Check(PyObject *...
  function __Pyx_VectorcallBuilder_AddArgStr (line 91448) | static int __Pyx_VectorcallBuilder_AddArgStr(const char *key, PyObject *...
  function CYTHON_UNUSED (line 91454) | CYTHON_UNUSED static int __Pyx_VectorcallBuilder_AddArg_Check(PyObject *...
  function CYTHON_INLINE (line 91464) | static CYTHON_INLINE PyObject* __Pyx_uchar___Pyx_PyUnicode_From_Py_ssize...
  function CYTHON_INLINE (line 91484) | static CYTHON_INLINE PyObject* __Pyx____Pyx_PyUnicode_From_Py_ssize_t(Py...
  function CYTHON_INLINE (line 91558) | static CYTHON_INLINE void __Pyx_crop_slice(Py_ssize_t* _start, Py_ssize_...
  function CYTHON_INLINE (line 91573) | static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(
  function CYTHON_INLINE (line 91579) | static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice_locked(
  function CYTHON_INLINE (line 91588) | static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice(
  function CYTHON_INLINE (line 91599) | static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatSimpleAndDecref(PyOb...
  function CYTHON_INLINE (line 91604) | static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatAndDecref(PyObject* ...
  function CYTHON_INLINE (line 91613) | static CYTHON_INLINE PyObject* __Pyx_PyDict_Keys(PyObject* d) {
  function __Pyx_PyBuiltin_Invalid (line 91618) | static void __Pyx_PyBuiltin_Invalid(PyObject *obj, const char *type_name...
  function CYTHON_INLINE (line 91635) | static CYTHON_INLINE int __Pyx_PyInt_FromNumber(PyObject **number_var, c...
  function CYTHON_INLINE (line 91658) | static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj,
  function __Pyx_SetItemInt_Generic (line 91720) | static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *...
  function CYTHON_INLINE (line 91727) | static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i...
  function PyTypeObject (line 91785) | static PyTypeObject *__Pyx_ImportType_3_2_4(PyObject *module, const char...
  function CYTHON_INLINE (line 91866) | static CYTHON_INLINE PyObject *__Pyx_PyDict_SetDefault(PyObject *d, PyOb...
  function Py_ssize_t (line 91885) | static Py_ssize_t __Pyx_GetTypeDictOffset(void) {
  function PyObject (line 91906) | static PyObject *__Pyx_GetTypeDict(PyTypeObject *tp) {
  function __Pyx__SetItemOnTypeDict (line 91920) | static int __Pyx__SetItemOnTypeDict(PyTypeObject *tp, PyObject *k, PyObj...
  function __Pyx_fix_up_extension_type_from_spec (line 91942) | static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTy...
  function PyObject (line 92044) | static PyObject *__Pyx_PyImport_AddModuleObjectRef(PyObject *name) {
  function PyObject (line 92070) | static PyObject *__Pyx_PyImport_AddModuleRef(const char *name) {
  function PyObject (line 92080) | static PyObject *__Pyx_PyImport_AddModuleRef(const char *name) {
  function PyObject (line 92088) | static PyObject *__Pyx_FetchSharedCythonABIModule(void) {
  function PyObject (line 92094) | static PyObject* __Pyx_PyType_FromMetaclass(PyTypeObject *metaclass, PyO...
  function __Pyx_VerifyCachedType (line 92111) | static int __Pyx_VerifyCachedType(PyObject *cached_type,
  function PyTypeObject (line 92142) | static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyTypeObject *metacla...
  function PyObject (line 92198) | static PyObject* __pyx_CommonTypesMetaclass_get_module(CYTHON_UNUSED PyO...
  function PyObject (line 92202) | static PyObject* __pyx_CommonTypesMetaclass_call(CYTHON_UNUSED PyObject ...
  function __pyx_CommonTypesMetaclass_setattr (line 92206) | static int __pyx_CommonTypesMetaclass_setattr(CYTHON_UNUSED PyObject *se...
  function __pyx_CommonTypesMetaclass_init (line 92233) | static int __pyx_CommonTypesMetaclass_init(PyObject *module) {
  function __Pyx_call_type_traverse (line 92250) | static int __Pyx_call_type_traverse(PyObject *o, int always_call, visitp...
  function PyObject (line 92268) | static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyOb...
  function PyObject (line 92284) | static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyOb...
  function PyObject (line 92294) | static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __py...
  function CYTHON_INLINE (line 92360) | static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject ...
  function CYTHON_INLINE (line 92384) | static CYTHON_INLINE int __Pyx__IsSameCyOrCFunctionNoMethod(PyObject *fu...
  function CYTHON_INLINE (line 92392) | static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void...
  function CYTHON_INLINE (line 92407) | static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void...
  function CYTHON_INLINE (line 92414) | static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunction...
  function PyObject (line 92425) | static PyObject *
  function PyObject (line 92446) | static PyObject *
  function __Pyx_CyFunction_set_doc (line 92455) | static int
  function PyObject (line 92468) | static PyObject *
  function PyObject (line 92483) | static PyObject *
  function __Pyx_CyFunction_set_name (line 92493) | static int
  function PyObject (line 92508) | static PyObject *
  function __Pyx_CyFunction_set_qualname (line 92519) | static int
  function PyObject (line 92535) | static PyObject *
  function PyObject (line 92548) | static PyObject *
  function PyObject (line 92555) | static PyObject *
  function PyObject (line 92563) | static PyObject *
  function __Pyx_CyFunction_init_defaults (line 92571) | static int
  function __Pyx_CyFunction_set_defaults (line 92593) | static int
  function PyObject (line 92611) | static PyObject *
  function PyObject (line 92625) | static PyObject *
  function __Pyx_CyFunction_set_kwdefaults (line 92634) | static int
  function PyObject (line 92652) | static PyObject *
  function PyObject (line 92666) | static PyObject *
  function __Pyx_CyFunction_set_annotations (line 92675) | static int
  function PyObject (line 92691) | static PyObject *
  function PyObject (line 92702) | static PyObject *
  function PyObject (line 92711) | static PyObject *
  function PyObject (line 92741) | static PyObject *
  function __Pyx_CyFunction_raise_argument_count_error (line 92761) | static void __Pyx_CyFunction_raise_argument_count_error(__pyx_CyFunction...
  function __Pyx_CyFunction_raise_type_error (line 92776) | static void __Pyx_CyFunction_raise_type_error(__pyx_CyFunctionObject *fu...
  function PyObject (line 92792) | static PyObject *
  function __Pyx_CyFunction_set_module (line 92797) | static int
  function PyObject (line 92853) | static PyObject *
  function PyObject (line 92873) | static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMet...
  function __Pyx_CyFunction_clear (line 92943) | static int
  function __Pyx__CyFunction_dealloc (line 92982) | static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m)
  function __Pyx_CyFunction_dealloc (line 92989) | static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m)
  function __Pyx_CyFunction_traverse (line 92994) | static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitpro...
  function PyObject (line 93034) | static PyObject*
  function PyObject (line 93044) | static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *...
  function CYTHON_INLINE (line 93117) | static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyO...
  function PyObject (line 93128) | static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject ...
  function CYTHON_INLINE (line 93171) | static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyF...
  function PyObject (line 93189) | static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyO...
  function PyObject (line 93224) | static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject...
  function PyObject (line 93259) | static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject...
  function PyObject (line 93289) | static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(P...
  function __pyx_CyFunction_init (line 93359) | static int __pyx_CyFunction_init(PyObject *module) {
  function CYTHON_INLINE (line 93368) | static CYTHON_INLINE PyObject *__Pyx_CyFunction_InitDefaults(PyObject *f...
  function CYTHON_INLINE (line 93375) | static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *fu...
  function CYTHON_INLINE (line 93380) | static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *f...
  function CYTHON_INLINE (line 93385) | static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *...
  function PyObject (line 93392) | static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObje...
  function PyObject (line 93405) | static PyObject*
  function PyObject (line 93508) | static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObj...
  function CYTHON_INLINE (line 93550) | static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* functi...
  function CYTHON_INLINE (line 93557) | static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* o...
  function PyObject (line 93576) | static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject...
  function PyObject (line 93603) | static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *nam...
  function PyObject (line 93632) | static PyObject *__Pyx_PyList_Pack(Py_ssize_t n, ...) {
  function __Pyx__Import_GetModule (line 93651) | static int __Pyx__Import_GetModule(PyObject *qualname, PyObject **module) {
  function __Pyx__Import_Lookup (line 93663) | static int __Pyx__Import_Lookup(PyObject *qualname, PyObject *const *imp...
  function PyObject (line 93711) | static PyObject *__Pyx__Import(PyObject *name, PyObject *const *imported...
  function PyObject (line 93765) | static PyObject *__Pyx_Import(PyObject *name, PyObject *const *imported_...
  function PyObject (line 93770) | static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
  function PyObject (line 93810) | static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject*...
  function PyObject (line 93816) | static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* met...
  function CYTHON_INLINE (line 93836) | static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x) {
  function PyObject (line 93855) | PyObject* __Pyx_PyProbablyModule_GetDict(PyObject *o) {
  function __Pyx_CLineForTraceback (line 93860) | static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) {
  function __pyx_bisect_code_objects (line 93886) | static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries...
  function __Pyx_CachedCodeObjectType (line 93907) | static __Pyx_CachedCodeObjectType *__pyx__find_code_object(struct __Pyx_...
  function __Pyx_CachedCodeObjectType (line 93921) | static __Pyx_CachedCodeObjectType *__pyx_find_code_object(int code_line) {
  function __pyx__insert_code_object (line 93941) | static void __pyx__insert_code_object(struct __Pyx_CodeObjectCache *code...
  function __pyx_insert_code_object (line 93986) | static void __pyx_insert_code_object(int code_line, __Pyx_CachedCodeObje...
  function PyObject (line 94016) | static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, P...
  function __Pyx_AddTraceback (line 94030) | static void __Pyx_AddTraceback(const char *funcname, int c_line,
  function PyCodeObject (line 94084) | static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
  function __Pyx_AddTraceback (line 94102) | static void __Pyx_AddTraceback(const char *funcname, int c_line,
  function CYTHON_INLINE (line 94167) | static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_pa...
  function CYTHON_INLINE (line 94171) | static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_pa...
  function CYTHON_INLINE (line 94176) | static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_pa...
  function CYTHON_INLINE (line 94187) | static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex a, __pyx...
  function CYTHON_INLINE (line 94190) | static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_flo...
  function CYTHON_INLINE (line 94196) | static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_fl...
  function CYTHON_INLINE (line 94202) | static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_fl...
  function CYTHON_INLINE (line 94209) | static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_fl...
  function CYTHON_INLINE (line 94229) | static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_fl...
  function CYTHON_INLINE (line 94240) | static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_flo...
  function CYTHON_INLINE (line 94246) | static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex a) {
  function CYTHON_INLINE (line 94249) | static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_fl...
  function CYTHON_INLINE (line 94256) | static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex z) {
  function CYTHON_INLINE (line 94263) | static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_flo...
  function CYTHON_INLINE (line 94321) | static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_...
  function CYTHON_INLINE (line 94325) | static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_...
  function CYTHON_INLINE (line 94330) | static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_...
  function CYTHON_INLINE (line 94341) | static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex a, __p...
  function CYTHON_INLINE (line 94344) | static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_d...
  function CYTHON_INLINE (line 94350) | static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_...
  function CYTHON_INLINE (line 94356) | static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_...
  function CYTHON_INLINE (line 94363) | static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_...
  function CYTHON_INLINE (line 94383) | static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_...
  function CYTHON_INLINE (line 94394) | static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_d...
  function CYTHON_INLINE (line 94400) | static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex a) {
  function CYTHON_INLINE (line 94403) | static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_...
  function CYTHON_INLINE (line 94410) | static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex z) {
  function CYTHON_INLINE (line 94417) | static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_d...
  function CYTHON_INLINE (line 94475) | static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_com...
  function CYTHON_INLINE (line 94479) | static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_com...
  function CYTHON_INLINE (line 94484) | static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_com...
  function CYTHON_INLINE (line 94495) | static CYTHON_INLINE int __Pyx_c_eq_long__double(__pyx_t_long_double_com...
  function CYTHON_INLINE (line 94498) | static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_sum_long__doubl...
  function CYTHON_INLINE (line 94504) | static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_diff_long__doub...
  function CYTHON_INLINE (line 94510) | static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_prod_long__doub...
  function CYTHON_INLINE (line 94517) | static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_quot_long__doub...
  function CYTHON_INLINE (line 94537) | static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_quot_long__doub...
  function CYTHON_INLINE (line 94548) | static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_neg_long__doubl...
  function CYTHON_INLINE (line 94554) | static CYTHON_INLINE int __Pyx_c_is_zero_long__double(__pyx_t_long_doubl...
  function CYTHON_INLINE (line 94557) | static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_conj_long__doub...
  function __Pyx_c_abs_long__double (line 94564) | static CYTHON_INLINE long double __Pyx_c_abs_long__double(__pyx_t_long_d...
  function CYTHON_INLINE (line 94571) | static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_pow_long__doubl...
  function CYTHON_INLINE (line 94627) | static CYTHON_INLINE TA_RetCode __Pyx_PyLong_As_TA_RetCode(PyObject *x) {
  function CYTHON_INLINE (line 94877) | static CYTHON_INLINE int __Pyx_PyLong_As_int(PyObject *x) {
  function CYTHON_INLINE (line 95127) | static CYTHON_INLINE PyObject* __Pyx_PyLong_From_int(int value) {
  function CYTHON_INLINE (line 95196) | static CYTHON_INLINE TA_FuncUnstId __Pyx_PyLong_As_TA_FuncUnstId(PyObjec...
  function __Pyx_PyLong_As_unsigned_int (line 95446) | static CYTHON_INLINE unsigned int __Pyx_PyLong_As_unsigned_int(PyObject ...
  function CYTHON_INLINE (line 95696) | static CYTHON_INLINE PyObject* __Pyx_PyLong_From_unsigned_int(unsigned i...
  function CYTHON_INLINE (line 95765) | static CYTHON_INLINE TA_Compatibility __Pyx_PyLong_As_TA_Compatibility(P...
  function CYTHON_INLINE (line 96015) | static CYTHON_INLINE TA_CandleSettingType __Pyx_PyLong_As_TA_CandleSetti...
  function CYTHON_INLINE (line 96265) | static CYTHON_INLINE TA_RangeType __Pyx_PyLong_As_TA_RangeType(PyObject ...
  function CYTHON_INLINE (line 96515) | static CYTHON_INLINE PyObject* __Pyx_PyLong_From_long(long value) {
  function CYTHON_INLINE (line 96584) | static CYTHON_INLINE PyObject* __Pyx_PyLong_From_TA_OptInputParameterTyp...
  function CYTHON_INLINE (line 96653) | static CYTHON_INLINE PyObject* __Pyx_PyLong_From_TA_FuncFlags(TA_FuncFla...
  function CYTHON_INLINE (line 96722) | static CYTHON_INLINE PyObject* __Pyx_PyLong_From_TA_InputFlags(TA_InputF...
  function CYTHON_INLINE (line 96791) | static CYTHON_INLINE PyObject* __Pyx_PyLong_From_TA_OutputFlags(TA_Outpu...
  function __Pyx_TypeName (line 96861) | static __Pyx_TypeName
  function __Pyx_PyLong_As_long (line 96899) | static CYTHON_INLINE long __Pyx_PyLong_As_long(PyObject *x) {
  function __Pyx_InBases (line 97150) | static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) {
  function CYTHON_INLINE (line 97158) | static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *...
  function CYTHON_INLINE (line 97173) | static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeOb...
  function CYTHON_INLINE (line 97189) | static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObje...
  function __Pyx_PyErr_GivenExceptionMatchesTuple (line 97196) | static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, Py...
  function CYTHON_INLINE (line 97212) | static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err...
  function CYTHON_INLINE (line 97224) | static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *er...
  function __Pyx_init_runtime_version (line 97237) | void __Pyx_init_runtime_version(void) {
  function __Pyx_get_runtime_version (line 97260) | static unsigned long __Pyx_get_runtime_version(void) {
  function __Pyx_check_binary_version (line 97269) | static int __Pyx_check_binary_version(unsigned long ct_version, unsigned...
  function PyObject (line 97293) | static PyObject* __Pyx__PyCode_New(int a, int p, int k, int l, int s, in...
  function PyCodeObject (line 97339) | static PyCodeObject* __Pyx__PyCode_New(int a, int p, int k, int l, int s...
  function PyObject (line 97364) | static PyObject* __Pyx_PyCode_New(
  function PyObject (line 97433) | static PyObject *__Pyx_DecompressString(const char *s, Py_ssize_t length...
  function CYTHON_INLINE (line 97497) | static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) {
  function CYTHON_INLINE (line 97505) | static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_...
  function CYTHON_INLINE (line 97510) | static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* ...
  function CYTHON_INLINE (line 97515) | static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) {
  function CYTHON_INLINE (line 97520) | static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObjec...
  function CYTHON_INLINE (line 97557) | static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject...
  function CYTHON_INLINE (line 97583) | static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
  function CYTHON_INLINE (line 97588) | static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) {
  function PyObject (line 97595) | static PyObject* __Pyx_PyNumber_LongWrongResultType(PyObject* result) {
  function CYTHON_INLINE (line 97617) | static CYTHON_INLINE PyObject* __Pyx_PyNumber_Long(PyObject* x) {
  function CYTHON_INLINE (line 97645) | static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
  function CYTHON_INLINE (line 97697) | static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) {
  function CYTHON_INLINE (line 97710) | static CYTHON_INLINE PyObject *__Pyx_Owned_Py_None(int b) {
  function CYTHON_INLINE (line 97714) | static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {
  function CYTHON_INLINE (line 97717) | static CYTHON_INLINE PyObject * __Pyx_PyLong_FromSize_t(size_t ival) {
  function __Pyx_ModuleStateLookup_initialize_mutex (line 97751) | static void __Pyx_ModuleStateLookup_initialize_mutex(void) {
  type __Pyx_InterpreterIdAndModule (line 97773) | typedef struct {
  type __Pyx_ModuleStateLookupData (line 97777) | typedef struct {
  function __Pyx_InterpreterIdAndModule (line 97792) | static __Pyx_InterpreterIdAndModule* __Pyx_State_FindModuleStateLookupTa...
  function PyObject (line 97817) | static PyObject *__Pyx_State_FindModule(CYTHON_UNUSED void* dummy) {
  function __Pyx_ModuleStateLookup_wait_until_no_readers (line 97863) | static void __Pyx_ModuleStateLookup_wait_until_no_readers(void) {
  function __Pyx_State_AddModuleInterpIdAsIndex (line 97869) | static int __Pyx_State_AddModuleInterpIdAsIndex(__Pyx_ModuleStateLookupD...
  function __Pyx_State_ConvertFromInterpIdAsIndex (line 97897) | static void __Pyx_State_ConvertFromInterpIdAsIndex(__Pyx_ModuleStateLook...
  function __Pyx_State_AddModule (line 97915) | static int __Pyx_State_AddModule(PyObject* module, CYTHON_UNUSED void* d...
  function __Pyx_State_RemoveModule (line 97993) | static int __Pyx_State_RemoveModule(CYTHON_UNUSED void* dummy) {

FILE: talib/_ta_lib.pyi
  class MA_Type (line 6) | class MA_Type(Enum):
  function BBANDS (line 19) | def BBANDS(
  function DEMA (line 27) | def DEMA(
  function EMA (line 32) | def EMA(
  function HT_TRENDLINE (line 37) | def HT_TRENDLINE(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function KAMA (line 39) | def KAMA(
  function MA (line 44) | def MA(
  function MAMA (line 50) | def MAMA(
  function MAVP (line 56) | def MAVP(
  function MIDPOINT (line 64) | def MIDPOINT(
  function MIDPRICE (line 69) | def MIDPRICE(
  function SAR (line 75) | def SAR(
  function SAREXT (line 82) | def SAREXT(
  function SMA (line 95) | def SMA(
  function T3 (line 100) | def T3(
  function TEMA (line 106) | def TEMA(
  function TRIMA (line 111) | def TRIMA(
  function WMA (line 116) | def WMA(
  function ADX (line 123) | def ADX(
  function ADXR (line 130) | def ADXR(
  function APO (line 137) | def APO(
  function AROON (line 144) | def AROON(
  function AROONOSC (line 150) | def AROONOSC(
  function BOP (line 156) | def BOP(
  function CCI (line 163) | def CCI(
  function CMO (line 170) | def CMO(
  function DX (line 175) | def DX(
  function MACD (line 182) | def MACD(
  function MACDEXT (line 189) | def MACDEXT(
  function MACDFIX (line 199) | def MACDFIX(
  function MFI (line 204) | def MFI(
  function MINUS_DI (line 212) | def MINUS_DI(
  function MINUS_DM (line 219) | def MINUS_DM(
  function MOM (line 225) | def MOM(
  function PLUS_DI (line 230) | def PLUS_DI(
  function PLUS_DM (line 237) | def PLUS_DM(
  function PPO (line 243) | def PPO(
  function ROC (line 250) | def ROC(
  function ROCP (line 255) | def ROCP(
  function ROCR (line 260) | def ROCR(
  function ROCR100 (line 265) | def ROCR100(
  function RSI (line 270) | def RSI(
  function STOCH (line 275) | def STOCH(
  function STOCHF (line 286) | def STOCHF(
  function STOCHRSI (line 295) | def STOCHRSI(
  function TRIX (line 303) | def TRIX(
  function ULTOSC (line 308) | def ULTOSC(
  function WILLR (line 317) | def WILLR(
  function AD (line 326) | def AD(
  function ADOSC (line 333) | def ADOSC(
  function OBV (line 342) | def OBV(
  function ATR (line 349) | def ATR(
  function NATR (line 356) | def NATR(
  function TRANGE (line 363) | def TRANGE(
  function AVGPRICE (line 371) | def AVGPRICE(
  function MEDPRICE (line 378) | def MEDPRICE(
  function TYPPRICE (line 383) | def TYPPRICE(
  function WCLPRICE (line 389) | def WCLPRICE(
  function HT_DCPERIOD (line 397) | def HT_DCPERIOD(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function HT_DCPHASE (line 399) | def HT_DCPHASE(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function HT_PHASOR (line 401) | def HT_PHASOR(real: NDArray[np.float64])-> Tuple[NDArray[np.float64], ND...
  function HT_SINE (line 403) | def HT_SINE(real: NDArray[np.float64])-> Tuple[NDArray[np.float64], NDAr...
  function HT_TRENDMODE (line 405) | def HT_TRENDMODE(real: NDArray[np.float64])-> Tuple[NDArray[np.float64],...
  function CDL2CROWS (line 409) | def CDL2CROWS(
  function CDL3BLACKCROWS (line 416) | def CDL3BLACKCROWS(
  function CDL3INSIDE (line 423) | def CDL3INSIDE(
  function CDL3LINESTRIKE (line 430) | def CDL3LINESTRIKE(
  function CDL3OUTSIDE (line 437) | def CDL3OUTSIDE(
  function CDL3STARSINSOUTH (line 444) | def CDL3STARSINSOUTH(
  function CDL3WHITESOLDIERS (line 451) | def CDL3WHITESOLDIERS(
  function CDLABANDONEDBABY (line 458) | def CDLABANDONEDBABY(
  function CDLADVANCEBLOCK (line 466) | def CDLADVANCEBLOCK(
  function CDLBELTHOLD (line 473) | def CDLBELTHOLD(
  function CDLBREAKAWAY (line 480) | def CDLBREAKAWAY(
  function CDLCLOSINGMARUBOZU (line 487) | def CDLCLOSINGMARUBOZU(
  function CDLCONCEALBABYSWALL (line 494) | def CDLCONCEALBABYSWALL(
  function CDLCOUNTERATTACK (line 501) | def CDLCOUNTERATTACK(
  function CDLDARKCLOUDCOVER (line 508) | def CDLDARKCLOUDCOVER(
  function CDLDOJI (line 516) | def CDLDOJI(
  function CDLDOJISTAR (line 523) | def CDLDOJISTAR(
  function CDLDRAGONFLYDOJI (line 530) | def CDLDRAGONFLYDOJI(
  function CDLENGULFING (line 537) | def CDLENGULFING(
  function CDLEVENINGDOJISTAR (line 544) | def CDLEVENINGDOJISTAR(
  function CDLEVENINGSTAR (line 552) | def CDLEVENINGSTAR(
  function CDLGAPSIDESIDEWHITE (line 560) | def CDLGAPSIDESIDEWHITE(
  function CDLGRAVESTONEDOJI (line 567) | def CDLGRAVESTONEDOJI(
  function CDLHAMMER (line 574) | def CDLHAMMER(
  function CDLHANGINGMAN (line 581) | def CDLHANGINGMAN(
  function CDLHARAMI (line 588) | def CDLHARAMI(
  function CDLHARAMICROSS (line 595) | def CDLHARAMICROSS(
  function CDLHIGHWAVE (line 602) | def CDLHIGHWAVE(
  function CDLHIKKAKE (line 609) | def CDLHIKKAKE(
  function CDLHIKKAKEMOD (line 616) | def CDLHIKKAKEMOD(
  function CDLHOMINGPIGEON (line 623) | def CDLHOMINGPIGEON(
  function CDLIDENTICAL3CROWS (line 630) | def CDLIDENTICAL3CROWS(
  function CDLINNECK (line 637) | def CDLINNECK(
  function CDLINVERTEDHAMMER (line 644) | def CDLINVERTEDHAMMER(
  function CDLKICKING (line 651) | def CDLKICKING(
  function CDLKICKINGBYLENGTH (line 658) | def CDLKICKINGBYLENGTH(
  function CDLLADDERBOTTOM (line 665) | def CDLLADDERBOTTOM(
  function CDLLONGLEGGEDDOJI (line 672) | def CDLLONGLEGGEDDOJI(
  function CDLLONGLINE (line 679) | def CDLLONGLINE(
  function CDLMARUBOZU (line 686) | def CDLMARUBOZU(
  function CDLMATCHINGLOW (line 693) | def CDLMATCHINGLOW(
  function CDLMATHOLD (line 700) | def CDLMATHOLD(
  function CDLMORNINGDOJISTAR (line 708) | def CDLMORNINGDOJISTAR(
  function CDLMORNINGSTAR (line 716) | def CDLMORNINGSTAR(
  function CDLONNECK (line 724) | def CDLONNECK(
  function CDLPIERCING (line 731) | def CDLPIERCING(
  function CDLRICKSHAWMAN (line 738) | def CDLRICKSHAWMAN(
  function CDLRISEFALL3METHODS (line 745) | def CDLRISEFALL3METHODS(
  function CDLSEPARATINGLINES (line 752) | def CDLSEPARATINGLINES(
  function CDLSHOOTINGSTAR (line 759) | def CDLSHOOTINGSTAR(
  function CDLSHORTLINE (line 766) | def CDLSHORTLINE(
  function CDLSPINNINGTOP (line 773) | def CDLSPINNINGTOP(
  function CDLSTALLEDPATTERN (line 780) | def CDLSTALLEDPATTERN(
  function CDLSTICKSANDWICH (line 787) | def CDLSTICKSANDWICH(
  function CDLTAKURI (line 794) | def CDLTAKURI(
  function CDLTASUKIGAP (line 801) | def CDLTASUKIGAP(
  function CDLTHRUSTING (line 808) | def CDLTHRUSTING(
  function CDLTRISTAR (line 815) | def CDLTRISTAR(
  function CDLUNIQUE3RIVER (line 822) | def CDLUNIQUE3RIVER(
  function CDLUPSIDEGAP2CROWS (line 829) | def CDLUPSIDEGAP2CROWS(
  function CDLXSIDEGAP3METHODS (line 836) | def CDLXSIDEGAP3METHODS(
  function BETA (line 845) | def BETA(
  function CORREL (line 851) | def CORREL(
  function LINEARREG (line 857) | def LINEARREG(
  function LINEARREG_ANGLE (line 862) | def LINEARREG_ANGLE(
  function LINEARREG_INTERCEPT (line 867) | def LINEARREG_INTERCEPT(
  function LINEARREG_SLOPE (line 872) | def LINEARREG_SLOPE(
  function STDDEV (line 877) | def STDDEV(
  function TSF (line 883) | def TSF(
  function VAR (line 888) | def VAR(
  function ACOS (line 896) | def ACOS(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function ASIN (line 898) | def ASIN(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function ATAN (line 900) | def ATAN(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function CEIL (line 902) | def CEIL(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function COS (line 904) | def COS(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function COSH (line 906) | def COSH(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function EXP (line 908) | def EXP(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function FLOOR (line 910) | def FLOOR(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function LN (line 912) | def LN(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function LOG10 (line 914) | def LOG10(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function SIN (line 916) | def SIN(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function SINH (line 918) | def SINH(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function SQRT (line 920) | def SQRT(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function TAN (line 922) | def TAN(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function TANH (line 924) | def TANH(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function ADD (line 928) | def ADD(
  function DIV (line 933) | def DIV(
  function MAX (line 938) | def MAX(
  function MAXINDEX (line 943) | def MAXINDEX(
  function MIN (line 948) | def MIN(
  function MININDEX (line 953) | def MININDEX(
  function MINMAX (line 958) | def MINMAX(
  function MINMAXINDEX (line 963) | def MINMAXINDEX(
  function MULT (line 968) | def MULT(
  function SUB (line 973) | def SUB(
  function SUM (line 978) | def SUM(
  function ACCBANDS (line 983) | def ACCBANDS(
  function AVGDEV (line 990) | def AVGDEV(
  function IMI (line 995) | def IMI(
  function stream_BBANDS (line 1003) | def stream_BBANDS(
  function stream_DEMA (line 1011) | def stream_DEMA(
  function stream_EMA (line 1016) | def stream_EMA(
  function stream_HT_TRENDLINE (line 1021) | def stream_HT_TRENDLINE(real: NDArray[np.float64])-> NDArray[np.float64]...
  function stream_KAMA (line 1023) | def stream_KAMA(
  function stream_MA (line 1028) | def stream_MA(
  function stream_MAMA (line 1034) | def stream_MAMA(
  function stream_MAVP (line 1040) | def stream_MAVP(
  function stream_MIDPOINT (line 1048) | def stream_MIDPOINT(
  function stream_MIDPRICE (line 1053) | def stream_MIDPRICE(
  function stream_SAR (line 1059) | def stream_SAR(
  function stream_SAREXT (line 1066) | def stream_SAREXT(
  function stream_SMA (line 1079) | def stream_SMA(
  function stream_T3 (line 1084) | def stream_T3(
  function stream_TEMA (line 1090) | def stream_TEMA(
  function stream_TRIMA (line 1095) | def stream_TRIMA(
  function stream_WMA (line 1100) | def stream_WMA(
  function stream_ADX (line 1107) | def stream_ADX(
  function stream_ADXR (line 1114) | def stream_ADXR(
  function stream_APO (line 1121) | def stream_APO(
  function stream_AROON (line 1128) | def stream_AROON(
  function stream_AROONOSC (line 1134) | def stream_AROONOSC(
  function stream_BOP (line 1140) | def stream_BOP(
  function stream_CCI (line 1147) | def stream_CCI(
  function stream_CMO (line 1154) | def stream_CMO(
  function stream_DX (line 1159) | def stream_DX(
  function stream_MACD (line 1166) | def stream_MACD(
  function stream_MACDEXT (line 1173) | def stream_MACDEXT(
  function stream_MACDFIX (line 1183) | def stream_MACDFIX(
  function stream_MFI (line 1188) | def stream_MFI(
  function stream_MINUS_DI (line 1196) | def stream_MINUS_DI(
  function stream_MINUS_DM (line 1203) | def stream_MINUS_DM(
  function stream_MOM (line 1209) | def stream_MOM(
  function stream_PLUS_DI (line 1214) | def stream_PLUS_DI(
  function stream_PLUS_DM (line 1221) | def stream_PLUS_DM(
  function stream_PPO (line 1227) | def stream_PPO(
  function stream_ROC (line 1234) | def stream_ROC(
  function stream_ROCP (line 1239) | def stream_ROCP(
  function stream_ROCR (line 1244) | def stream_ROCR(
  function stream_ROCR100 (line 1249) | def stream_ROCR100(
  function stream_RSI (line 1254) | def stream_RSI(
  function stream_STOCH (line 1259) | def stream_STOCH(
  function stream_STOCHF (line 1270) | def stream_STOCHF(
  function stream_STOCHRSI (line 1279) | def stream_STOCHRSI(
  function stream_TRIX (line 1287) | def stream_TRIX(
  function stream_ULTOSC (line 1292) | def stream_ULTOSC(
  function stream_WILLR (line 1301) | def stream_WILLR(
  function stream_AD (line 1310) | def stream_AD(
  function stream_ADOSC (line 1317) | def stream_ADOSC(
  function stream_OBV (line 1326) | def stream_OBV(
  function stream_ATR (line 1333) | def stream_ATR(
  function stream_NATR (line 1340) | def stream_NATR(
  function stream_TRANGE (line 1347) | def stream_TRANGE(
  function stream_AVGPRICE (line 1355) | def stream_AVGPRICE(
  function stream_MEDPRICE (line 1362) | def stream_MEDPRICE(
  function stream_TYPPRICE (line 1367) | def stream_TYPPRICE(
  function stream_WCLPRICE (line 1373) | def stream_WCLPRICE(
  function stream_HT_DCPERIOD (line 1381) | def stream_HT_DCPERIOD(real: NDArray[np.float64])-> NDArray[np.float64]:...
  function stream_HT_DCPHASE (line 1383) | def stream_HT_DCPHASE(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function stream_HT_PHASOR (line 1385) | def stream_HT_PHASOR(real: NDArray[np.float64])-> Tuple[NDArray[np.float...
  function stream_HT_SINE (line 1387) | def stream_HT_SINE(real: NDArray[np.float64])-> Tuple[NDArray[np.float64...
  function stream_HT_TRENDMODE (line 1389) | def stream_HT_TRENDMODE(real: NDArray[np.float64])-> Tuple[NDArray[np.fl...
  function stream_CDL2CROWS (line 1393) | def stream_CDL2CROWS(
  function stream_CDL3BLACKCROWS (line 1400) | def stream_CDL3BLACKCROWS(
  function stream_CDL3INSIDE (line 1407) | def stream_CDL3INSIDE(
  function stream_CDL3LINESTRIKE (line 1414) | def stream_CDL3LINESTRIKE(
  function stream_CDL3OUTSIDE (line 1421) | def stream_CDL3OUTSIDE(
  function stream_CDL3STARSINSOUTH (line 1428) | def stream_CDL3STARSINSOUTH(
  function stream_CDL3WHITESOLDIERS (line 1435) | def stream_CDL3WHITESOLDIERS(
  function stream_CDLABANDONEDBABY (line 1442) | def stream_CDLABANDONEDBABY(
  function stream_CDLADVANCEBLOCK (line 1450) | def stream_CDLADVANCEBLOCK(
  function stream_CDLBELTHOLD (line 1457) | def stream_CDLBELTHOLD(
  function stream_CDLBREAKAWAY (line 1464) | def stream_CDLBREAKAWAY(
  function stream_CDLCLOSINGMARUBOZU (line 1471) | def stream_CDLCLOSINGMARUBOZU(
  function stream_CDLCONCEALBABYSWALL (line 1478) | def stream_CDLCONCEALBABYSWALL(
  function stream_CDLCOUNTERATTACK (line 1485) | def stream_CDLCOUNTERATTACK(
  function stream_CDLDARKCLOUDCOVER (line 1492) | def stream_CDLDARKCLOUDCOVER(
  function stream_CDLDOJI (line 1500) | def stream_CDLDOJI(
  function stream_CDLDOJISTAR (line 1507) | def stream_CDLDOJISTAR(
  function stream_CDLDRAGONFLYDOJI (line 1514) | def stream_CDLDRAGONFLYDOJI(
  function stream_CDLENGULFING (line 1521) | def stream_CDLENGULFING(
  function stream_CDLEVENINGDOJISTAR (line 1528) | def stream_CDLEVENINGDOJISTAR(
  function stream_CDLEVENINGSTAR (line 1536) | def stream_CDLEVENINGSTAR(
  function stream_CDLGAPSIDESIDEWHITE (line 1544) | def stream_CDLGAPSIDESIDEWHITE(
  function stream_CDLGRAVESTONEDOJI (line 1551) | def stream_CDLGRAVESTONEDOJI(
  function stream_CDLHAMMER (line 1558) | def stream_CDLHAMMER(
  function stream_CDLHANGINGMAN (line 1565) | def stream_CDLHANGINGMAN(
  function stream_CDLHARAMI (line 1572) | def stream_CDLHARAMI(
  function stream_CDLHARAMICROSS (line 1579) | def stream_CDLHARAMICROSS(
  function stream_CDLHIGHWAVE (line 1586) | def stream_CDLHIGHWAVE(
  function stream_CDLHIKKAKE (line 1593) | def stream_CDLHIKKAKE(
  function stream_CDLHIKKAKEMOD (line 1600) | def stream_CDLHIKKAKEMOD(
  function stream_CDLHOMINGPIGEON (line 1607) | def stream_CDLHOMINGPIGEON(
  function stream_CDLIDENTICAL3CROWS (line 1614) | def stream_CDLIDENTICAL3CROWS(
  function stream_CDLINNECK (line 1621) | def stream_CDLINNECK(
  function stream_CDLINVERTEDHAMMER (line 1628) | def stream_CDLINVERTEDHAMMER(
  function stream_CDLKICKING (line 1635) | def stream_CDLKICKING(
  function stream_CDLKICKINGBYLENGTH (line 1642) | def stream_CDLKICKINGBYLENGTH(
  function stream_CDLLADDERBOTTOM (line 1649) | def stream_CDLLADDERBOTTOM(
  function stream_CDLLONGLEGGEDDOJI (line 1656) | def stream_CDLLONGLEGGEDDOJI(
  function stream_CDLLONGLINE (line 1663) | def stream_CDLLONGLINE(
  function stream_CDLMARUBOZU (line 1670) | def stream_CDLMARUBOZU(
  function stream_CDLMATCHINGLOW (line 1677) | def stream_CDLMATCHINGLOW(
  function stream_CDLMATHOLD (line 1684) | def stream_CDLMATHOLD(
  function stream_CDLMORNINGDOJISTAR (line 1692) | def stream_CDLMORNINGDOJISTAR(
  function stream_CDLMORNINGSTAR (line 1700) | def stream_CDLMORNINGSTAR(
  function stream_CDLONNECK (line 1708) | def stream_CDLONNECK(
  function stream_CDLPIERCING (line 1715) | def stream_CDLPIERCING(
  function stream_CDLRICKSHAWMAN (line 1722) | def stream_CDLRICKSHAWMAN(
  function stream_CDLRISEFALL3METHODS (line 1729) | def stream_CDLRISEFALL3METHODS(
  function stream_CDLSEPARATINGLINES (line 1736) | def stream_CDLSEPARATINGLINES(
  function stream_CDLSHOOTINGSTAR (line 1743) | def stream_CDLSHOOTINGSTAR(
  function stream_CDLSHORTLINE (line 1750) | def stream_CDLSHORTLINE(
  function stream_CDLSPINNINGTOP (line 1757) | def stream_CDLSPINNINGTOP(
  function stream_CDLSTALLEDPATTERN (line 1764) | def stream_CDLSTALLEDPATTERN(
  function stream_CDLSTICKSANDWICH (line 1771) | def stream_CDLSTICKSANDWICH(
  function stream_CDLTAKURI (line 1778) | def stream_CDLTAKURI(
  function stream_CDLTASUKIGAP (line 1785) | def stream_CDLTASUKIGAP(
  function stream_CDLTHRUSTING (line 1792) | def stream_CDLTHRUSTING(
  function stream_CDLTRISTAR (line 1799) | def stream_CDLTRISTAR(
  function stream_CDLUNIQUE3RIVER (line 1806) | def stream_CDLUNIQUE3RIVER(
  function stream_CDLUPSIDEGAP2CROWS (line 1813) | def stream_CDLUPSIDEGAP2CROWS(
  function stream_CDLXSIDEGAP3METHODS (line 1820) | def stream_CDLXSIDEGAP3METHODS(
  function stream_BETA (line 1829) | def stream_BETA(
  function stream_CORREL (line 1835) | def stream_CORREL(
  function stream_LINEARREG (line 1841) | def stream_LINEARREG(
  function stream_LINEARREG_ANGLE (line 1846) | def stream_LINEARREG_ANGLE(
  function stream_LINEARREG_INTERCEPT (line 1851) | def stream_LINEARREG_INTERCEPT(
  function stream_LINEARREG_SLOPE (line 1856) | def stream_LINEARREG_SLOPE(
  function stream_STDDEV (line 1861) | def stream_STDDEV(
  function stream_TSF (line 1867) | def stream_TSF(
  function stream_VAR (line 1872) | def stream_VAR(
  function stream_ACOS (line 1880) | def stream_ACOS(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function stream_ASIN (line 1882) | def stream_ASIN(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function stream_ATAN (line 1884) | def stream_ATAN(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function stream_CEIL (line 1886) | def stream_CEIL(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function stream_COS (line 1888) | def stream_COS(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function stream_COSH (line 1890) | def stream_COSH(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function stream_EXP (line 1892) | def stream_EXP(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function stream_FLOOR (line 1894) | def stream_FLOOR(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function stream_LN (line 1896) | def stream_LN(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function stream_LOG10 (line 1898) | def stream_LOG10(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function stream_SIN (line 1900) | def stream_SIN(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function stream_SINH (line 1902) | def stream_SINH(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function stream_SQRT (line 1904) | def stream_SQRT(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function stream_TAN (line 1906) | def stream_TAN(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function stream_TANH (line 1908) | def stream_TANH(real: NDArray[np.float64])-> NDArray[np.float64]: ...
  function stream_ADD (line 1912) | def stream_ADD(
  function stream_DIV (line 1917) | def stream_DIV(
  function stream_MAX (line 1922) | def stream_MAX(
  function stream_MAXINDEX (line 1927) | def stream_MAXINDEX(
  function stream_MIN (line 1932) | def stream_MIN(
  function stream_MININDEX (line 1937) | def stream_MININDEX(
  function stream_MINMAX (line 1942) | def stream_MINMAX(
  function stream_MINMAXINDEX (line 1947) | def stream_MINMAXINDEX(
  function stream_MULT (line 1952) | def stream_MULT(
  function stream_SUB (line 1957) | def stream_SUB(
  function stream_SUM (line 1962) | def stream_SUM(
  function stream_ACCBANDS (line 1967) | def stream_ACCBANDS(
  function stream_AVGDEV (line 1974) | def stream_AVGDEV(
  function stream_IMI (line 1979) | def stream_IMI(

FILE: talib/abstract.py
  function Function (line 13) | def Function(function_name, *args, **kwargs):

FILE: talib/abstract.pyi
  function HT_DCPERIOD (line 15) | def HT_DCPERIOD(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function HT_DCPERIOD (line 17) | def HT_DCPERIOD(real: pd.DataFrame) -> pd.Series: ...
  function HT_DCPHASE (line 28) | def HT_DCPHASE(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function HT_DCPHASE (line 30) | def HT_DCPHASE(real: pd.DataFrame) -> pd.Series: ...
  function HT_PHASOR (line 42) | def HT_PHASOR(real: Union[pd.Series, np.ndarray]) -> Tuple[np.ndarray, n...
  function HT_PHASOR (line 44) | def HT_PHASOR(real: pd.DataFrame) -> pd.DataFrame: ...
  function HT_SINE (line 56) | def HT_SINE(real: Union[pd.Series, np.ndarray]) -> Tuple[np.ndarray, np....
  function HT_SINE (line 58) | def HT_SINE(real: pd.DataFrame) -> pd.DataFrame: ...
  function HT_TRENDMODE (line 69) | def HT_TRENDMODE(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function HT_TRENDMODE (line 71) | def HT_TRENDMODE(real: pd.DataFrame) -> pd.Series: ...
  function ADD (line 83) | def ADD(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function ADD (line 85) | def ADD(real: pd.DataFrame) -> pd.Series: ...
  function DIV (line 97) | def DIV(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function DIV (line 99) | def DIV(real: pd.DataFrame) -> pd.Series: ...
  function MAX (line 112) | def MAX(real: Union[pd.Series, np.ndarray], timeperiod=30) -> np.ndarray...
  function MAX (line 114) | def MAX(real: pd.DataFrame, timeperiod=30) -> pd.Series: ...
  function MAXINDEX (line 127) | def MAXINDEX(real: Union[pd.Series, np.ndarray], timeperiod=30) -> np.nd...
  function MAXINDEX (line 129) | def MAXINDEX(real: pd.DataFrame, timeperiod=30) -> pd.Series: ...
  function MIN (line 142) | def MIN(real: Union[pd.Series, np.ndarray], timeperiod=30) -> np.ndarray...
  function MIN (line 144) | def MIN(real: pd.DataFrame, timeperiod=30) -> pd.Series: ...
  function MININDEX (line 157) | def MININDEX(real: Union[pd.Series, np.ndarray], timeperiod=30) -> np.nd...
  function MININDEX (line 159) | def MININDEX(real: pd.DataFrame, timeperiod=30) -> pd.Series: ...
  function MINMAX (line 173) | def MINMAX(real: Union[pd.Series, np.ndarray], timeperiod=30) -> Tuple[n...
  function MINMAX (line 175) | def MINMAX(real: pd.DataFrame, timeperiod=30) -> pd.DataFrame: ...
  function MINMAXINDEX (line 189) | def MINMAXINDEX(real: Union[pd.Series, np.ndarray], timeperiod=30) -> Tu...
  function MINMAXINDEX (line 191) | def MINMAXINDEX(real: pd.DataFrame, timeperiod=30) -> pd.DataFrame: ...
  function MULT (line 203) | def MULT(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function MULT (line 205) | def MULT(real: pd.DataFrame) -> pd.Series: ...
  function SUB (line 217) | def SUB(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function SUB (line 219) | def SUB(real: pd.DataFrame) -> pd.Series: ...
  function SUM (line 232) | def SUM(real: Union[pd.Series, np.ndarray], timeperiod=30) -> np.ndarray...
  function SUM (line 234) | def SUM(real: pd.DataFrame, timeperiod=30) -> pd.Series: ...
  function ACOS (line 245) | def ACOS(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function ACOS (line 247) | def ACOS(real: pd.DataFrame) -> pd.Series: ...
  function ASIN (line 258) | def ASIN(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function ASIN (line 260) | def ASIN(real: pd.DataFrame) -> pd.Series: ...
  function ATAN (line 271) | def ATAN(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function ATAN (line 273) | def ATAN(real: pd.DataFrame) -> pd.Series: ...
  function CEIL (line 284) | def CEIL(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CEIL (line 286) | def CEIL(real: pd.DataFrame) -> pd.Series: ...
  function COS (line 297) | def COS(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function COS (line 299) | def COS(real: pd.DataFrame) -> pd.Series: ...
  function COSH (line 310) | def COSH(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function COSH (line 312) | def COSH(real: pd.DataFrame) -> pd.Series: ...
  function EXP (line 323) | def EXP(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function EXP (line 325) | def EXP(real: pd.DataFrame) -> pd.Series: ...
  function FLOOR (line 336) | def FLOOR(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function FLOOR (line 338) | def FLOOR(real: pd.DataFrame) -> pd.Series: ...
  function LN (line 349) | def LN(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function LN (line 351) | def LN(real: pd.DataFrame) -> pd.Series: ...
  function LOG10 (line 362) | def LOG10(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function LOG10 (line 364) | def LOG10(real: pd.DataFrame) -> pd.Series: ...
  function SIN (line 375) | def SIN(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function SIN (line 377) | def SIN(real: pd.DataFrame) -> pd.Series: ...
  function SINH (line 388) | def SINH(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function SINH (line 390) | def SINH(real: pd.DataFrame) -> pd.Series: ...
  function SQRT (line 401) | def SQRT(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function SQRT (line 403) | def SQRT(real: pd.DataFrame) -> pd.Series: ...
  function TAN (line 414) | def TAN(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function TAN (line 416) | def TAN(real: pd.DataFrame) -> pd.Series: ...
  function TANH (line 427) | def TANH(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function TANH (line 429) | def TANH(real: pd.DataFrame) -> pd.Series: ...
  function ADX (line 442) | def ADX(real: Union[pd.Series, np.ndarray], timeperiod=14) -> np.ndarray...
  function ADX (line 444) | def ADX(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function ADXR (line 457) | def ADXR(real: Union[pd.Series, np.ndarray], timeperiod=14) -> np.ndarra...
  function ADXR (line 459) | def ADXR(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function APO (line 474) | def APO(real: Union[pd.Series, np.ndarray], fastperiod=12, slowperiod=26...
  function APO (line 476) | def APO(real: pd.DataFrame, fastperiod=12, slowperiod=26, matype=0) -> p...
  function AROON (line 490) | def AROON(real: Union[pd.Series, np.ndarray], timeperiod=14) -> Tuple[np...
  function AROON (line 492) | def AROON(real: pd.DataFrame, timeperiod=14) -> pd.DataFrame: ...
  function AROONOSC (line 505) | def AROONOSC(real: Union[pd.Series, np.ndarray], timeperiod=14) -> np.nd...
  function AROONOSC (line 507) | def AROONOSC(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function BOP (line 518) | def BOP(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function BOP (line 520) | def BOP(real: pd.DataFrame) -> pd.Series: ...
  function CCI (line 533) | def CCI(real: Union[pd.Series, np.ndarray], timeperiod=14) -> np.ndarray...
  function CCI (line 535) | def CCI(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function CMO (line 548) | def CMO(real: Union[pd.Series, np.ndarray], timeperiod=14) -> np.ndarray...
  function CMO (line 550) | def CMO(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function DX (line 563) | def DX(real: Union[pd.Series, np.ndarray], timeperiod=14) -> np.ndarray:...
  function DX (line 565) | def DX(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function MACD (line 582) | def MACD(real: Union[pd.Series, np.ndarray], fastperiod=12, slowperiod=2...
  function MACD (line 584) | def MACD(real: pd.DataFrame, fastperiod=12, slowperiod=26, signalperiod=...
  function MACDEXT (line 604) | def MACDEXT(real: Union[pd.Series, np.ndarray], fastperiod=12, fastmatyp...
  function MACDEXT (line 606) | def MACDEXT(real: pd.DataFrame, fastperiod=12, fastmatype=0, slowperiod=...
  function MACDFIX (line 621) | def MACDFIX(real: Union[pd.Series, np.ndarray], signalperiod=9) -> Tuple...
  function MACDFIX (line 623) | def MACDFIX(real: pd.DataFrame, signalperiod=9) -> pd.DataFrame: ...
  function MFI (line 636) | def MFI(real: Union[pd.Series, np.ndarray], timeperiod=14) -> np.ndarray...
  function MFI (line 638) | def MFI(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function MINUS_DI (line 651) | def MINUS_DI(real: Union[pd.Series, np.ndarray], timeperiod=14) -> np.nd...
  function MINUS_DI (line 653) | def MINUS_DI(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function MINUS_DM (line 666) | def MINUS_DM(real: Union[pd.Series, np.ndarray], timeperiod=14) -> np.nd...
  function MINUS_DM (line 668) | def MINUS_DM(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function MOM (line 681) | def MOM(real: Union[pd.Series, np.ndarray], timeperiod=10) -> np.ndarray...
  function MOM (line 683) | def MOM(real: pd.DataFrame, timeperiod=10) -> pd.Series: ...
  function PLUS_DI (line 696) | def PLUS_DI(real: Union[pd.Series, np.ndarray], timeperiod=14) -> np.nda...
  function PLUS_DI (line 698) | def PLUS_DI(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function PLUS_DM (line 711) | def PLUS_DM(real: Union[pd.Series, np.ndarray], timeperiod=14) -> np.nda...
  function PLUS_DM (line 713) | def PLUS_DM(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function PPO (line 728) | def PPO(real: Union[pd.Series, np.ndarray], fastperiod=12, slowperiod=26...
  function PPO (line 730) | def PPO(real: pd.DataFrame, fastperiod=12, slowperiod=26, matype=0) -> p...
  function ROC (line 743) | def ROC(real: Union[pd.Series, np.ndarray], timeperiod=10) -> np.ndarray...
  function ROC (line 745) | def ROC(real: pd.DataFrame, timeperiod=10) -> pd.Series: ...
  function ROCP (line 758) | def ROCP(real: Union[pd.Series, np.ndarray], timeperiod=10) -> np.ndarra...
  function ROCP (line 760) | def ROCP(real: pd.DataFrame, timeperiod=10) -> pd.Series: ...
  function ROCR (line 773) | def ROCR(real: Union[pd.Series, np.ndarray], timeperiod=10) -> np.ndarra...
  function ROCR (line 775) | def ROCR(real: pd.DataFrame, timeperiod=10) -> pd.Series: ...
  function ROCR100 (line 788) | def ROCR100(real: Union[pd.Series, np.ndarray], timeperiod=10) -> np.nda...
  function ROCR100 (line 790) | def ROCR100(real: pd.DataFrame, timeperiod=10) -> pd.Series: ...
  function RSI (line 803) | def RSI(real: Union[pd.Series, np.ndarray], timeperiod=14) -> np.ndarray...
  function RSI (line 805) | def RSI(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function STOCH (line 823) | def STOCH(real: Union[pd.Series, np.ndarray], fastk_period=5, slowk_peri...
  function STOCH (line 825) | def STOCH(real: pd.DataFrame, fastk_period=5, slowk_period=3, slowk_maty...
  function STOCHF (line 841) | def STOCHF(real: Union[pd.Series, np.ndarray], fastk_period=5, fastd_per...
  function STOCHF (line 843) | def STOCHF(real: pd.DataFrame, fastk_period=5, fastd_period=3, fastd_mat...
  function STOCHRSI (line 860) | def STOCHRSI(real: Union[pd.Series, np.ndarray], timeperiod=14, fastk_pe...
  function STOCHRSI (line 862) | def STOCHRSI(real: pd.DataFrame, timeperiod=14, fastk_period=5, fastd_pe...
  function TRIX (line 875) | def TRIX(real: Union[pd.Series, np.ndarray], timeperiod=30) -> np.ndarra...
  function TRIX (line 877) | def TRIX(real: pd.DataFrame, timeperiod=30) -> pd.Series: ...
  function ULTOSC (line 892) | def ULTOSC(real: Union[pd.Series, np.ndarray], timeperiod1=7, timeperiod...
  function ULTOSC (line 894) | def ULTOSC(real: pd.DataFrame, timeperiod1=7, timeperiod2=14, timeperiod...
  function WILLR (line 907) | def WILLR(real: Union[pd.Series, np.ndarray], timeperiod=14) -> np.ndarr...
  function WILLR (line 909) | def WILLR(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function BBANDS (line 927) | def BBANDS(real: Union[pd.Series, np.ndarray], timeperiod=5, nbdevup=2.0...
  function BBANDS (line 929) | def BBANDS(real: pd.DataFrame, timeperiod=5, nbdevup=2.0, nbdevdn=2.0, m...
  function DEMA (line 942) | def DEMA(real: Union[pd.Series, np.ndarray], timeperiod=30) -> np.ndarra...
  function DEMA (line 944) | def DEMA(real: pd.DataFrame, timeperiod=30) -> pd.Series: ...
  function EMA (line 957) | def EMA(real: Union[pd.Series, np.ndarray], timeperiod=30) -> np.ndarray...
  function EMA (line 959) | def EMA(real: pd.DataFrame, timeperiod=30) -> pd.Series: ...
  function HT_TRENDLINE (line 970) | def HT_TRENDLINE(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function HT_TRENDLINE (line 972) | def HT_TRENDLINE(real: pd.DataFrame) -> pd.Series: ...
  function KAMA (line 985) | def KAMA(real: Union[pd.Series, np.ndarray], timeperiod=30) -> np.ndarra...
  function KAMA (line 987) | def KAMA(real: pd.DataFrame, timeperiod=30) -> pd.Series: ...
  function MA (line 1001) | def MA(real: Union[pd.Series, np.ndarray], timeperiod=30, matype=0) -> n...
  function MA (line 1003) | def MA(real: pd.DataFrame, timeperiod=30, matype=0) -> pd.Series: ...
  function MAMA (line 1018) | def MAMA(real: Union[pd.Series, np.ndarray], fastlimit=0.5, slowlimit=0....
  function MAMA (line 1020) | def MAMA(real: pd.DataFrame, fastlimit=0.5, slowlimit=0.05) -> pd.DataFr...
  function MAVP (line 1036) | def MAVP(real: Union[pd.Series, np.ndarray], minperiod=2, maxperiod=30, ...
  function MAVP (line 1038) | def MAVP(real: pd.DataFrame, minperiod=2, maxperiod=30, matype=0) -> pd....
  function MIDPOINT (line 1051) | def MIDPOINT(real: Union[pd.Series, np.ndarray], timeperiod=14) -> np.nd...
  function MIDPOINT (line 1053) | def MIDPOINT(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function MIDPRICE (line 1066) | def MIDPRICE(real: Union[pd.Series, np.ndarray], timeperiod=14) -> np.nd...
  function MIDPRICE (line 1068) | def MIDPRICE(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function SAR (line 1082) | def SAR(real: Union[pd.Series, np.ndarray], acceleration=0.02, maximum=0...
  function SAR (line 1084) | def SAR(real: pd.DataFrame, acceleration=0.02, maximum=0.2) -> pd.Series...
  function SAREXT (line 1104) | def SAREXT(real: Union[pd.Series, np.ndarray], startvalue=0.0, offsetonr...
  function SAREXT (line 1106) | def SAREXT(real: pd.DataFrame, startvalue=0.0, offsetonreverse=0.0, acce...
  function SMA (line 1119) | def SMA(real: Union[pd.Series, np.ndarray], timeperiod=30) -> np.ndarray...
  function SMA (line 1121) | def SMA(real: pd.DataFrame, timeperiod=30) -> pd.Series: ...
  function T3 (line 1135) | def T3(real: Union[pd.Series, np.ndarray], timeperiod=5, vfactor=0.7) ->...
  function T3 (line 1137) | def T3(real: pd.DataFrame, timeperiod=5, vfactor=0.7) -> pd.Series: ...
  function TEMA (line 1150) | def TEMA(real: Union[pd.Series, np.ndarray], timeperiod=30) -> np.ndarra...
  function TEMA (line 1152) | def TEMA(real: pd.DataFrame, timeperiod=30) -> pd.Series: ...
  function TRIMA (line 1165) | def TRIMA(real: Union[pd.Series, np.ndarray], timeperiod=30) -> np.ndarr...
  function TRIMA (line 1167) | def TRIMA(real: pd.DataFrame, timeperiod=30) -> pd.Series: ...
  function WMA (line 1180) | def WMA(real: Union[pd.Series, np.ndarray], timeperiod=30) -> np.ndarray...
  function WMA (line 1182) | def WMA(real: pd.DataFrame, timeperiod=30) -> pd.Series: ...
  function CDL2CROWS (line 1193) | def CDL2CROWS(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDL2CROWS (line 1195) | def CDL2CROWS(real: pd.DataFrame) -> pd.Series: ...
  function CDL3BLACKCROWS (line 1206) | def CDL3BLACKCROWS(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDL3BLACKCROWS (line 1208) | def CDL3BLACKCROWS(real: pd.DataFrame) -> pd.Series: ...
  function CDL3INSIDE (line 1219) | def CDL3INSIDE(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDL3INSIDE (line 1221) | def CDL3INSIDE(real: pd.DataFrame) -> pd.Series: ...
  function CDL3LINESTRIKE (line 1232) | def CDL3LINESTRIKE(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDL3LINESTRIKE (line 1234) | def CDL3LINESTRIKE(real: pd.DataFrame) -> pd.Series: ...
  function CDL3OUTSIDE (line 1245) | def CDL3OUTSIDE(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDL3OUTSIDE (line 1247) | def CDL3OUTSIDE(real: pd.DataFrame) -> pd.Series: ...
  function CDL3STARSINSOUTH (line 1258) | def CDL3STARSINSOUTH(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDL3STARSINSOUTH (line 1260) | def CDL3STARSINSOUTH(real: pd.DataFrame) -> pd.Series: ...
  function CDL3WHITESOLDIERS (line 1271) | def CDL3WHITESOLDIERS(real: Union[pd.Series, np.ndarray]) -> np.ndarray:...
  function CDL3WHITESOLDIERS (line 1273) | def CDL3WHITESOLDIERS(real: pd.DataFrame) -> pd.Series: ...
  function CDLABANDONEDBABY (line 1286) | def CDLABANDONEDBABY(real: Union[pd.Series, np.ndarray], penetration=0.3...
  function CDLABANDONEDBABY (line 1288) | def CDLABANDONEDBABY(real: pd.DataFrame, penetration=0.3) -> pd.Series: ...
  function CDLADVANCEBLOCK (line 1299) | def CDLADVANCEBLOCK(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLADVANCEBLOCK (line 1301) | def CDLADVANCEBLOCK(real: pd.DataFrame) -> pd.Series: ...
  function CDLBELTHOLD (line 1312) | def CDLBELTHOLD(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLBELTHOLD (line 1314) | def CDLBELTHOLD(real: pd.DataFrame) -> pd.Series: ...
  function CDLBREAKAWAY (line 1325) | def CDLBREAKAWAY(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLBREAKAWAY (line 1327) | def CDLBREAKAWAY(real: pd.DataFrame) -> pd.Series: ...
  function CDLCLOSINGMARUBOZU (line 1338) | def CDLCLOSINGMARUBOZU(real: Union[pd.Series, np.ndarray]) -> np.ndarray...
  function CDLCLOSINGMARUBOZU (line 1340) | def CDLCLOSINGMARUBOZU(real: pd.DataFrame) -> pd.Series: ...
  function CDLCONCEALBABYSWALL (line 1351) | def CDLCONCEALBABYSWALL(real: Union[pd.Series, np.ndarray]) -> np.ndarra...
  function CDLCONCEALBABYSWALL (line 1353) | def CDLCONCEALBABYSWALL(real: pd.DataFrame) -> pd.Series: ...
  function CDLCOUNTERATTACK (line 1364) | def CDLCOUNTERATTACK(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLCOUNTERATTACK (line 1366) | def CDLCOUNTERATTACK(real: pd.DataFrame) -> pd.Series: ...
  function CDLDARKCLOUDCOVER (line 1379) | def CDLDARKCLOUDCOVER(real: Union[pd.Series, np.ndarray], penetration=0....
  function CDLDARKCLOUDCOVER (line 1381) | def CDLDARKCLOUDCOVER(real: pd.DataFrame, penetration=0.5) -> pd.Series:...
  function CDLDOJI (line 1392) | def CDLDOJI(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLDOJI (line 1394) | def CDLDOJI(real: pd.DataFrame) -> pd.Series: ...
  function CDLDOJISTAR (line 1405) | def CDLDOJISTAR(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLDOJISTAR (line 1407) | def CDLDOJISTAR(real: pd.DataFrame) -> pd.Series: ...
  function CDLDRAGONFLYDOJI (line 1418) | def CDLDRAGONFLYDOJI(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLDRAGONFLYDOJI (line 1420) | def CDLDRAGONFLYDOJI(real: pd.DataFrame) -> pd.Series: ...
  function CDLENGULFING (line 1431) | def CDLENGULFING(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLENGULFING (line 1433) | def CDLENGULFING(real: pd.DataFrame) -> pd.Series: ...
  function CDLEVENINGDOJISTAR (line 1446) | def CDLEVENINGDOJISTAR(real: Union[pd.Series, np.ndarray], penetration=0...
  function CDLEVENINGDOJISTAR (line 1448) | def CDLEVENINGDOJISTAR(real: pd.DataFrame, penetration=0.3) -> pd.Series...
  function CDLEVENINGSTAR (line 1461) | def CDLEVENINGSTAR(real: Union[pd.Series, np.ndarray], penetration=0.3) ...
  function CDLEVENINGSTAR (line 1463) | def CDLEVENINGSTAR(real: pd.DataFrame, penetration=0.3) -> pd.Series: ...
  function CDLGAPSIDESIDEWHITE (line 1474) | def CDLGAPSIDESIDEWHITE(real: Union[pd.Series, np.ndarray]) -> np.ndarra...
  function CDLGAPSIDESIDEWHITE (line 1476) | def CDLGAPSIDESIDEWHITE(real: pd.DataFrame) -> pd.Series: ...
  function CDLGRAVESTONEDOJI (line 1487) | def CDLGRAVESTONEDOJI(real: Union[pd.Series, np.ndarray]) -> np.ndarray:...
  function CDLGRAVESTONEDOJI (line 1489) | def CDLGRAVESTONEDOJI(real: pd.DataFrame) -> pd.Series: ...
  function CDLHAMMER (line 1500) | def CDLHAMMER(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLHAMMER (line 1502) | def CDLHAMMER(real: pd.DataFrame) -> pd.Series: ...
  function CDLHANGINGMAN (line 1513) | def CDLHANGINGMAN(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLHANGINGMAN (line 1515) | def CDLHANGINGMAN(real: pd.DataFrame) -> pd.Series: ...
  function CDLHARAMI (line 1526) | def CDLHARAMI(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLHARAMI (line 1528) | def CDLHARAMI(real: pd.DataFrame) -> pd.Series: ...
  function CDLHARAMICROSS (line 1539) | def CDLHARAMICROSS(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLHARAMICROSS (line 1541) | def CDLHARAMICROSS(real: pd.DataFrame) -> pd.Series: ...
  function CDLHIGHWAVE (line 1552) | def CDLHIGHWAVE(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLHIGHWAVE (line 1554) | def CDLHIGHWAVE(real: pd.DataFrame) -> pd.Series: ...
  function CDLHIKKAKE (line 1565) | def CDLHIKKAKE(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLHIKKAKE (line 1567) | def CDLHIKKAKE(real: pd.DataFrame) -> pd.Series: ...
  function CDLHIKKAKEMOD (line 1578) | def CDLHIKKAKEMOD(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLHIKKAKEMOD (line 1580) | def CDLHIKKAKEMOD(real: pd.DataFrame) -> pd.Series: ...
  function CDLHOMINGPIGEON (line 1591) | def CDLHOMINGPIGEON(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLHOMINGPIGEON (line 1593) | def CDLHOMINGPIGEON(real: pd.DataFrame) -> pd.Series: ...
  function CDLIDENTICAL3CROWS (line 1604) | def CDLIDENTICAL3CROWS(real: Union[pd.Series, np.ndarray]) -> np.ndarray...
  function CDLIDENTICAL3CROWS (line 1606) | def CDLIDENTICAL3CROWS(real: pd.DataFrame) -> pd.Series: ...
  function CDLINNECK (line 1617) | def CDLINNECK(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLINNECK (line 1619) | def CDLINNECK(real: pd.DataFrame) -> pd.Series: ...
  function CDLINVERTEDHAMMER (line 1630) | def CDLINVERTEDHAMMER(real: Union[pd.Series, np.ndarray]) -> np.ndarray:...
  function CDLINVERTEDHAMMER (line 1632) | def CDLINVERTEDHAMMER(real: pd.DataFrame) -> pd.Series: ...
  function CDLKICKING (line 1643) | def CDLKICKING(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLKICKING (line 1645) | def CDLKICKING(real: pd.DataFrame) -> pd.Series: ...
  function CDLKICKINGBYLENGTH (line 1656) | def CDLKICKINGBYLENGTH(real: Union[pd.Series, np.ndarray]) -> np.ndarray...
  function CDLKICKINGBYLENGTH (line 1658) | def CDLKICKINGBYLENGTH(real: pd.DataFrame) -> pd.Series: ...
  function CDLLADDERBOTTOM (line 1669) | def CDLLADDERBOTTOM(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLLADDERBOTTOM (line 1671) | def CDLLADDERBOTTOM(real: pd.DataFrame) -> pd.Series: ...
  function CDLLONGLEGGEDDOJI (line 1682) | def CDLLONGLEGGEDDOJI(real: Union[pd.Series, np.ndarray]) -> np.ndarray:...
  function CDLLONGLEGGEDDOJI (line 1684) | def CDLLONGLEGGEDDOJI(real: pd.DataFrame) -> pd.Series: ...
  function CDLLONGLINE (line 1695) | def CDLLONGLINE(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLLONGLINE (line 1697) | def CDLLONGLINE(real: pd.DataFrame) -> pd.Series: ...
  function CDLMARUBOZU (line 1708) | def CDLMARUBOZU(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLMARUBOZU (line 1710) | def CDLMARUBOZU(real: pd.DataFrame) -> pd.Series: ...
  function CDLMATCHINGLOW (line 1721) | def CDLMATCHINGLOW(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLMATCHINGLOW (line 1723) | def CDLMATCHINGLOW(real: pd.DataFrame) -> pd.Series: ...
  function CDLMATHOLD (line 1736) | def CDLMATHOLD(real: Union[pd.Series, np.ndarray], penetration=0.5) -> n...
  function CDLMATHOLD (line 1738) | def CDLMATHOLD(real: pd.DataFrame, penetration=0.5) -> pd.Series: ...
  function CDLMORNINGDOJISTAR (line 1751) | def CDLMORNINGDOJISTAR(real: Union[pd.Series, np.ndarray], penetration=0...
  function CDLMORNINGDOJISTAR (line 1753) | def CDLMORNINGDOJISTAR(real: pd.DataFrame, penetration=0.3) -> pd.Series...
  function CDLMORNINGSTAR (line 1766) | def CDLMORNINGSTAR(real: Union[pd.Series, np.ndarray], penetration=0.3) ...
  function CDLMORNINGSTAR (line 1768) | def CDLMORNINGSTAR(real: pd.DataFrame, penetration=0.3) -> pd.Series: ...
  function CDLONNECK (line 1779) | def CDLONNECK(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLONNECK (line 1781) | def CDLONNECK(real: pd.DataFrame) -> pd.Series: ...
  function CDLPIERCING (line 1792) | def CDLPIERCING(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLPIERCING (line 1794) | def CDLPIERCING(real: pd.DataFrame) -> pd.Series: ...
  function CDLRICKSHAWMAN (line 1805) | def CDLRICKSHAWMAN(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLRICKSHAWMAN (line 1807) | def CDLRICKSHAWMAN(real: pd.DataFrame) -> pd.Series: ...
  function CDLRISEFALL3METHODS (line 1818) | def CDLRISEFALL3METHODS(real: Union[pd.Series, np.ndarray]) -> np.ndarra...
  function CDLRISEFALL3METHODS (line 1820) | def CDLRISEFALL3METHODS(real: pd.DataFrame) -> pd.Series: ...
  function CDLSEPARATINGLINES (line 1831) | def CDLSEPARATINGLINES(real: Union[pd.Series, np.ndarray]) -> np.ndarray...
  function CDLSEPARATINGLINES (line 1833) | def CDLSEPARATINGLINES(real: pd.DataFrame) -> pd.Series: ...
  function CDLSHOOTINGSTAR (line 1844) | def CDLSHOOTINGSTAR(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLSHOOTINGSTAR (line 1846) | def CDLSHOOTINGSTAR(real: pd.DataFrame) -> pd.Series: ...
  function CDLSHORTLINE (line 1857) | def CDLSHORTLINE(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLSHORTLINE (line 1859) | def CDLSHORTLINE(real: pd.DataFrame) -> pd.Series: ...
  function CDLSPINNINGTOP (line 1870) | def CDLSPINNINGTOP(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLSPINNINGTOP (line 1872) | def CDLSPINNINGTOP(real: pd.DataFrame) -> pd.Series: ...
  function CDLSTALLEDPATTERN (line 1883) | def CDLSTALLEDPATTERN(real: Union[pd.Series, np.ndarray]) -> np.ndarray:...
  function CDLSTALLEDPATTERN (line 1885) | def CDLSTALLEDPATTERN(real: pd.DataFrame) -> pd.Series: ...
  function CDLSTICKSANDWICH (line 1896) | def CDLSTICKSANDWICH(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLSTICKSANDWICH (line 1898) | def CDLSTICKSANDWICH(real: pd.DataFrame) -> pd.Series: ...
  function CDLTAKURI (line 1909) | def CDLTAKURI(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLTAKURI (line 1911) | def CDLTAKURI(real: pd.DataFrame) -> pd.Series: ...
  function CDLTASUKIGAP (line 1922) | def CDLTASUKIGAP(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLTASUKIGAP (line 1924) | def CDLTASUKIGAP(real: pd.DataFrame) -> pd.Series: ...
  function CDLTHRUSTING (line 1935) | def CDLTHRUSTING(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLTHRUSTING (line 1937) | def CDLTHRUSTING(real: pd.DataFrame) -> pd.Series: ...
  function CDLTRISTAR (line 1948) | def CDLTRISTAR(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLTRISTAR (line 1950) | def CDLTRISTAR(real: pd.DataFrame) -> pd.Series: ...
  function CDLUNIQUE3RIVER (line 1961) | def CDLUNIQUE3RIVER(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function CDLUNIQUE3RIVER (line 1963) | def CDLUNIQUE3RIVER(real: pd.DataFrame) -> pd.Series: ...
  function CDLUPSIDEGAP2CROWS (line 1974) | def CDLUPSIDEGAP2CROWS(real: Union[pd.Series, np.ndarray]) -> np.ndarray...
  function CDLUPSIDEGAP2CROWS (line 1976) | def CDLUPSIDEGAP2CROWS(real: pd.DataFrame) -> pd.Series: ...
  function CDLXSIDEGAP3METHODS (line 1987) | def CDLXSIDEGAP3METHODS(real: Union[pd.Series, np.ndarray]) -> np.ndarra...
  function CDLXSIDEGAP3METHODS (line 1989) | def CDLXSIDEGAP3METHODS(real: pd.DataFrame) -> pd.Series: ...
  function AVGPRICE (line 2000) | def AVGPRICE(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function AVGPRICE (line 2002) | def AVGPRICE(real: pd.DataFrame) -> pd.Series: ...
  function MEDPRICE (line 2013) | def MEDPRICE(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function MEDPRICE (line 2015) | def MEDPRICE(real: pd.DataFrame) -> pd.Series: ...
  function TYPPRICE (line 2026) | def TYPPRICE(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function TYPPRICE (line 2028) | def TYPPRICE(real: pd.DataFrame) -> pd.Series: ...
  function WCLPRICE (line 2039) | def WCLPRICE(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function WCLPRICE (line 2041) | def WCLPRICE(real: pd.DataFrame) -> pd.Series: ...
  function BETA (line 2055) | def BETA(real: Union[pd.Series, np.ndarray], timeperiod=5) -> np.ndarray...
  function BETA (line 2057) | def BETA(real: pd.DataFrame, timeperiod=5) -> pd.Series: ...
  function CORREL (line 2071) | def CORREL(real: Union[pd.Series, np.ndarray], timeperiod=30) -> np.ndar...
  function CORREL (line 2073) | def CORREL(real: pd.DataFrame, timeperiod=30) -> pd.Series: ...
  function LINEARREG (line 2086) | def LINEARREG(real: Union[pd.Series, np.ndarray], timeperiod=14) -> np.n...
  function LINEARREG (line 2088) | def LINEARREG(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function LINEARREG_ANGLE (line 2101) | def LINEARREG_ANGLE(real: Union[pd.Series, np.ndarray], timeperiod=14) -...
  function LINEARREG_ANGLE (line 2103) | def LINEARREG_ANGLE(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function LINEARREG_INTERCEPT (line 2116) | def LINEARREG_INTERCEPT(real: Union[pd.Series, np.ndarray], timeperiod=1...
  function LINEARREG_INTERCEPT (line 2118) | def LINEARREG_INTERCEPT(real: pd.DataFrame, timeperiod=14) -> pd.Series:...
  function LINEARREG_SLOPE (line 2131) | def LINEARREG_SLOPE(real: Union[pd.Series, np.ndarray], timeperiod=14) -...
  function LINEARREG_SLOPE (line 2133) | def LINEARREG_SLOPE(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function STDDEV (line 2147) | def STDDEV(real: Union[pd.Series, np.ndarray], timeperiod=5, nbdev=1.0) ...
  function STDDEV (line 2149) | def STDDEV(real: pd.DataFrame, timeperiod=5, nbdev=1.0) -> pd.Series: ...
  function TSF (line 2162) | def TSF(real: Union[pd.Series, np.ndarray], timeperiod=14) -> np.ndarray...
  function TSF (line 2164) | def TSF(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function VAR (line 2178) | def VAR(real: Union[pd.Series, np.ndarray], timeperiod=5, nbdev=1.0) -> ...
  function VAR (line 2180) | def VAR(real: pd.DataFrame, timeperiod=5, nbdev=1.0) -> pd.Series: ...
  function ATR (line 2193) | def ATR(real: Union[pd.Series, np.ndarray], timeperiod=14) -> np.ndarray...
  function ATR (line 2195) | def ATR(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function NATR (line 2208) | def NATR(real: Union[pd.Series, np.ndarray], timeperiod=14) -> np.ndarra...
  function NATR (line 2210) | def NATR(real: pd.DataFrame, timeperiod=14) -> pd.Series: ...
  function TRANGE (line 2221) | def TRANGE(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function TRANGE (line 2223) | def TRANGE(real: pd.DataFrame) -> pd.Series: ...
  function AD (line 2234) | def AD(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function AD (line 2236) | def AD(real: pd.DataFrame) -> pd.Series: ...
  function ADOSC (line 2250) | def ADOSC(real: Union[pd.Series, np.ndarray], fastperiod=3, slowperiod=1...
  function ADOSC (line 2252) | def ADOSC(real: pd.DataFrame, fastperiod=3, slowperiod=10) -> pd.Series:...
  function OBV (line 2264) | def OBV(real: Union[pd.Series, np.ndarray]) -> np.ndarray: ...
  function OBV (line 2266) | def OBV(real: pd.DataFrame) -> pd.Series: ...

FILE: tests/conftest.py
  function ford_2012_dates (line 6) | def ford_2012_dates():
  function ford_2012 (line 48) | def ford_2012():
  function series (line 213) | def series():

FILE: tests/test_abstract.py
  function assert_array_not_equal (line 19) | def assert_array_not_equal(x, y):
  function test_pararmeters (line 23) | def test_pararmeters():
  function test_pandas (line 28) | def test_pandas(ford_2012):
  function test_pandas_series (line 52) | def test_pandas_series(ford_2012):
  function test_SMA (line 75) | def test_SMA(ford_2012):
  function test_STOCH (line 91) | def test_STOCH(ford_2012):
  function test_doji_candle (line 114) | def test_doji_candle(ford_2012):
  function test_MAVP (line 120) | def test_MAVP(ford_2012):
  function test_info (line 131) | def test_info():
  function test_input_names (line 177) | def test_input_names():
  function test_input_arrays (line 197) | def test_input_arrays(ford_2012):
  function test_parameters (line 232) | def test_parameters():
  function test_lookback (line 265) | def test_lookback():
  function test_call_supports_same_signature_as_func_module (line 272) | def test_call_supports_same_signature_as_func_module(ford_2012):
  function test_parameter_type_checking (line 290) | def test_parameter_type_checking(ford_2012):
  function test_call_doesnt_cache_parameters (line 308) | def test_call_doesnt_cache_parameters(ford_2012):
  function test_call_without_arguments (line 324) | def test_call_without_arguments():
  function test_threading (line 332) | def test_threading():

FILE: tests/test_func.py
  function test_talib_version (line 9) | def test_talib_version():
  function test_num_functions (line 13) | def test_num_functions():
  function test_input_wrong_type (line 17) | def test_input_wrong_type():
  function test_input_lengths (line 23) | def test_input_lengths():
  function test_input_allnans (line 36) | def test_input_allnans():
  function test_input_nans (line 43) | def test_input_nans():
  function test_unstable_period (line 56) | def test_unstable_period():
  function test_compatibility (line 66) | def test_compatibility():
  function test_MIN (line 77) | def test_MIN(series):
  function test_MAX (line 90) | def test_MAX(series):
  function test_MOM (line 100) | def test_MOM():
  function test_BBANDS (line 112) | def test_BBANDS(series):
  function test_DEMA (line 130) | def test_DEMA(series):
  function test_EMAEMA (line 140) | def test_EMAEMA(series):
  function test_CDL3BLACKCROWS (line 148) | def test_CDL3BLACKCROWS():
  function test_RSI (line 158) | def test_RSI():
  function test_MAVP (line 172) | def test_MAVP():
  function test_MAXINDEX (line 188) | def test_MAXINDEX():

FILE: tests/test_pandas.py
  function test_MOM (line 8) | def test_MOM():
  function test_MAVP (line 28) | def test_MAVP():

FILE: tests/test_polars.py
  function test_MOM (line 8) | def test_MOM():
  function test_MAVP (line 24) | def test_MAVP():
  function test_TEVA (line 45) | def test_TEVA():
  function test_AVR (line 74) | def test_AVR():

FILE: tests/test_stream.py
  function test_streaming (line 7) | def test_streaming():
  function test_streaming_pandas (line 25) | def test_streaming_pandas():
  function test_CDL3BLACKCROWS (line 43) | def test_CDL3BLACKCROWS():
  function test_CDL3BLACKCROWS_pandas (line 53) | def test_CDL3BLACKCROWS_pandas():
  function test_MAXINDEX (line 63) | def test_MAXINDEX():

FILE: tools/example.py
  function func_example (line 12) | def func_example():
  function abstract_example (line 18) | def abstract_example():
  function plot (line 37) | def plot(odata, upper, middle, lower, kama):

FILE: tools/generate_abstract_stub.py
  function parse_signature (line 16) | def parse_signature(name: str) -> str:
  function output_type (line 34) | def output_type(func):
  function clean_doc (line 45) | def clean_doc(doc):
  function generate_function (line 50) | def generate_function(name: str):
  function main (line 77) | def main():

FILE: tools/generate_func.py
  function cleanup (line 209) | def cleanup(name):

FILE: tools/generate_stream.py
  function cleanup (line 76) | def cleanup(name):

FILE: tools/threads_talib.py
  function loop (line 25) | def loop():
Condensed preview — 62 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,061K chars).
[
  {
    "path": "AUTHORS",
    "chars": 174,
    "preview": "Project Founder and Lead Developer: John Benediktsson (https://github.com/mrjbq7)\nAbstract Interface Author and Maintain"
  },
  {
    "path": "CHANGELOG",
    "chars": 8327,
    "preview": "0.6.9\n=====\n\n- [NEW]: Upgrade to Cython 3.2.4\n\n- [FIX]: Adding ACCBANDS, AVGDEV, IMI to get_func_groups()\n\n- [FIX]: Addi"
  },
  {
    "path": "CITATION.cff",
    "chars": 295,
    "preview": "cff-version: 1.2.0\nmessage: \"If you use this software, please cite it as below.\"\ntitle: ta-lib-python\nversion: 0.6.5\ndat"
  },
  {
    "path": "COPYRIGHT",
    "chars": 163,
    "preview": "Copyright (C) 2012-2013 Silfur Capital, LLC. All Rights Reserved.\nThe contents of talib/abstract.pyx are Copyright (c) 2"
  },
  {
    "path": "DEVELOPMENT",
    "chars": 1848,
    "preview": "To get started developing on talib, clone the latest code from git and\ninstall:\n\n```\n$ git clone git://github.com/ta-lib"
  },
  {
    "path": "Dockerfile",
    "chars": 1548,
    "preview": "# Dockerfile for TA-Lib. To build:\n#\n#    docker build --rm -t talib .\n#\n# To run:\n#\n#    docker run --rm -it talib bash"
  },
  {
    "path": "LICENSE",
    "chars": 1269,
    "preview": "# BSD 2-Clause License\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted p"
  },
  {
    "path": "MANIFEST.in",
    "chars": 149,
    "preview": "include LICENSE\ninclude COPYRIGHT\ninclude README.md\ninclude talib/*.c\ninclude talib/*.pyx\ninclude talib/*.pxd\ninclude ta"
  },
  {
    "path": "Makefile",
    "chars": 572,
    "preview": ".PHONY: build\n\nbuild:\n\tpython3 -m pip install --use-pep517 -e .\n\ninstall:\n\tpython3 -m pip install --use-pep517 .\n\ntalib/"
  },
  {
    "path": "README.md",
    "chars": 22545,
    "preview": "# TA-Lib 📈\n\n<!-- Badges -->\n![Tests](https://github.com/ta-lib/ta-lib-python/actions/workflows/tests.yml/badge.svg)\n[![R"
  },
  {
    "path": "docs/abstract.md",
    "chars": 2805,
    "preview": "# Abstract API Quick Start\n\nIf you're already familiar with using the function API, you should feel right\nat home using "
  },
  {
    "path": "docs/doc_index.md",
    "chars": 768,
    "preview": "# Documentation\n\n* [Installation and Troubleshooting](install.md)\n* [Using the Function API](func.md)\n* [Using the Abstr"
  },
  {
    "path": "docs/func.md",
    "chars": 1611,
    "preview": "# Function API Examples\n\nSimilar to TA-Lib, the function interface provides a lightweight wrapper of\nthe exposed TA-Lib "
  },
  {
    "path": "docs/func_groups/cycle_indicators.md",
    "chars": 910,
    "preview": "# Cycle Indicator Functions\n### HT_DCPERIOD - Hilbert Transform - Dominant Cycle Period\nNOTE: The ``HT_DCPERIOD`` functi"
  },
  {
    "path": "docs/func_groups/math_operators.md",
    "chars": 1162,
    "preview": "# Math Operator Functions\n### ADD - Vector Arithmetic Add\n```python\nreal = ADD(real0, real1)\n```\n\n### DIV - Vector Arith"
  },
  {
    "path": "docs/func_groups/math_transform.md",
    "chars": 1095,
    "preview": "# Math Transform Functions\n### ACOS - Vector Trigonometric ACos\n```python\nreal = ACOS(real)\n```\n\n### ASIN - Vector Trigo"
  },
  {
    "path": "docs/func_groups/momentum_indicators.md",
    "chars": 4148,
    "preview": "# Momentum Indicator Functions\n### ADX - Average Directional Movement Index\nNOTE: The ``ADX`` function has an unstable p"
  },
  {
    "path": "docs/func_groups/overlap_studies.md",
    "chars": 2303,
    "preview": "# Overlap Studies Functions\n### ACCBANDS - Acceleration Bands\n```python\nupperband, middleband, lowerband = ACCBANDS(high"
  },
  {
    "path": "docs/func_groups/pattern_recognition.md",
    "chars": 6477,
    "preview": "# Pattern Recognition Functions\n### CDL2CROWS - Two Crows\n```python\ninteger = CDL2CROWS(open, high, low, close)\n```\n\n###"
  },
  {
    "path": "docs/func_groups/price_transform.md",
    "chars": 512,
    "preview": "# Price Transform Functions\n### AVGDEV - Average Deviation\n```python\nreal = AVGDEV(real, timeperiod=14)\n```\n\n### AVGPRIC"
  },
  {
    "path": "docs/func_groups/statistic_functions.md",
    "chars": 945,
    "preview": "# Statistic Functions\n### BETA - Beta\n```python\nreal = BETA(real0, real1, timeperiod=5)\n```\n\n### CORREL - Pearson's Corr"
  },
  {
    "path": "docs/func_groups/volatility_indicators.md",
    "chars": 486,
    "preview": "# Volatility Indicator Functions\n### ATR - Average True Range\nNOTE: The ``ATR`` function has an unstable period.  \n```py"
  },
  {
    "path": "docs/func_groups/volume_indicators.md",
    "chars": 379,
    "preview": "# Volume Indicator Functions\n### AD - Chaikin A/D Line\n```python\nreal = AD(high, low, close, volume)\n```\n\n### ADOSC - Ch"
  },
  {
    "path": "docs/funcs.md",
    "chars": 8326,
    "preview": "# All Supported Indicators and Functions\n\n* [Overlap Studies](func_groups/overlap_studies.md)\n* [Momentum Indicators](fu"
  },
  {
    "path": "docs/generate_html_pages.py",
    "chars": 8936,
    "preview": "\"\"\"\nUSAGE:\n\nTo convert markdown docs into html docs:\n$ python generate_html_pages.py /path/to/gh-pages/dir\n\nTo generate "
  },
  {
    "path": "docs/index.md",
    "chars": 10094,
    "preview": "# About\n\nThis is a Python wrapper for [TA-LIB](https://ta-lib.org) based on Cython\ninstead of SWIG. From the homepage:\n\n"
  },
  {
    "path": "docs/install.md",
    "chars": 1205,
    "preview": "# Installation\n\nYou can install from PyPI:\n\n```\n$ pip install TA-Lib\n```\n\nOr checkout the sources and run ``setup.py`` y"
  },
  {
    "path": "pyproject.toml",
    "chars": 1490,
    "preview": "[build-system]\nrequires = [\"setuptools\", \"wheel\", \"Cython\", \"numpy\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\n"
  },
  {
    "path": "requirements.txt",
    "chars": 13,
    "preview": "numpy\nCython\n"
  },
  {
    "path": "requirements_dev.txt",
    "chars": 65,
    "preview": "-r requirements.txt\nbeautifulsoup4\nmistune\nPygments\nbuild\ncython\n"
  },
  {
    "path": "requirements_test.txt",
    "chars": 41,
    "preview": "-r requirements.txt\npandas\npytest\npolars\n"
  },
  {
    "path": "setup.py",
    "chars": 2753,
    "preview": "#!/usr/bin/env python\n\nimport sys\nimport os\nimport os.path\nimport warnings\n\nfrom setuptools import setup, Extension\n\nimp"
  },
  {
    "path": "talib/__init__.py",
    "chars": 9589,
    "preview": "\nimport atexit\nfrom itertools import chain\nfrom functools import wraps\n\n# If polars is available, wrap talib functions s"
  },
  {
    "path": "talib/_abstract.pxi",
    "chars": 31111,
    "preview": "'''\nThis file Copyright (c) 2013 Brian A Cappello <briancappello at gmail>\n'''\nimport math\nimport threading\ntry:\n    fro"
  },
  {
    "path": "talib/_common.pxi",
    "chars": 4942,
    "preview": "cimport _ta_lib as lib\nfrom _ta_lib cimport TA_RetCode, TA_FuncUnstId\n\n__ta_version__ = lib.TA_GetVersionString()\n\ncpdef"
  },
  {
    "path": "talib/_func.pxi",
    "chars": 210567,
    "preview": "cimport numpy as np\nfrom numpy import nan\nfrom cython import boundscheck, wraparound\n\n# _ta_check_success: defined in _c"
  },
  {
    "path": "talib/_stream.pxi",
    "chars": 179587,
    "preview": "cimport numpy as np\nfrom cython import boundscheck, wraparound\ncimport _ta_lib as lib\nfrom _ta_lib cimport TA_RetCode\n# "
  },
  {
    "path": "talib/_ta_lib.c",
    "chars": 5114816,
    "preview": "/* Generated by Cython 3.2.4 */\n\n#ifndef PY_SSIZE_T_CLEAN\n#define PY_SSIZE_T_CLEAN\n#endif /* PY_SSIZE_T_CLEAN */\n/* Init"
  },
  {
    "path": "talib/_ta_lib.pxd",
    "chars": 45263,
    "preview": "#cython: language_level=2\n\ncdef extern from \"ta-lib/ta_defs.h\":\n\n    ctypedef int TA_RetCode\n    const TA_RetCode TA_SUC"
  },
  {
    "path": "talib/_ta_lib.pyi",
    "chars": 54887,
    "preview": "import numpy as np\nfrom enum import Enum\nfrom typing import Tuple\nfrom numpy.typing import NDArray\n\nclass MA_Type(Enum):"
  },
  {
    "path": "talib/_ta_lib.pyx",
    "chars": 234,
    "preview": "#cython: embedsignature=True, emit_code_comments=False\n\ninclude \"_common.pxi\"\ninclude \"_func.pxi\"\ninclude \"_abstract.pxi"
  },
  {
    "path": "talib/abstract.py",
    "chars": 799,
    "preview": "import talib._ta_lib as _ta_lib\nfrom ._ta_lib import Function as _Function, __TA_FUNCTION_NAMES__, _get_defaults_and_doc"
  },
  {
    "path": "talib/abstract.pyi",
    "chars": 55209,
    "preview": "\nfrom typing import overload, Tuple, Union\nimport numpy as np\nimport pandas as pd\n\n\"\"\"HT_DCPERIOD(real)\n\nHilbert Transfo"
  },
  {
    "path": "talib/common.pxd",
    "chars": 96,
    "preview": "from _ta_lib cimport TA_RetCode\ncpdef _ta_check_success(str function_name, TA_RetCode ret_code)\n"
  },
  {
    "path": "talib/deprecated.py",
    "chars": 105,
    "preview": "# TA_MAType enums\nMA_SMA, MA_EMA, MA_WMA, MA_DEMA, MA_TEMA, MA_TRIMA, MA_KAMA, MA_MAMA, MA_T3 = range(9)\n"
  },
  {
    "path": "talib/py.typed",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "talib/stream.py",
    "chars": 186,
    "preview": "import talib._ta_lib as _ta_lib\nfrom ._ta_lib import __TA_FUNCTION_NAMES__\n\n\nfor func_name in __TA_FUNCTION_NAMES__:\n   "
  },
  {
    "path": "tests/conftest.py",
    "chars": 16466,
    "preview": "import pytest\nimport numpy as np\n\n\n@pytest.fixture(scope='session')\ndef ford_2012_dates():\n    return np.asarray([\n     "
  },
  {
    "path": "tests/test_abstract.py",
    "chars": 12711,
    "preview": "import copy\nimport re\nimport threading\nimport time\n\nimport numpy as np\nimport pytest\nfrom numpy.testing import assert_ar"
  },
  {
    "path": "tests/test_func.py",
    "chars": 7367,
    "preview": "import numpy as np\nfrom numpy.testing import assert_array_equal, assert_array_almost_equal\nimport pytest\n\nimport talib\nf"
  },
  {
    "path": "tests/test_pandas.py",
    "chars": 2239,
    "preview": "import numpy as np\nfrom numpy.testing import assert_array_equal\nimport pandas as pd\n\nimport talib\n\n\ndef test_MOM():\n    "
  },
  {
    "path": "tests/test_polars.py",
    "chars": 3655,
    "preview": "import numpy as np\nfrom numpy.testing import assert_array_equal\nimport polars as pl\n\nimport talib\nfrom talib import abst"
  },
  {
    "path": "tests/test_stream.py",
    "chars": 2495,
    "preview": "import numpy as np\nimport pandas as pd\n\nfrom talib import stream\n\n\ndef test_streaming():\n    a = np.array([1,1,2,3,5,8,1"
  },
  {
    "path": "tools/build_talib_linux.sh",
    "chars": 1113,
    "preview": "#!/bin/bash\n\nTALIB_C_VER=\"${TALIB_C_VER:=0.6.4}\"\nCMAKE_GENERATOR=\"Unix Makefiles\"\nCMAKE_BUILD_TYPE=Release\nCMAKE_CONFIGU"
  },
  {
    "path": "tools/build_talib_macos.sh",
    "chars": 1113,
    "preview": "#!/bin/bash\n\nTALIB_C_VER=\"${TALIB_C_VER:=0.6.4}\"\nCMAKE_GENERATOR=\"Unix Makefiles\"\nCMAKE_BUILD_TYPE=Release\nCMAKE_CONFIGU"
  },
  {
    "path": "tools/build_talib_windows.cmd",
    "chars": 760,
    "preview": ":: Download and build TA-Lib \n@echo on\n\nif not defined TALIB_C_VER set TALIB_C_VER=0.6.4\n\nset CMAKE_GENERATOR=NMake Make"
  },
  {
    "path": "tools/example.py",
    "chars": 1791,
    "preview": "import sys\nimport numpy as np\nimport pylab\n\nimport talib\nfrom talib.abstract import Function\n\nTEST_LEN = int(sys.argv[1]"
  },
  {
    "path": "tools/generate_abstract_stub.py",
    "chars": 2029,
    "preview": "import inspect\nimport talib\nimport talib.abstract as abstract\n\nHEADER = \"\"\"\nfrom typing import overload, Tuple, Union\nim"
  },
  {
    "path": "tools/generate_func.py",
    "chars": 13504,
    "preview": "import os\nimport re\nimport sys\n\nfrom talib import abstract\n\n# FIXME: initialize once, then shutdown at the end, rather t"
  },
  {
    "path": "tools/generate_stream.py",
    "chars": 9082,
    "preview": "import os\nimport re\nimport sys\n\nfrom talib import abstract\n\n# FIXME: initialize once, then shutdown at the end, rather t"
  },
  {
    "path": "tools/perf_talib.py",
    "chars": 553,
    "preview": "import numpy\nimport talib\nimport time\nimport sys\n\nTEST_LEN = int(sys.argv[1]) if len(sys.argv) > 1 else 10000\nLOOPS = in"
  },
  {
    "path": "tools/threads_talib.py",
    "chars": 1246,
    "preview": "import time\nimport threading\n\nimport numpy\nimport copy\nfrom talib.abstract import RSI\nimport sys\nimport pandas as pd\n\nTE"
  }
]

About this extraction

This page contains the full source code of the TA-Lib/ta-lib-python GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 62 files (5.6 MB), approximately 1.5M tokens, and a symbol index with 1910 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!