코로나 바이러스의 유행이 지속됨에 따라 경기 지표가 하락하고, 더불어 주가 또한 하락했다.
개인들은 하락한 주식의 가격이 메리트가 있다고 판단하여 주식 시장에 많이 뛰어들고 있는 상황인데,
한국 시장 상황을 대표하는 코스피 지수의 흐름을 이동평균선
을 활용하여 파악해보려고 한다.
이동평균선은 일정기간 동안의 주가를 산술 평균한 값인 주가 이동평균을 차례로 연결해 만든 선으로,
주식시장에서 주가와 거래량 및 거래대금은 매일 매일 변하지만 특정기간을 놓고 보면 일정한 방향성을 지닌다.
이를 수치화한 것이 이동평균선으로 장기(120일), 중기(60일), 단기(5, 20일) 이동평균선이 있다.
단기 이동평균선이 장기 이동평균선을 뚫고 상승하는 경우는 골든크로스
,
단기 이동평균선이 장기 이동평균선을 뚫고 하락하는 경우는 데드크로스
라고 하는데
골든크로스
와 데드크로스
를 파악하면 대세 상승하는 구간인지, 하락하는 구간인지 파악할 수 있다.
골든크로스에 사고 데드크로스에 팔아라
라는 이야기도 있지만, 항상 맞는 이야기는 아니고 참고용으로 활용하는 것이 좋겠다.
참고 : 이동평균선
How to get stock data using Yahoo Finance Python API 글을 참조하여 코스피 지수를 얻어올 수 있다.
코스피 지수의 코드는 Yahoo Finance 에서 검색해보면 ^KS11
이다.
최근 7년 동안의 코스피 지수를 구한다.
Close
컬럼은 당일의 종가를 의미하는데, price
라는 컬럼 이름으로 변경하였다.
>>> import yfinance as yf
>>> import pandas as pd
>>> import matplotlib.pyplot as plt
>>> code = '^KS11' # KOSPI Composite Index
>>> kospi = yf.Ticker(code)
>>> kospi = kospi.history(period='7y')
>>> kospi = kospi[['Close']]
>>> kospi.rename(columns={'Close': 'price'}, inplace=True)
>>> print(kospi)
price
Date
2013-04-03 1983.22
2013-04-04 1959.45
2013-04-05 1927.23
2013-04-08 1918.69
2013-04-09 1920.74
... ...
2020-03-27 1717.73
2020-03-30 1717.12
2020-03-31 1754.64
2020-04-01 1685.46
2020-04-03 1719.51
[1711 rows x 1 columns]
단기(20일), 중기(60일), 장기(120일) 이동평균선을 계산한다.
>>> rolling_mean = pd.DataFrame()
>>> for w in [20, 60, 120]:
>>> rolling_mean[w] = kospi.price.rolling(window=w).mean()
>>> print(rolling_mean)
20 60 120
Date
2013-04-03 NaN NaN NaN
2013-04-04 NaN NaN NaN
2013-04-05 NaN NaN NaN
2013-04-08 NaN NaN NaN
2013-04-09 NaN NaN NaN
... ... ... ...
2020-03-30 1777.5635 2046.498833 2081.226667
2020-03-31 1764.5880 2039.468500 2079.009583
2020-04-01 1745.8945 2031.641667 2076.207333
2020-04-02 1727.8745 2024.130333 2073.529083
2020-04-03 1712.6070 2017.189667 2071.085083
최근의 지수 하락으로 인해 단기 이동평균선
이 장기 이동평균선
을 뚫고 급격히 하락하는 모습을 볼 수 있다.
>>> plt.plot(kospi.price, label='KOSPI index')
>>> for w in [20, 60, 120]:
>>> plt.plot(rolling_mean[w], label=str(w), linestyle='dashed')
>>> plt.legend()
>>> plt.grid()
>>> plt.show()
단기 이동평균선
과 장기 이동평균선
의 차이를 별도로 계산하여 막대 그래프로 표시하면
좀 더 차이를 분명하게 확인할 수 있다.
>>> rolling_mean['cross'] = rolling_mean[20] - rolling_mean[120]
>>> cross = rolling_mean['cross']
>>> plt.bar(cross.index, cross.values, label='golden/dead cross')
>>> plt.legend()
>>> plt.grid()
>>> plt.show()
코스피 지수의 이동평균선
, 골든크로스
, 데드크로스
를 함께 표시한 결과는 다음과 같다.
7년 단위인 위의 그래프를 최근 1년의 데이터로 축소한 그래프는 다음과 같다.
단기 이동평균선
이 장기 이동평균선
에 비해 크게 하락한 상태인데
이러한 흐름을 파악하고, 장기 침체로 이어질 것인지 다시 반등할 것인지
추후의 방향에 대해 예측해보는 것도 흥미로운 부분이 될 것 같다.
Written on April 3rd , 2020 by Jonghyun Ho