Python으로 CCI 지표 구현하기

CCI(Commodity Channel Index)는 가격이 평균 가격에서 얼마나 벗어나는지를 측정하는 기술적 지표로, 과매수와 과매도 상태를 파악하는 데 사용된다. 보통 20일 이동평균을 기준으로 계산하며, 가격과 평균 가격의 편차를 표준화하여 표시한다. 값이 +100 이상이면 과매수, -100 이하이면 과매도로 해석된다. 주로 추세 반전, 과매수·과매도 신호, 다이버전스 분석 등에 활용되며, 다른 지표와 함께 사용하면 신뢰도가 높아진다. 짧은 기간(14~20)일수록 민감하게 반응하고, 긴 기간(50 이상)일수록 더 완만한 움직임을 보인다.

pip install pandas ccxt pinetopy ta

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

# 예시) 바이낸스 선물 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, len=20, sma_len=14):

    df['cci'] = ta.trend.cci(high=df['high'], low=df['low'], close=df['close'], window=len)
    df['signal'] = pp.sma(df=df['cci'], length=sma_len)

    df['cci'] = df['cci'].round(2)
    df['signal'] = df['signal'].round(2)

    return df

print(main(df, len=20, sma_len=14)) # 트레이딩뷰 디폴트 값

트레이딩뷰 차트와 비교