Python으로 프라이스 오실레이터(PPO) 구현하기

PPO(Percentage Price Oscillator)는 주식이나 다른 자산의 가격 변동성 및 추세 강도를 분석하는 기술적 지표입니다. 기본적으로, 두 이동 평균 간의 차이를 백분율로 표현하여 가격 변동에 대한 상대적인 강도를 측정하는 데 사용됩니다. MACD(Moving Average Convergence Divergence)와 유사하지만, 차이점은 백분율로 표시된다는 점입니다. PPO는 상대적인 가격 강도를 비교하기 때문에 추세 전환을 감지하는 데 유용하며, 퍼센트로 계산하여 가격 변동에 대한 민감도를 높일 수 있습니다.

pip install pandas ccxt pinetopy ta

import pandas as pd
import ccxt
import pinetopy as pp
import ta.momentum

# 예시) 바이낸스 선물 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, fast=12, slow=26, signal=9):

    data = ta.momentum.PercentagePriceOscillator(
        close=df['close'], 
        window_fast=fast, 
        window_slow=slow, 
        window_sign=signal
    )
    df['histogram'] = data.ppo_hist().round(2)
    df['ppo'] = data.ppo().round(2)
    df['signal'] = data.ppo_signal().round(2)

    return df

print(main(df, fast=12, slow=26, signal=9)) # 트레이딩뷰 디폴트 값

트레이딩뷰 차트와 비교
변동성이 있는 구간을 체크해 보겠습니다.