Python으로 Awesome Oscillator (AO) 구현하기

Awesome Oscillator(AO)는 모멘텀을 측정하고, 특히 추세의 강도와 방향을 판단하는 데 도움을 줍니다. 이 지표는 빌 윌리엄스에 의해 개발되었으며, 일반적으로 고가와 저가의 평균 SMA 5일, 34일의 차이를 계산합니다. 트렌드바의 색상은 변화량을 기준으로 결정됩니다.

트레이딩뷰 차트와 동일한 AO 값과, 트렌드를 up, down으로 구분하겠습니다.

pip install pandas ccxt pinetopy numpy

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

# 예시) 바이낸스 선물 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, len1=5, len2=34):

    hl2 = (df['high'] + df['low']) / 2
    df['AO'] = (pp.sma(hl2,len1) - pp.sma(hl2,len2)).round(1)
    df['trend'] = np.where(df['AO'].diff() <= 0, 'down', 'up')
    return df

print(main(df, len1=5, len2=34)) # 트레이딩뷰 디폴트 값

트레이딩뷰 차트와 비교