Python으로 미디언(Median) 지표 구현하기

미디언(Median) 지표는 시장 방향과 변동성을 측정하는 데 사용할 수 있는 도구입니다. ATR이 범위의 중앙에서 벗어나는 방식에 따라 채널을 형성합니다. 이 지표는 지정된 길이에 대한 고점과 저점 사이의 평균값의 중앙값을 표시합니다. 이 중앙값은 동일한 길이에 대한 EMA와 비교되며, 중앙값과 EMA 사이의 공간은 두 값 중 더 높은 값에 따라 색상이 지정된 구름으로 표시됩니다. 녹색 구름은 중앙값이 높을 때 나타나며 상승 추세를 나타내고 보라색 구름은 하락 추세를 나타냅니다.

출처: 트레이딩뷰

import pandas as pd
import ccxt
import pinetopy as pp # 0.1.0 버전 이상
import numpy as np

# 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'])

def main(df, length=3, atr_length=14, atr_mult=2):
    hl2 = (df['high'] + df['low']) / 2
    df['median'] = hl2.rolling(window=length).apply(lambda x: np.percentile(x, 50), raw=True)
    atr = atr_mult * pp.atr(df, length=atr_length)
    df['upper_band'] = (df['median'] + atr)
    df['lower_band'] = (df['median'] - atr)
    df['median_ema'] = pp.ema(df['median'], length=length)

    return df

print(main(df, length=3, atr_length=14, atr_mult=2)) # TradingView Default Settings

트레이딩뷰 차트와 비교