Metadata-Version: 2.4
Name: OctoBot-Tulipy
Version: 0.4.11b13
Summary: Financial Technical Analysis Indicator Library. Python bindings for https://github.com/TulipCharts/tulipindicators
Home-page: https://github.com/Drakkar-Software/tulipy
Author: Drakkar-Software
License: LGPL-3.0
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Financial and Insurance Industry
Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Cython
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Office/Business :: Financial
Classifier: Topic :: Scientific/Engineering :: Information Analysis
Description-Content-Type: text/markdown; charset=UTF-8
License-File: LICENSE
License-File: AUTHORS
Requires-Dist: numpy==2.4.2
Dynamic: author
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: license
Dynamic: license-file
Dynamic: requires-dist
Dynamic: summary

# tulipy
*Forked by Drakkar-Software for the only purpose of keeping dependencies version up to date.*

## Python bindings for [Tulip Indicators](https://tulipindicators.org/)

Tulipy requires [numpy](http://www.numpy.org/) as all inputs and outputs are numpy arrays (`dtype=np.float64`).

## Installation

You can install via `pip install OctoBot-Tulipy`.
If a wheel is not available for your system, you will need to `pip install Cython numpy` to build from the source distribution.
When building from source on Windows, you will need the Microsoft Visual C++ Build Tools installed.

## Usage


```python
import numpy as np
import tulipy as ti
```


```python
ti.TI_VERSION
```




    '0.8.4'




```python
DATA = np.array([81.59, 81.06, 82.87, 83,    83.61,
                 83.15, 82.84, 83.99, 84.55, 84.36,
                 85.53, 86.54, 86.89, 87.77, 87.29])
```

Information about indicators are exposed as properties:


```python
def print_info(indicator):
    print("Type:", indicator.type)
    print("Full Name:", indicator.full_name)
    print("Inputs:", indicator.inputs)
    print("Options:", indicator.options)
    print("Outputs:", indicator.outputs)
```


```python
print_info(ti.sqrt)
```

    Type: simple
    Full Name: Vector Square Root
    Inputs: ['real']
    Options: []
    Outputs: ['sqrt']


Single outputs are returned directly. Indicators returning multiple outputs use
a tuple in the order indicated by the `outputs` property.


```python
ti.sqrt(DATA)
```




    array([ 9.03271831,  9.00333272,  9.10329611,  9.11043358,  9.14385039,
            9.11866218,  9.1016482 ,  9.16460583,  9.19510739,  9.18477   ,
            9.24824308,  9.30268778,  9.32148057,  9.36856446,  9.34291175])




```python
print_info(ti.sma)
```

    Type: overlay
    Full Name: Simple Moving Average
    Inputs: ['real']
    Options: ['period']
    Outputs: ['sma']



```python
ti.sma(DATA, period=5)
```




    array([ 82.426,  82.738,  83.094,  83.318,  83.628,  83.778,  84.254,
            84.994,  85.574,  86.218,  86.804])



Invalid options will throw an `InvalidOptionError`:


```python
try:
    ti.sma(DATA, period=-5)
except ti.InvalidOptionError:
    print("Invalid Option!")
```

    Invalid Option!



```python
print_info(ti.bbands)
```

    Type: overlay
    Full Name: Bollinger Bands
    Inputs: ['real']
    Options: ['period', 'stddev']
    Outputs: ['bbands_lower', 'bbands_middle', 'bbands_upper']



```python
ti.bbands(DATA, period=5, stddev=2)
```




    (array([ 80.53004219,  80.98714192,  82.53334324,  82.47198345,
             82.41775044,  82.43520292,  82.51133078,  83.14261781,
             83.53648779,  83.8703237 ,  85.28887096]),
     array([ 82.426,  82.738,  83.094,  83.318,  83.628,  83.778,  84.254,
             84.994,  85.574,  86.218,  86.804]),
     array([ 84.32195781,  84.48885808,  83.65465676,  84.16401655,
             84.83824956,  85.12079708,  85.99666922,  86.84538219,
             87.61151221,  88.5656763 ,  88.31912904]))



If inputs of differing sizes are provided, they are right-aligned and trimmed from the left:


```python
DATA2 = np.array([83.15, 82.84, 83.99, 84.55, 84.36])
```


```python
# 'high' trimmed to DATA[-5:] == array([ 85.53,  86.54,  86.89,  87.77,  87.29])
ti.aroonosc(high=DATA, low=DATA2, period=2)
```




    array([  50.,  100.,   50.])


