주식에서 이동평균선(줄여서 이평선)은 오늘을 포함한 과거 며칠의 평균가격을 말합니다. 만일 5일 이평선이면, 오늘까지 과거 5일동안의 주가 평균을 말하는 것이구요. 250일 이평선이면 250일간의 주가 평균을 말하는 것입니다. 평균이라 함은 이 주식이 기간 동안 거래된 평균 가격을 말합니다. 매수포지션 투자자들의 평균 매수단가, 매도포지션 투자자들의 평균 매도단가가 되는거이죠.
5일이면 한 일주일정도입니다. 따라서 5일 이평선은 일주일 투자자들의 거래 평균 주가를 말하는 것이고, 250일은 영업일로 한 1년 되기에, 250일 이평선은 1년 정도 장기 투자자들의 거래 평균 주가를 뜻하게 됩니다.
그런데, 이런 이평선들이 모여 있다고 생각하면, 단기 투자자가 보는 평균 주가와 장기 투자자가 보는 평균 주가, 또 중기 투자자가 보는 평균 주가가 모두 같다는 이야기가 됩니다.
보통 이평선의 밀집 현상은 에너지를 응축하는 모양새와 같아서, 이평선 밀집 자리에서 폭등이나 폭락이 일어날 확률이 크다고 합니다. 어찌됐든 응축한 에너지가 폭발하면서 상방으로 또는 하방으로 주가가 움직일 가능성이 커진다고 합니다.
그래서 이번 글에서는 python으로 주가의 여러 이평선들을 구해보고, 그 이평선이 모여 있을 때의 시그널을 포착하여 향후 주가의 흐름에 이평선 밀집이 어떤 영향을 주었는가를 알아보도록 하겠습니다.
Python Code
이평선은 5일, 20일, 60일, 250일 이렇게 4가지로 테스트 했습니다. 총 4개의 이평선의 최솟값과 최댓값이 불과 3% 도 차이나지 않으면 이평선이 밀집되어 있다고 생각하겠습니다.
import pandas as pd
import numpy as np
import yfinance
from mpl_finance import candlestick_ohlc
import mplfinance
import matplotlib.dates as mpl_dates
import matplotlib.pyplot as plt
import datetime
from dateutil.relativedelta import relativedelta
import FinanceDataReader as fdr
from matplotlib import gridspec
import plotly.graph_objs as go
from plotly.subplots import make_subplots
import chart_studio
import chart_studio.plotly as py
import chart_studio.tools as tls
def load_data(stock_code, start_date, end_date):
df = fdr.DataReader(stock_code, start_date, end_date)
return df
def Compare_SMA():
end_date = datetime.datetime.today()
start_date = end_date - relativedelta(years=4)
stk_code = '005930' # 삼성전자
# stk_code = '065770' # CS
# stk_code = '008350' # 남선알미늄
# stk_code = '104480' # 티케이케미칼
# stk_code = '090370' # 메타랩스
# stk_code = '046120' # 오르비텍
df = load_data(stk_code, start_date, end_date) # stock data load
df.index = df.index.map(mpl_dates.date2num) # date 형식을 num 형식으로
df['Date'] = df.index # index와 똑같은 Date Column생성
sma_period = [5, 20, 60, 250] # 이평선은 5(1W), 20(1M), 60(3M), 250(1Y) 4개
sma_list = [] # 이평선 종류 list
barrier = 0.03 # 이평선 밀집 여부 척도 3%
for prd in sma_period:
col_name = 'sma' + str(prd) # 각 2평선들 결과 저장 field이름
sma_list.append(col_name) # 이평선 column list
df[col_name] = df.Close.rolling(prd).mean() # 각 이평선 구하기
df['Sma_Min'] = df[sma_list].min(axis=1) # 이평선 중 최소값
df['Sma_Max'] = df[sma_list].max(axis=1) # 이평선 중 최댓값
df['Sma_Ratio'] = (df.Sma_Max - df.Sma_Min) / df.Sma_Min # 이평선 이격비율((최대-최소)/최소)
df['Signal'] = df.Sma_Ratio < barrier # Sma_ratio < 3% 이면 이평선 밀집이라 간주하여 True값
df = df.dropna() # 이평선의 rolling등에서 데이터가 없어 N/A로 표기된 데이터를 포함한 핼들 다 지움
df_signal = df[df['Signal'] == True] # Signal이 True인 것만 추출하여 새로운 dataframe 정의
fig = plt.figure()
gs = gridspec.GridSpec(nrows=2, ncols=1, height_ratios=[5, 2])
ax = fig.add_subplot(gs[0])
ax1 = fig.add_subplot(gs[1], sharex=ax)
df_ohlc = df[['Date', 'Open', 'High', 'Low', 'Close']]
candlestick_ohlc(ax, df_ohlc.values, width=0.6, \
colorup='red', colordown='blue', alpha=0.8)
date_format = mpl_dates.DateFormatter('%y/%b/%d')
ax.xaxis.set_major_formatter(date_format)
for col in sma_list:
ax.plot(df.Date, df[[col]], label=col)
ax.scatter(df_signal.Date, df_signal.High * 1.03, marker='*', s=80, c='black')
# signal이 True인 date에 캔들의 가장 고점의 3%보다 높은 위치에 STAR 마커를 검은색으로 표시
ax.legend()
ax1.plot(df.Date, df.Sma_Ratio, color='silver', linewidth=3, label='Sma ratio')
ax1.hlines(barrier, xmin=df.Date.iloc[0], xmax=df.Date.iloc[-1], label='barrier')
plt.suptitle(f'stock: {stk_code}')
plt.legend()
plt.show()
if __name__ == '__main__':
Compare_SMA()
삼성전자(005930)
총 3번의 스타 밀집구역이 있습니다.
2020년 3월 20일 부근, 2021년 9월 부근, 또 지금 현재인 (22년 3월 중순) 입니다. 처음 이평선 밀집의 결과로는 대 폭등이 일어났습니다. 두번째 이평선 밀집에서는 단기적인 폭락장세가 연출 되었구요.
그렇다면 현재 22년 3월 중순의 응축된 이평선은 어디로 튈까요?
CS (065770)
애증의 CS 입니다. 20년 12월말부터 모이기 시작한 이평선의 밀집은 21년 4월 대폭등의 선물을 주었습니다. 이때 CS 주주 단톡방에서 강성 주주들과 함께 이평선 밀집 현상에 대해 심도 있게 얘기 나누고 폭등을 염원하던 것이 기억에 남습니다.
티케이케미칼(104480)
요즘 관심을 가지고 있는 녀석입니다. 관심의 이유는 오로지 저 PER 때문입니다. PER이 1이 안되는 것을 보고 급 관심종목에 편입했는데요. 이 친구의 결과는
22년 1월 중순경에 이평선 밀집이 있었으나, 앞선 장세에서 요동치던 여진이 남아 있어서인지 갈피를 못잡고 방황하다 결국은 하락세로 떨어져 버렸네요.
한국ANKOR유전(152550)
요즘 개폭등의 향연, 부러움의 대상이 된 한국 ANKOR유전을 조사해 봤습니다. 엄청난 이평선 밀집이 보이죠? 사실 이것은 힘이 응축됐다기 보다는 아예 인기 자체가 없었던 주식이라 누가 사고 팔고 했을까 싶은 주식이긴 합니다만, 인고의 세월을 거쳐 힘을 응축한 주식이 2023년 들어 날라가는 모습을 보여주고 있습니다.
이렇듯, 이평선의 밀집은 강한 상승을 불러올수도, 하락을 불러올 수도 있습니다. 이평선이 밀집되었다고 해서 군침을 흘리며 자금을 태울것이 아니라, 조금 더 진중히 살펴보며 주가의 추세가 상방을 가리키는지를 판단한 후 들어가는 것이 수익 확률을 높이는 방법이지 않을까 싶습니다.
'주식분석 > Quant 분석(프로그래밍)' 카테고리의 다른 글
볼린저 밴드와 일목균형의 조화에서 매수신호 찾기 (0) | 2023.03.23 |
---|---|
구름위로 날라가보자 - 일목균형표 (1) | 2023.03.22 |
반응형 그래프와 티스토리에 붙이기 (0) | 2023.03.09 |
기술적 지표 #1. AB Ratio (0) | 2023.03.08 |
지지선과 저항선 (0) | 2023.03.05 |
댓글