ttrpy.volatility.bbands
module
Source code
# Author: joelowj
# License: Apache License, Version 2.0
import pandas as pd
from ttrpy.trend.sma import sma
from ttrpy.trend.ema import ema
from ttrpy.trend.wma import wma
from ttrpy.trend.dema import dema
from ttrpy.trend.tema import tema
def bbands(df, price, bbands, n_bdev_up, n_bdev_dn, ma_type, n):
"""
Bollinger Bands are volatility bands placed above and below a moving average.
Volatility is based on the standard deviation, which changes as volatility
increases and decreases. The bands automatically widen when volatility
increases and narrow when volatility decreases.
Parameters:
df (pd.DataFrame): DataFrame which contain the asset information.
price (string): the column name for the desired price type of the asset.
bbands (string): the column name for the bbands values.
n_bdev_up (int): the standard deviation multiplier of the upper band.
n_bdev_dn (int): the standard deviation multiplier of the lower band.
ma_type (int): moving average type of the time series.
n (int): the total number of periods.
Returns:
df (pd.DataFrame): Dataframe with average true range of the asset calculated.
"""
ma_types = {0: sma, 1: ema, 2: wma, 3: dema, 4: tema}
n_days_std = df[price].rolling(window=n).std(ddof=0)
df = ma_types[ma_type](df, price, bbands + "_middle_band", n)
df[bbands + "_upper_band"] = df[bbands + "_middle_band"] + (
n_days_std * n_bdev_up
)
df[bbands + "_lower_band"] = df[bbands + "_middle_band"] - (
n_days_std * n_bdev_dn
)
df = df.dropna().reset_index(drop=True)
return df
Functions
def bbands(df, price, bbands, n_bdev_up, n_bdev_dn, ma_type, n)
-
Bollinger Bands are volatility bands placed above and below a moving average. Volatility is based on the standard deviation, which changes as volatility increases and decreases. The bands automatically widen when volatility increases and narrow when volatility decreases.
Parameters
df
:pd.DataFrame
- DataFrame which contain the asset information.
price
:string
- the column name for the desired price type of the asset.
bbands()
:string
- the column name for the bbands values.
n_bdev_up
:int
- the standard deviation multiplier of the upper band.
n_bdev_dn
:int
- the standard deviation multiplier of the lower band.
ma_type
:int
- moving average type of the time series.
n
:int
- the total number of periods.
Returns
df
:pd.DataFrame
- Dataframe with average true range of the asset calculated.
Source code
def bbands(df, price, bbands, n_bdev_up, n_bdev_dn, ma_type, n): """ Bollinger Bands are volatility bands placed above and below a moving average. Volatility is based on the standard deviation, which changes as volatility increases and decreases. The bands automatically widen when volatility increases and narrow when volatility decreases. Parameters: df (pd.DataFrame): DataFrame which contain the asset information. price (string): the column name for the desired price type of the asset. bbands (string): the column name for the bbands values. n_bdev_up (int): the standard deviation multiplier of the upper band. n_bdev_dn (int): the standard deviation multiplier of the lower band. ma_type (int): moving average type of the time series. n (int): the total number of periods. Returns: df (pd.DataFrame): Dataframe with average true range of the asset calculated. """ ma_types = {0: sma, 1: ema, 2: wma, 3: dema, 4: tema} n_days_std = df[price].rolling(window=n).std(ddof=0) df = ma_types[ma_type](df, price, bbands + "_middle_band", n) df[bbands + "_upper_band"] = df[bbands + "_middle_band"] + ( n_days_std * n_bdev_up ) df[bbands + "_lower_band"] = df[bbands + "_middle_band"] - ( n_days_std * n_bdev_dn ) df = df.dropna().reset_index(drop=True) return df