Python으로 TradingView ATR 구현하기

ATR (Average True Range)은 주식, 외환, 기타 금융 시장에서 자산의 변동성을 측정하는 지표입니다.
각 기간(예: 일, 시간, 분) 동안의 가격 범위를 계산하여 평균화함으로써 시장의 변동성을 나타냅니다.

‘진정한 범위(True Range)’는 다음 세 가지 값 중 가장 큰 값으로 계산됩니다:
1. 현재 고가와 저가 사이의 범위
2. 이전 종가와 현재 고가 사이의 차이
3. 이전 종가와 현재 저가 사이의 차이


이렇게 계산된 진정한 범위들을 일정 기간 동안 평균화하여 ATR을 얻습니다. 일반적으로 ATR은 14일 기간 동안 계산되지만, 사용자의 거래 스타일과 목적에 따라 기간을 조정할 수 있습니다.

트레이딩뷰에서 ATR지표를 추가하면 기본적으로 ta.tr 함수를 사용합니다.

pip install pandas ccxt

import pandas as pd
import ccxt

# 예시) 바이낸스 선물 BTCUSDT, 1시간 봉 
bnb = ccxt.binance({'options': { 'defaultType': 'future' }}) 

def ATR(length=14):
    ohlcv = bnb.fetch_ohlcv(symbol="BTC/USDT", timeframe="1h", limit=500)
    df = pd.DataFrame(ohlcv, columns=['time', 'open', 'high', 'low', 'close', 'volume'])
    
    _df = df.copy()
    _df['HL'] = _df['high'] - _df['low']  # 고가와 저가의 차이
    _df['HC'] = abs(_df['high'] - _df['close'].shift())  # 고가와 이전 종가의 차이
    _df['LC'] = abs(_df['low'] - _df['close'].shift())  # 저가와 이전 종가의 차이
    
    _df['TR'] = _df[['HL', 'HC', 'LC']].max(axis=1)
    df['ATR'] = _df['TR'].ewm(alpha=1/length, adjust=False).mean()

    return df

print(ATR()) # 기본 14, 파라미터 변경하여 사용