Python으로 Bollinger Bandwidth(BBW) 구현하기

Bollinger Bandwidth(BBW)는 볼린저 밴드(Bollinger Bands)의 상한선(Upper Band)과 하한선(Lower Band) 간의 거리를 측정하여 변동성을 나타내는 지표입니다. 이 지표는 가격 변동성이 증가할 때 값이 커지고, 변동성이 감소할 때 값이 작아집니다. 일반적으로 좁아졌다가(스퀴즈) 다시 벌어질 때 강한 트렌드가 시작될 가능성이 높다고 해석합니다.

import pandas as pd
import ccxt
import pinetopy as pp

# Binance Futures, BTCUSDT, 1h
bnb = ccxt.binance({'options': { 'defaultType': 'future' }}) 
ohlcv = bnb.fetch_ohlcv(symbol="BTC/USDT", timeframe="1h", limit=500)
df = pd.DataFrame(ohlcv, columns=['time', 'open', 'high', 'low', 'close', 'volume'])
df['time'] = pp.kst(df['time'])

# TradingView Default Settings
def main(df, length=20, mult=2.0, expLen=125, conLen=125):
    _df = df.copy()
    _df[['mid','upper', 'lower']] = pp.bband(df=df, length=length, factor=mult)
    df['bbw'] = (((_df['upper'] - _df['lower']) / _df['mid']) * 100).round(2)
    df['bbw_max'] = df['bbw'].rolling(window=expLen).max().round(2)
    df['bbw_min'] = df['bbw'].rolling(window=conLen).min().round(2)

    return df[['time', 'bbw', 'bbw_max', 'bbw_min']]

print(main(df))

트레이딩뷰 차트와 비교