Python으로 파라볼릭 SAR 구현하기

파라볼릭 SAR은 앞으로 나올 수 있는 스탑 및 리버스 포인트를 찾아내는 데 주로 쓰이는 타임과 프라이스 테크니컬 어낼리시스 툴입니다. 사실, 파라볼릭 SAR 에서 SAR 는 “스탑 앤 리버스”를 말합니다. 이 인디케이터는 불리쉬 트렌드일 때는 프라이스 아래쪽, 베어리쉬 트렌드일 때는 프라이스 위쪽에 파라볼라를 만들어 냅니다.

출처: 트레이딩뷰

파라볼릭 값과, 현재 트렌드를 LONG, SHORT, FLAT으로 구분 하겠습니다.

pip install pandas ccxt pinetopy numpy ta

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

# 예시) 바이낸스 선물 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 psar(df, step=0.02, max_step=0.2):
    sar = ta.trend.PSARIndicator(high=df['high'], low=df['low'], close=df['close'], step=step, max_step=max_step).psar()
    df['PSAR'] = sar
    df['PSAR_TREND'] = np.where(df['close'] > df['PSAR'], 'LONG', np.where(df['close'] < df['PSAR'], 'SHORT', 'FLAT'))
    return df

print(psar(df, step=0.02, max_step=0.2)) # 트레이딩뷰 디폴트 값

트레이딩뷰 차트와 비교

round(1) 처리하면 트레이딩뷰 차트와 동일한 결과를 얻을 수 있습니다. 파라볼릭 plot이 상단에 있으므로 SHORT 트렌드 입니다.