주식 시세를 보다 보면 갑자기 급등하는 주식이 있습니다. 시가 대비 한 15% 정도 이상 올라 장대 양봉을 기록합니다.
이런 주식이 다음날 시가에 떠서 시작하는데, 결국은 하락하여 음봉으로 마감하는 경우가 있습니다. 하지만 종가상으로 봤을 땐 전일 대비 상승하는 경우가 있죠.
이런 경우를 관찰하다보니, 조만간 시세를 한번 줄 때가 많았습니다.
위의 차트는 갤럭시아에스엠(011420) 이라는 주식의 차트입니다. 2023년 1월 20일 날 큰 폭으로 오르고(사실 상한가였습니다.) 다음날 시가가 떠서 시작하더니 결국 음봉을 만들며 일봉을 마감했습니다. 종가로만 봤을 때는 전일대비 상승이었고요.
그 후에 이어진 시세를 보니 아주 큰 상승이 나타났습니다. 다른 관심종목들에서도 이러한 현상이 나타나 보이길래 이를 매수 신호로 인식해 보기로 했습니다.
급등주 매수 시점
위의 갤럭시아에스엠 예제를 다듬어 다음과 같은 로직을 세워 보겠습니다.
이제 Python 으로 코딩을 한번 해볼까요?
Python Code : 급등주 매수신호
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
def load_data(stock_code, start_date, end_date):
df = fdr.DataReader(stock_code, start_date, end_date)
return df
def Soaring_Stock():
end_date = datetime.datetime.today()
start_date = end_date - relativedelta(months=6)
# 급등주 매수 simulation 종목들 (주석을 적용/해제 하면서 테스트)
stk_code = '357550' # 석경에이티
stk_code = '001390' # KG케미칼
stk_code = '058850' # KTcs
stk_code = '014100' # 메디앙스
stk_code = '001460' # BYC
df = load_data(stk_code, start_date, end_date)
df.index = df.index.map(mpl_dates.date2num)
df['Date'] = df.index
rate = 0.15 # 전일 장대양봉의 시가대비 종가 수익률
up_condition = df.Close > df.Close.shift(1) # 전일 종가대비 오늘 종가 상승 조건
neg_candle_condition = df.Close < df.Open # 오늘 candle은 음봉
pos_candle_condition = df.Close.shift(1) > df.Open.shift(1) * (1 + rate)
# 어제시가 대비 어제종가는 rate=15% 이상
# rate를 바꿔가면서 최적의 값 찾기 가능
# 위의 세 조건을 만족할 때 signal 출현
df['signal'] = up_condition & neg_candle_condition & pos_candle_condition
df_ohlc = df[['Date', 'Open', 'High', 'Low', 'Close']]
fig, ax = plt.subplots(1, 1, sharex=True, figsize=(10, 6)) # share x axis and set a figure size
date_format = mpl_dates.DateFormatter('%y/%b/%d')
ax.xaxis.set_major_formatter(date_format)
# candle chart 그림
candlestick_ohlc(ax, df_ohlc.values, width=0.6, \
colorup='red', colordown='blue', alpha=0.8)
# signal 발생일자에 circle marker
ax.scatter(df[df['signal'] == True].index, df[df['signal'] == True].High * 1.02,
marker='o', c='black', label='signal', s=100)
ax.legend()
plt.title(f'{stk_code}')
plt.show()
if __name__ == '__main__':
Soaring_Stock()
BYC(001460)
변동성이 커진만큼 신호 가 뜬 다음부터 출렁이는 모습을 보이지만 결국 급등의 모습이 나옵니다.
메디앙스(014100)
신호가 뜬 후 큰 조정을 받다가 긴 꼬리를 단 양봉이 출현합니다. 이때 고점에서 팔 수 있으면 좋으련만.. 그 이후에는 급등한 시세를 다 반납한 모습이죠.
KG케미칼(001390)
역시 신호가 뜬 후 극도의 출렁임을 보이지만, 결국 장대양봉을 하나 더 선사해 주네요.
석경에이티(357550)
역시 출렁거립니다. 하지만 큰 시세를 보여줍니다.
이치럼 급등주 신호 뒤에는 어지러운 장세가 연출됩니다. 따라서 장기적인 투자보다는 방망이를 짧게 잡고 단기 투자로 조금의 수익만을 얻는다는 전략으로 접근하면 좋을 것 같습니다. 물론 신호 뒤 살아난 변동성으로 인한 출렁거림은 감수를 좀 해야 될 수도 있겠습니다.
'주식분석 > Quant 분석(프로그래밍)' 카테고리의 다른 글
valuewhen 함수, 파이썬으로는 어떻게 작성할까? #2 (0) | 2023.03.30 |
---|---|
valuewhen 함수, 파이썬으로는 어떻게 작성할까? (0) | 2023.03.29 |
볼린저 밴드와 일목균형의 조화에서 매수신호 찾기 (0) | 2023.03.23 |
구름위로 날라가보자 - 일목균형표 (1) | 2023.03.22 |
모여라 이평선! (0) | 2023.03.12 |
댓글