투자 보조 지표
이격도, 엔벨로프
이격도와 이격도의 심화인 엔벨로프에 대해 같이 알아보겠다.
먼저 이격도란, 주가와 이동평균선이 얼마나 떨어져 있는지를 나타내는 지표 즉, 괴리율을 말한다.
엔벨로프란 이격도를 효율적으로 사용하기 위한 지표로 이격도를 차트 위에 표시해주는 것이다. 이격도를 가시화해서 보여주기 때문에 직관적으로 급상승, 급하락을 알 수 있다.
계산방법
이격도 = 주가 / 이동평균가 * 100
엔벨로프 = 중앙 : N일 이동평균선, 상단 : N일 이동평균선*(1+M%), 하단 : N일 이동평균선*(1-M%)
해석
이격도 - 주가는 이동평균선으로부터 멀어질수록 다시 돌아가려는 성질이 이는 것을 착안해 사용할 수 있는 지표이다. 즉, 주가의 급 상승으로 이격이 커졌을 때(매도), 주가의 급 하락으로 이격이 작아졌을 때(매수) 활용할 수 있다.
이격도가 100%인 경우 주가와 이동평균선이 같다는 얘기이다.
엔벨로프 - 자신의 평단가를 방어하려는 심리를 이용해 급속한 하락은 매물대의 공백을 초대한다. 매물대가 공백이 있을 때 조금의 매수세만으로도 급 상승이 될 수 있다는 것을 활용한 것이 엔벨로프이다.
전략
이격도(상승장)
- 20일선 이격도 - 106% 이상 매도, 98% 이하 매수
- 60일선 이격도 - 110% 이상 매도, 98% 이하 매수
- 이격도(하락장)
- 20일선 이격도 - 102% 이상 매도, 92% 이하 매수
- 60일선 이격도 - 104% 이상 매도, 88% 이하 매수
이격도의 %는 절대적이지 않기에 참조 지표로 활용한다.
엔벨로프
- 20일선, 이격 8% 설정
- 엔벨로프 상단 터치 급상승시 매도
- 엔벨로프 하단 터치 급하락시 매수
파이썬 구현
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")
역시 KT&G 주가 활용.
price_data["이격도_5"]=price_data["Close"]/price_data["Close"].rolling(5).mean()*100
price_data["이격도_10"]=price_data["Close"]/price_data["Close"].rolling(10).mean()*100
price_data["이격도_20"]=price_data["Close"]/price_data["Close"].rolling(20).mean()*100
price_data["이격도_60"]=price_data["Close"]/price_data["Close"].rolling(60).mean()*100
price_data_tmp = price_data[price_data.index>="2020"].copy()
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["이격도_5"],alpha = 0.5)
# ax2.plot(price_data_tmp["이격도_10"],alpha = 0.5)
ax2.plot(price_data_tmp["이격도_20"],alpha = 1)
ax2.plot(price_data_tmp["이격도_60"],alpha = 1)
ax2.legend(["이격도_20","이격도_60"],loc = "upper left")
plt.title(target["Name"].values[0])
plt.show()
5, 10, 20, 60선에 대한 이격도를 계산했는데, 이중 20, 60일선만 시각화했다. 이격도만 놓고 보면 현재 기준으로 매도 타이밍은 지났는데, 주가는 계속 유지하고 있는 것을 보면, 보조지표는 역시 보조로만 활용해야 하는 것 같다.
전략대로 60일선이 110%를 넘는 기준은 2020년6월, 2022년 11월 두 번의 포인트가 있었다. 104%로 조정하면 꽤 여러 번 신호가 나타났는데 횡보하는 장에서의 상단에 걸쳐있는 것을 볼 수 있다. 활용만 잘하면 좋을 것 같은 지표이다.
다음은 엔벨로프의 구현이다.
def envelope(price, n = 20, p = 0.08):
stand = price.rolling(n).mean()
upper = price.rolling(n).mean() * (1+p)
lower = price.rolling(n).mean() * (1-p)
return stand, upper, lower
stand, upper, lower = envelope(price_data["Close"],n = 20, p = 0.08)
price_data["stand"] = stand
price_data["upper"] = upper
price_data["lower"] = lower
20일선과 8%를 입력해 계산했다.
fig, ax1 = plt.subplots(figsize = (14,7))
ax1.set_ylabel('Price')
ax1.plot(price_data["Close"],color = "black",alpha = 0.7)
ax1.plot(price_data["stand"],alpha = 0.5)
ax1.plot(price_data["upper"],alpha = 0.5)
ax1.plot(price_data["lower"],alpha = 0.5)
ax1.legend(["stand","upper","lower"],loc = "upper left")
plt.title(target["Name"].values[0])
plt.show()
나는 8%를 기준으로 계산했는데, 6% 12%, 20% 등 조절해서 사용할 수 있다.
이격도 보다 좀 더 명확하게 보인다. 주가가 상단을 터치할 때가 해당 시점 근방에서 가장 높은 주가를 기록했다. 마찬가지로 2022년 11월 현재 상단을 터치했는데 주가가 꺾이지 않고 있다. 언제 꺾일 지 모르는 상황인 듯싶다.
투자하려는 분들은 주의 바란다.
투자 지표를 파이썬으로 구현하는 글을 계속 쓰고 있는데, 생각보다 간단하게 구현되어서 놀랬다.
처음 글을 쓸 때는 투자 지표를 보는 게 난해하고 어렵다고만 생각했는데, 하나하나 구현하면서 계산식 상의 의미를 보면 매우 간단하다. 물론 계산식 밖으로 가지고 있는 의미는 깊고 복잡하겠지만 말이다.
앞으로 몇 가지 투자 지표에 관해 파이썬 구현 및 의미를 간단하게 정리해보고, 보고서 형식으로 각각의 지표를 뽑는 스크립트를 만들어봐야겠다.
나는 주로 거래를 모바일 증권에서 하는데 작은 화면으로 여러 지표를 보는 게 어렵더라. pc로 볼 수도 있겠지만, 보고서 시각화만 뽑아낸 후 자동 산출하게 만들어 이동시에도 편하게 볼 수 있게 하는 것이 좋을 것 같다.
'개발일지' 카테고리의 다른 글
파이썬 투자 보조 지표 분석 / 전략 설계 - 볼린저 밴드 (1) | 2022.11.27 |
---|---|
파이썬 투자 보조 지표 분석 / 전략 설계 - 매물대 차트 (0) | 2022.11.26 |
파이썬 투자 보조 지표 분석 / 전략 설계 - MACD (0) | 2022.11.24 |
파이썬 투자 보조 지표 분석 / 전략 설계 - 스토캐스틱 (0) | 2022.11.23 |
파이썬 투자 보조 지표 분석 / 전략 설계 - OBV,PVT (0) | 2022.11.22 |
댓글