DPO(Detrended Price Oscillator) 지표는 주가의 추세에서 벗어난 주기적 요소를 확인하기 위해 사용되는 기술적 분석 도구입니다. 이 지표는 중심선을 기준으로 주가의 변동성을 측정하여 시장의 과열이나 과매도 상태를 나타내는데 유용합니다.
💡 DPO는 다음과 같은 방식으로 계산됩니다.
이동 평균을 (N/2 + 1)일 전의 가격에서 뺍니다. 여기서 N은 이동 평균의 길이입니다. 이 공식은 추세에서 벗어난 가격 변동만을 고려하게 합니다. 예를 들어, 20일 이동 평균을 사용할 경우, DPO는 20일 이동 평균을 11일 전 가격에서 빼서 계산합니다. 이렇게 하면 장기 추세의 영향을 제거하고, 단기 주기적 변동을 파악할 수 있습니다.
DPO 구현
import pandas as pd
import ccxt
import pinetopy as pp
# 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'])
# TradingView Default Settings
def main(df, period=21):
ma = df['close'].rolling(window=period).mean()
barsback = int(period / 2 + 1)
shifted_ma = ma.shift(barsback)
df['DPO'] = df['close'] - shifted_ma
return df[['time', 'DPO']]
print(main(df))
Check
트레이딩뷰 차트와 비교

