투자 보조 지표 CCI
주가의 주기성을 알아볼 수 있는 지표이다. 통계적인 방법을 이용해 가격 변동에 대한 추세의 방향, 강도를 알 수 있다. 따라서 매매 타이밍을 간편하게 확인할 수 있다.
계산방법
CCI =(M - N) / 0.015 * D
평균주가(고가 + 저가 + 종가)/3 * 단순이동평균 / 0.015 * 이동평균치
M : 평균 주가
N : 단순 이동평균은 N일 동안의 이동평균 사용.(20일)
D : 절대 평균 편차(20일)
해석
- 지표값이 0일 때 평균 주가와 이동평균값이 같다는 뜻. + 혹은 - 일 때 추세가 존재함을 나타낸다.
- 지표값이 고점일수록 주가는 평균적으로 높다는 뜻이고, 저점일수록 주가는 평균적으로 낮다는 것을 의미한다.
전략
- 추세 전환
- 주가 하락 시 CCI 지표 상승 : 상승추세 전환
- 주가 상승 시 CCI 지표 하락 : 하락추세 전환
- 단기 CCI
- +100선을 돌파하면 매수, +100선을 하향 돌파하면 매도
- 장기 CCI
- 0 이상 돌파시 매수, 0 이하 돌파시 매도
- 박스장
- +100에서 하락 시 매도, -100선 상승 시 매수
파이썬 구현
import ta
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import FinanceDataReader as fdr
import copy
df_krx = fdr.StockListing('KRX')
kospi_data = df_krx[(df_krx["Market"]=="KOSPI") & (~df_krx["Sector"].isna())]
target = kospi_data[kospi_data["Name"]=="KT&G"]
price_data = fdr.DataReader("033780","2020","2022-11-23")
cci = ta.trend.CCIIndicator(price_data["High"],price_data["Low"],price_data["Close"]).cci()
price_data["cci"] = cci
ta패키지로 구한 cci 지표.
M = (price_data["High"]+price_data["Low"]+price_data["Close"])/3
N = M.rolling(20).mean()
D = M.rolling(20).apply(lambda x : pd.Series(x).mad())
cci = (M - N) / (0.015 * D)
price_data["cci"] = cci
파이썬으로 구현한 cci 지표.
price_data_tmp = price_data[price_data.index>"2022"].copy()
price_data_tmp["upper"] = 100
price_data_tmp["lower"] = -100
fig, ax1 = plt.subplots(figsize = (14,7))
ax1.set_ylabel('Price')
ax1.plot(price_data_tmp["Close"],color = "black",alpha = 0.7)
ax2 = ax1.twinx()
ax2.set_ylabel('Index')
ax2.plot(price_data_tmp["cci"],color = "blue",alpha = 0.5)
ax2.plot(price_data_tmp["upper"],color = "red",alpha = 0.2)
ax2.plot(price_data_tmp["lower"],color = "blue",alpha = 0.2)
ax2.legend(["cci"],loc = "upper left")
plt.title(target["Name"].values[0])
plt.show()
KT&G의 2022년의 CCI 지표이다. CCI는 지표의 파동이 조금 심한 것을 볼 수 있다. 아무래도 20일 선으로 했지만, 가격의 편차에 의해 계산되는 산식이기에 주가의 변동이 반영이 많이 되는 것 같다.
과거 주가를 보면 100선과 -100선을 활용해 중단기적인 매매를 하는 것이 가장 효율적으로 보인다.
22년 2월 경 본격적으로 상승 추세에 돌입할 시점에 100을 넘겼고, 4월 중에 -100 이하로 떨어져 한 번 매도를 한다. 다시 4월 말에 매수, 6월 초에 매도(이 기간은 수익이 작은 것 같다.). 다시 7월 말에 매수 후 지금 까지 상승을 이어가고 있다.
변동주기와 폭은 크지만, 기준값을 넓게 잡아 사용하면 의미 있는 지표로 사용할 수 있을 것이다.
price_data["ma_cci"] = price_data["cci"].rolling(9).mean()
price_data_tmp = price_data[price_data.index>"2022"].copy()
price_data_tmp["upper"] = 100
price_data_tmp["lower"] = -100
fig, ax1 = plt.subplots(figsize = (14,7))
ax1.set_ylabel('Price')
ax1.plot(price_data_tmp["Close"],color = "black",alpha = 0.7)
ax2 = ax1.twinx()
ax2.set_ylabel('Index')
ax2.plot(price_data_tmp["cci"],color = "blue",alpha = 0.5)
ax2.plot(price_data_tmp["ma_cci"],color = "green",alpha = 0.5)
ax2.plot(price_data_tmp["upper"],color = "red",alpha = 0.2)
ax2.plot(price_data_tmp["lower"],color = "blue",alpha = 0.2)
ax2.legend(["cci"],loc = "upper left")
plt.title(target["Name"].values[0])
plt.show()
9일 signal 곡선을 사용해 변동폭을 완화한 곡선을 사용하는 것도 좋을 것 같다. 여전히 기준선 +100, -100을 사용해서 매매 포인트를 잡가나 교차하는 지점으로 사용해도 좋아 보인다.
범위를 지정해 RSI 계산 공식에 넣어 상, 하한이 있는 지수로 만들어 사용하는 방법도 고려할만하다.
delta = price_data["cci"].diff()
ups, downs = delta.copy(), delta.copy()
ups[ups < 0] = 0
downs[downs > 0] = 0
AU = ups.ewm(com = 14-1, min_periods = 14).mean()
AD = downs.abs().ewm(com = 14-1, min_periods = 14).mean()
cci2 = AU/AD
price_data["cci2"] = (100 - (100/(1 + cci2)))
price_data_tmp = price_data[price_data.index>"2022"]
fig, ax1 = plt.subplots(figsize = (14,7))
ax1.set_ylabel('Price')
ax1.plot(price_data_tmp["Close"],color = "black",alpha = 0.7)
ax2 = ax1.twinx()
ax2.set_ylabel('Index')
ax2.plot(price_data_tmp["cci"]/10,color = "blue",alpha = 0.5)
ax2.plot(price_data_tmp["cci2"],color = "tab:blue",alpha = 0.5)
plt.title(target["Name"].values[0])
plt.show()
단순 비교를 위해 cci를 10으로 나눈 값과 cci를 0~100 사이로 매핑한 지표이다.
똑같은 움직임을 보이기 때문에 기준선을 잘 잡아서 사용하면 좋을 것 같다.
지표를 분석하면서 계속 상, 하한을 만드는 이유는 이런 지표들 모두 모아서 주가를 추정하는 하나의 지표 혹은 모델을 만들기 위함이다.
주가에서는 결국 움직임(패턴)이 중요하기 때문에 앞으로 소개할 지표들도 최대한 상,하한을 갖도록 수정해 사용해 보도록 하겠다.
'개발일지' 카테고리의 다른 글
파이썬 투자 보조 지표 분석 / 전략 설계 - 모멘텀 (0) | 2022.11.30 |
---|---|
파이썬 투자 보조 지표 분석 / 전략 설계 - ADX, DI (0) | 2022.11.29 |
파이썬 투자 보조 지표 분석 / 전략 설계 - 볼린저 밴드 (1) | 2022.11.27 |
파이썬 투자 보조 지표 분석 / 전략 설계 - 매물대 차트 (0) | 2022.11.26 |
파이썬 투자 보조 지표 분석 / 전략 설계 - 이격도, 엔벨로프 (0) | 2022.11.25 |
댓글