Metadata-Version: 2.1
Name: bamboo-ta
Version: 0.0.4
Summary: TA library for Pandas
Home-page: https://github.com/DutchCryptoDad/bamboo-ta
Author: DutchCryptoDad (DCD)
Author-email: <dutchcryptodad@gmail.com>
Keywords: python,pandas,numpy,trading,indicator,technical analysis
Classifier: Development Status :: 1 - Planning
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: Unix
Classifier: Operating System :: MacOS :: MacOS X
Classifier: Operating System :: Microsoft :: Windows
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pandas
Requires-Dist: numpy
Provides-Extra: def
Requires-Dist: pytest; extra == "def"
Requires-Dist: twine; extra == "def"

# bamboo-ta

<p align="center">
  <a href="https://github.com/DutchCryptoDad/bamboo-ta">
    <img src="images/bamboo.png" alt="Bamboo TA" width="250">
  </a>
</p>


The Bamboo TA Indicators module provides a comprehensive suite of technical analysis tools for trading. This module imports various submodules, each dedicated to a specific category of technical indicators.

[![license](https://img.shields.io/github/license/DutchCryptoDad/bamboo-ta)](#license)
[![Python Version](https://img.shields.io/pypi/pyversions/bamboo-ta?style=flat)](https://pypi.org/project/bamboo-ta/)
[![PyPi Version](https://img.shields.io/pypi/v/bamboo-ta?style=flat)](https://pypi.org/project/bamboo-ta/)
[![Package Status](https://img.shields.io/pypi/status/bamboo-ta?style=flat)](https://pypi.org/project/bamboo-ta/)
[![Downloads](https://img.shields.io/pypi/dm/bamboo_ta?style=flat)](https://pypistats.org/packages/bamboo_ta)
[![Stars](https://img.shields.io/github/stars/DutchCryptoDad/bamboo-ta?style=flat)](#stars)
[![Forks](https://img.shields.io/github/forks/DutchCryptoDad/bamboo-ta?style=flat)](#forks)
[![Used By](https://img.shields.io/badge/used_by-0-orange.svg?style=flat)](#usedby)
[![Contributors](https://img.shields.io/github/contributors/DutchCryptoDad/bamboo-ta?style=flat)](#contributors)
[![Issues](https://img.shields.io/github/issues-raw/DutchCryptoDad/bamboo-ta?style=flat)](#issues)
[![Closed Issues](https://img.shields.io/github/issues-closed-raw/DutchCryptoDad/bamboo-ta?style=flat)](#closed-issues)
[![Support me on Patreon](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3Ddutchalgotrading%26type%3Dpatrons&style=flat)](https://patreon.com/dutchalgotrading)
[![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UC-AOcefy1x7lTc17JiqaxqA)
](https://www.youtube.com/@dutchalgotrading)
[![YouTube Channel Views](https://img.shields.io/youtube/channel/views/UC-AOcefy1x7lTc17JiqaxqA)](https://www.youtube.com/@dutchalgotrading)


## Installation

### Stable version

Install bamboo-ta from Pypi with:

``pip install bamboo-ta``

Or you can install this directly from the Github repository with the following command:

``$ pip install -U git+https://github.com/DutchCryptoDad/bamboo-ta``

### Development version

The bleeding edge development version can be installed with:

``$ pip install -U git+https://github.com/DutchCryptoDad/bamboo-ta.git@development``

### How to Use This Module

Using the complete module all at once.

1. **Importing the complete library**: Import the library into your Python scripts or Notebook.
   ```python
   import bamboo_ta as bta
   ```

2. **Applying Indicators**: Use the imported indicators on your data.
   ```python
   df['lsma'] = bta.calculate_lsma(df, 14)
   ```

Or individual indicators.

1. **Importing Indicators**: Import the necessary submodules or individual indicators directly from `bamboo_ta`.
   ```python
   from bamboo_ta.trend import AlligatorBands, BollingerTrend, EMA, HMA, LSMA, SMA, WMA, ZLEMA
   ```

2. **Applying Indicators**: Use the imported indicators on your data.
   ```python
   result = AlligatorBands(df, "high", 13, 8, 5, jaw_shift=8, teeth_shift=5, lips_shift=3)
   ```

3. **Combining Indicators**: Combine multiple indicators for comprehensive analysis.
   ```python
   df['ema'] = EMA(df, "close", 21)
   df['sma'] = SMA(df, "close", 50)
   ```

## Bamboo TA Indicators Module

### Submodules

1. **candles**
   - **Description**: Contains indicators related to candlestick patterns.

2. **cycles**
   - **Description**: Includes indicators for cycle analysis.

3. **momentum**
   - **Description**: Provides momentum-based indicators.

4. **performance**
   - **Description**: Contains performance-related indicators.

5. **statistics**
   - **Description**: Statistical indicators for trading analysis.

6. **trend**
   - **Description**: Includes trend-based indicators.
   - **Indicators**:
     - **AlligatorBands**: Bill Williams Alligator Indicator.
     - **BollingerTrend**: Bollinger Trend Indicator.
     - **EMA**: Exponential Moving Average.
     - **HMA**: Hull Moving Average.
     - **LSMA**: Least Squares Moving Average.
     - **SMA**: Simple Moving Average.
     - **WMA**: Weighted Moving Average.
     - **ZLEMA**: Zero Lag Exponential Moving Average.

7. **utility**
   - **Description**: Utility functions and helper methods for technical analysis.

8. **volatility**
   - **Description**: Volatility indicators.

9. **volume**
   - **Description**: Indicators related to trading volume.

### Trend Indicators

#### AlligatorBands

- **Description**: Calculates Bill Williams Alligator Indicator which consists of three smoothed moving averages (jaw, teeth, lips) shifted into the future.
- **Usage**: 
  ```python
  alligator_result = AlligatorBands(df, "high", 13, 8, 5, jaw_shift=8, teeth_shift=5, lips_shift=3)
  df['jaw'] = alligator_result['jaw']
  df['teeth'] = alligator_result['teeth']
  df['lips'] = alligator_result['lips']
  ```

#### BollingerTrend

- **Description**: Determines the trend based on the distance between short and long Bollinger Bands.
- **Usage**: 
  ```python
  df['BBTrend'] = BollingerTrend(df, "close", 20, 50, 2.0)
  ```

#### EMA (Exponential Moving Average)

- **Description**: Calculates the Exponential Moving Average, which gives more weight to recent prices.
- **Usage**: 
  ```python
  df['ema'] = EMA(df, "close", 21)
  ```

#### HMA (Hull Moving Average)

- **Description**: Computes the Hull Moving Average, a smoother moving average with reduced lag.
- **Usage**: 
  ```python
  df['hma'] = HMA(df, "close", 9)
  ```

#### LSMA (Least Squares Moving Average)

- **Description**: Uses linear regression to determine the least squares moving average.
- **Usage**: 
  ```python
  df['lsma'] = LSMA(df, "close", 50)
  ```

#### SMA (Simple Moving Average)

- **Description**: Computes the Simple Moving Average, which is the unweighted mean of the previous data points.
- **Usage**: 
  ```python
  df['sma'] = SMA(df, "close", 50)
  ```

#### WMA (Weighted Moving Average)

- **Description**: Calculates the Weighted Moving Average with linear weights.
- **Usage**: 
  ```python
  df['wma'] = WMA(df, "close", 9)
  ```

#### ZLEMA (Zero Lag Exponential Moving Average)

- **Description**: Calculates an Exponential Moving Average adjusted for lag.
- **Usage**: 
  ```python
  df['zlema'] = ZLEMA(df, "close", 21)
  ```

#### Practical example

Example script:

```
# -*- coding: utf-8 -*-
# Import necessary libraries
import pandas_ta as pta
import bamboo_ta as bta
import pandas as pd
from pandas import DataFrame
import numpy as np

# create dataframe and read the json data in the datasets directory
df = pd.read_json("./testdata/BTC_USDT-1d.json")
# name the columns that are loaded into the dataframe
df.columns = ['date', 'open', 'high', 'low', 'close', 'volume']
# the date column consists of unix time in milliseconds, so this command changes this data into human readable form.
df['date'] = (pd.to_datetime(df['date'], unit='ms'))

print(df)  # This command outputs the dataframe

# Using the pandas_ta library
df['imi_ema'] = pta.ema(close=df['close'], length=7)

df['lsma'] = bta.calculate_lsma(df, 14)  # Using the bamboo_ta library

print(df)
```

Output:

```
➜  python test.py 
           date      open      high       low     close         volume
0    2017-08-17   4261.48   4485.39   4200.74   4285.08     795.150377
1    2017-08-18   4285.08   4371.52   3938.77   4108.37    1199.888264
2    2017-08-19   4108.37   4184.69   3850.00   4139.98     381.309763
3    2017-08-20   4120.98   4211.08   4032.62   4086.29     467.083022
4    2017-08-21   4069.13   4119.62   3911.79   4016.00     691.743060
...         ...       ...       ...       ...       ...            ...
1967 2023-01-05  16850.36  16879.82  16753.00  16831.85  163473.566410
1968 2023-01-06  16831.85  17041.00  16679.00  16950.65  207401.284150
1969 2023-01-07  16950.31  16981.91  16908.00  16943.57  104526.568800
1970 2023-01-08  16943.83  17176.99  16911.00  17127.83  135155.896950
1971 2023-01-09  17127.83  17398.80  17104.66  17178.26  266211.527230

[1972 rows x 6 columns]
           date      open      high       low     close         volume       imi_ema          lsma
0    2017-08-17   4261.48   4485.39   4200.74   4285.08     795.150377           NaN           NaN
1    2017-08-18   4285.08   4371.52   3938.77   4108.37    1199.888264           NaN           NaN
2    2017-08-19   4108.37   4184.69   3850.00   4139.98     381.309763           NaN           NaN
3    2017-08-20   4120.98   4211.08   4032.62   4086.29     467.083022           NaN           NaN
4    2017-08-21   4069.13   4119.62   3911.79   4016.00     691.743060           NaN           NaN
...         ...       ...       ...       ...       ...            ...           ...           ...
1967 2023-01-05  16850.36  16879.82  16753.00  16831.85  163473.566410  16737.537534  16633.800286
1968 2023-01-06  16831.85  17041.00  16679.00  16950.65  207401.284150  16790.815651  16678.202286
1969 2023-01-07  16950.31  16981.91  16908.00  16943.57  104526.568800  16829.004238  16746.722286
1970 2023-01-08  16943.83  17176.99  16911.00  17127.83  135155.896950  16903.710678  16816.734571
1971 2023-01-09  17127.83  17398.80  17104.66  17178.26  266211.527230  16972.348009  16930.485143

[1972 rows x 8 columns]
```


## Creating the Python pip package (personal notes)

After creating and testing the code, make a Python pip package as follows:

In the library folder, create the package

``python3 setup.py sdist bdist_wheel``

Before uploading the package to Pypi it is wise to test the package on your system.

Load the package to the system with:

``pip install .``

After you've checked that everything is worknig correctly, then use the following command to upload to Pypi.
You'll have to install twine for this (``pip install twine`` or ``sudo apt install twine``).

```
# Check first

twine check dist/*

# Test upload first

twine upload -r testpypi dist/*

# Upload to Pypi

twine upload dist/*
```

Note: uploading new versions requires to delete the older versions from the /dist folder.

Another option is to use the ``--skip-existing`` option like this:

```
twine upload -r --skip-existing testpypi dist/*
twine upload --skip-existing dist/*
```

### Uploading with 2FA enabled

First create an API token (at https://test.pypi.org/manage/account/token/).

Create a file .pypirc in your home folder (e.g. ``nano $HOME/.pypirc``)

Add the given token to the file like this:

```
[testpypi]
  username = __token__
  password = pypi-AgENdalaljdljhdalkHTaddsdSQtMjBjOS00ZjgxLWIyZDMtYWViMDAwOTk3MWZmAAIqWzMsImU3YjkzMGVmLWQzMFmZkZCJdAAAGIB6NZ-rSrzc8UXj38ijwCRmZwkFLnhhNP
```

Save the file and reload environment if necessary.

Now you an upload libraries without having to use the password.

## Other sources

* [ThinkOrSwim Tech indicators](https://tlc.thinkorswim.com/center/reference/Tech-Indicators)
