Python으로 BBTrend 지표 구현하기

BBTrend 지표는 볼린저 밴드(Bollinger Bands)의 창시자인 John Bollinger가 개발한 추세 분석 지표입니다. 기존 볼린저 밴드와 함께 사용하도록 설계된 BBTrend는 두 개의 서로 다른 기간을 가진 볼린저 밴드를 기반으로 현재 시장의 추세 방향과 강도를 평가합니다. 히스토그램 형태로 나타나며, 기존의 볼린저 밴드는 가격의 변동성만을 측정하는 데 반해, BBTrend는 추세의 방향과 강도를 정량적으로 분석할 수 있도록 돕습니다.

히스토그램 값을 구하고 색 구분은 strong_up / up / strong_down / down 총 4개로 구분하겠습니다.

pip install pandas ccxt pinetopy numpy

import pandas as pd
import ccxt
import pinetopy as pp
import numpy as np

# 예시) 비트코인 선물 BTCUSDT, 1시간 봉 
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'])

def main(df, short=20, long=50, mult=2.0):
    
    # 볼린저 밴드 계산
    short_bbands = pp.bband(df, length=short, factor=mult)
    long_bbands = pp.bband(df, length=long, factor=mult)

    # BBTrend 계산
    bbtrend = (np.abs(short_bbands['lower'] - long_bbands['lower']) - np.abs(short_bbands['upper'] - long_bbands['upper'])) / short_bbands['basis'] * 100

    # 히스토그램 색상 구분
    posColorStrong = 'strong_up'
    negColorStrong = 'strong_down'
    posColorWeak = 'up'
    negColorWeak = 'down'

    bbtrend_color = []
    
    bbtrend_color = np.where(
        bbtrend > 0, 
        np.where(bbtrend >= bbtrend.shift(1), posColorStrong, posColorWeak),
        np.where(bbtrend > bbtrend.shift(1), negColorWeak, negColorStrong)
    )

    df['bbtrend'] = bbtrend.round(1)
    df['bbtrend_color'] = bbtrend_color

    return df

print(main(df, short=20, long=50, mult=2.0)) # 트레이딩뷰 기본 설정

트레이딩뷰 차트와 비교