본문 바로가기
개발일지

파이썬 투자 보조 지표 분석 / 전략 설계 - ADX, DI

by kirion 2022. 11. 29.
728x90
반응형

투자 보조 지표 ADX

현재 종목의 주가의 움직임이 방향성 및 추세가 강한지, 약한지에 대한 정보를 나타내는 지표이다.

단기보다는 중장기 추세 분석에 유리한 지표로, 상승 추세이면 상승 강도가 어떤지 반대로 하락 추세이면 하락 강도가 어떤지 알려주는 보조지표이다. 주가가 횡보할 때는 적합하지 않다.

 

계산방법

ADX = |PDI - MDI| / (PDI + MDI)

PDI = 현재 고가 - 전일 고가. 

MDI = 전일 저가 - 현재 저가. 

PDI, MDI 모두 값이 +이면 차이 값을 그대로 사용하고 -이면 0으로 사용한다. 

해석

  • ADX는 추세의 상승과 하락에 관계없이 강도만을 나타내는 지표이다.
  • ADX 지표가 상승하면 상승 혹은 하락의 분명한 추세를 가지고 있고, 추세의 강도가 강하나는 것을 의미한다. 즉, ADX 지표가 하락할 땐 현재 추세가 꺾이고 새로운 추세로 전환될 가능성이 있음을 말한다.
  • 25를 초과하면 강한 추세, 20 미만이면 약한 추세라고 보면 된다.
  • ADX만 보면 방향성은 알기 어렵기 때문에 같이 사용하는 지표 중 +DI, -DI가 있다.
  • DI+는 상승하려는 힘으로 주가의 상승과 강도를 나타내고, -DI는 하락하려는 힘으로 주가의 하락과 강도를 나타낸다.

전략

  • +DI가 -DI를 돌파해서 올라갈 땐 매수 신호(ADX 선이 -DI 위에 있을 경우)
  • -DI가 +DI를 돌파해서 올라갈 땐 매도 신호(ADX 선이 +DI 위에 있을 경우)
  • 거짓 신호가 더러 발생하기 떄문에 한 박자 늦게 매매하는 전략을 취하기도 한다. 매수 신호 후 다음날 고가를 돌파하면 매수, 매도 신호 후 다음날 저가를 돌파하면 매도와 같이 말이다.

 

 

 


파이썬 구현

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-25")

 

adx = ta.trend.ADXIndicator(price_data["High"],price_data["Low"],price_data["Close"]).adx()
DIm = ta.trend.ADXIndicator(price_data["High"],price_data["Low"],price_data["Close"]).adx_neg()
DIp = ta.trend.ADXIndicator(price_data["High"],price_data["Low"],price_data["Close"]).adx_pos()

price_data["adx"] = adx
price_data["DIm"] = DIm
price_data["DIp"] = DIp

ta 패키지를 이용해 adx와 DIm(-), DIp(+)를 계산했다. 간편하게 계산할 수 있어서 편하다.

 

fig, ax1 = plt.subplots(figsize = (14,7)) 
ax1.set_ylabel('Price') 
ax1.plot(price_data["Close"],color = "black",alpha = 0.7)

ax2 = ax1.twinx() 
ax2.set_ylabel('Index') 
ax2.plot(price_data["adx"],color = "blue",alpha = 0.5)
ax2.plot(price_data["DIp"],color = "tab:blue",alpha = 0.5)
ax2.plot(price_data["DIm"],color = "tab:red",alpha = 0.5)
ax2.legend(["adx","DIp","DIm"],loc = "upper right")
ax2.set_ylim(0,100)
plt.title(target["Name"].values[0])
plt.show()

ADX, +DI, -DI
데이터 값

현재 KT&G의 ADX값은 28.4로 아직 추세가 살아있는 것으로 나타난다. 하지만 최고 40까지 갔던 ADX값이 점점 줄고 있기 때문에 추세가 점점 꺾이고 있음을 알 수 있다. 22년 8월 경 DI+가 DI-를 상향 돌파했을 때 매수했다면 83,000원 대 평단가를 보유할 수 있었던 것으로 보인다(지표 공부를 왜 이제야 했을까..). 결과론일 뿐이지만, 지표를 참고해 매매 포인트를 잡으면 무지성 매매보다는 수익을 낼 확률이 높아질 것 같다. 

 

ADX, DI 지표를 보면 천천히 꾸준한 종목에서 지표의 활용성이 높아보인다. KT&G도 21년 이후 완만한 상승세와 하락세를 시작하는 구간이 있는데, 이때 지표가 크로스하며 매매 사인이 적절하게 난 듯싶다. 

 

지표값만 보면 여전히 DI+값이 DI-값을 상회하고 있기 때문에 매도 사인은 아닌것으로 나타난다. 점차 추세가 꺾여가며 DI+와 DI- 간근이 줄어들고 있기 때문에 앞으로의 변화를 잘 체크해야겠다.

추세만 보면 18~19년도의 주가 수준(10만원 초반대) 수준으로 회복하려 하는 움직임을 보이는 것도 같다. 

 

728x90
반응형

댓글