Python으로 얼티밋 오실레이터(UO) 구현하기

얼티밋 오실레이터(Ultimate Oscillator, UO) 는 래리 윌리엄스(Larry Williams)가 개발한 기술적 지표로, 가격의 모멘텀을 다중 시간 프레임에서 분석하여 과매수와 과매도 상태를 파악하는 데 사용됩니다.
세가지 서로 다른 타임프레임에 걸쳐 모멘텀을 재는데 쓰이는 테크니컬 어낼리시스 툴입니다. 많은 모멘텀 오실레이터가 가진 문제는 프라이스가 빠르게 오르거나 내리면 거짓 다이버전스 트레이딩 시그널을 만들 수 있다는 것입니다. 얼티미트 오실레이터는 대부분의 다른 모멘텀 오실레이터에서 쓰이는 단일 타임프레임과는 반대로 멀티플 타임프레임을 써서 이를 바로 잡으려 합니다.

출처 : 트레이딩뷰

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=7, middle=14, slow=28):
    uo = ta.momentum.ultimate_oscillator(
        high=df['high'], 
        low=df['low'], 
        close=df['close'], 
        window1=fast, 
        window2=middle, 
        window3=slow
    )
    df['UO'] = uo.round(2)

    return df

print(main(df, fast=7, middle=14, slow=28)) # 트레이딩뷰 디폴트 값

트레이딩뷰 차트와 비교