이 포스트에서는 주식시장의 트렌드 분석을 위한 그래프를 그리는 과정을 다룬다. 이 과정은 초기 설정과 데이터 준비, 차트 아웃라인 생성, 메인차트 그리기, MACD 지표 및 MACD 오실레이터 히스토그램 그리기, 차트 타이틀, 범례, 눈금 설정 및 차트 출력의 5가지 부분으로 구성된다. 각 부분은 코드와 설명으로 상세하게 제시되어 있으며, 이를 따라하면 직접 주식 차트를 그릴 수 있을 것이다.
차트를 그리기 위해 필요한 라이브러리와 모듈을 임포트하고, 원하는 주식의 데이터를 준비한다. yahooquery
를 사용해 Yahoo Finance에서 주가 데이터를 가져오며, 데이터는 특정 기간 동안의 시가, 종가, 최고가, 최저가 등을 포함한다. 이러한 데이터는 차트에 사용되는 주요 구성 요소이다.
from yahooquery import Ticker
import pandas as pd
# 화면에 보여질 데이터 갯수
show_count = 250
# x축에 표시될 tick 갯수
tick_count = 10
# 삼성전자의 주식 데이터를 yahooquery에서 다운로드
samsung = Ticker('005930.KS')
data = samsung.history(period="2y")
# 'symbol'과 'date'에 대한 인덱스를 리셋하고 'date' 컬럼으로 새 인덱스 설정
data.reset_index(inplace=True)
data['date'] = pd.to_datetime(data['date'])
data.set_index('date', inplace=True)
# talib 라이브러리를 이용한 이동평균선 계산
data["sma5"] = talib.SMA(data.close, timeperiod=5) # 5일 이동평균선
data["sma20"] = talib.SMA(data.close, timeperiod=20) # 20일 이동평균선
data["sma60"] = talib.SMA(data.close, timeperiod=60) # 60일 이동평균선
# MACD 계산
data["macd"], data["macd_signal"], data["macd_hist"] = talib.MACD(data['close'])
# 최근 250개 데이터만 사용
data = data.tail(show_count)
show_count
)와 x축의 눈금 개수(tick_count
)를 설정한다.yahooquery
를 통해 삼성전자의 주식 데이터를 2년 동안의 기간으로 다운로드한다. yahooquery를 사용하여 주식 데이터를 어떻게 가져올 수 있는지에 대한 방법은 [파이썬] Yahooquery로 과거 주식 데이터와 재무 데이터 얻는 방법에서 확인할 수 있다.차트의 전반적인 형태와 크기를 설정한다.
import matplotlib.pyplot as plt
import mplfinance as mpf
# 전체 그래프의 크기 설정
fig = mpf.figure(figsize=(12,10))
# 메인 차트, MACD 차트, MACD 오실레이터 차트를 위한 서브플롯 생성
ax_main = fig.add_subplot(5, 1, (1, 3), facecolor='white') # 메인 차트
ax_macd = fig.add_subplot(5, 1, (4 ,4), facecolor='white') # MACD 차트
ax_hist = fig.add_subplot(5, 1, (5 ,5), facecolor='white') # MACD 오실레이터 차트
# 서브플롯 간의 간격 조정
fig.tight_layout()
mpf.figure(figsize=(12,10))
을 통해 전체 그래프의 크기를 가로 12인치, 세로 10인치로 설정한다. 이 크기는 전체 그래프 창의 크기를 결정한다.fig.add_subplot(5, 1, (1, 3), facecolor='white')
에서 첫 번째 인자 5
는 전체 그래프를 세로로 5등분하고, 두 번째 인자 1
은 가로로 1등분한다는 의미이다. 세 번째 인자 (1, 3)
는 세로로 나눈 5개의 부분 중 처음 3개를 메인 차트에 할당하겠다는 의미이다.fig.add_subplot(5, 1, (4, 4), facecolor='white')
에서 (4, 4)
는 세로로 나눈 5개의 부분 중 네 번째 부분을 MACD 차트에 할당하겠다는 의미이다.fig.add_subplot(5, 1, (5, 5), facecolor='white')
에서 (5, 5)
는 세로로 나눈 5개의 부분 중 마지막 부분을 MACD 오실레이터 차트에 할당하겠다는 의미이다.fig.tight_layout()
을 사용한다. 이렇게 하면 그래프가 전체 공간에 균일하게 배치되어 보기 좋은 레이아웃이 생성된다.캔들스틱 차트는 주식 시장의 트렌드를 분석하는 중요한 도구이다. 시가, 종가, 최고가, 최저가를 그래픽으로 표현하며, 이동평균선은 주가의 일정 기간 평균을 선으로 나타낸다. TA-Lib 라이브러리를 사용하면 이러한 분석을 편리하게 수행할 수 있다.
added_plots = {
'MA5' : mpf.make_addplot(data.sma5, type='line', ax=ax_main, width=1.5),
'MA20' : mpf.make_addplot(data.sma20, type='line', ax=ax_main, width=1.5),
'MA60' : mpf.make_addplot(data.sma60, type='line', ax=ax_main, width=1.5),
}
mc = mpf.make_marketcolors(up="#BE452D", down="#4375E0", edge='black')
s = mpf.make_mpf_style(marketcolors=mc, gridcolor='#DDDDDD', gridstyle="--")
mpf.plot(data,
style=s,
type='candle',
ax=ax_main,
addplot=list(added_plots.values()),
datetime_format='%Y-%m-%d',
returnfig=True)
ax_main.set_ylabel('')
mpf.make_addplot
함수를 이용해 5일, 20일, 60일 이동평균선을 선 그래프로 그린다. 여기서 ax=ax_main
은 이동평균선을 메인 차트에 그리겠다는 의미이다.mpf.make_marketcolors
함수를 사용해 캔들스틱 차트의 상승과 하락에 대한 색상을 지정한다. 이 예제에서는 상승을 빨간색(#BE452D
), 하락을 파란색(#4375E0
)으로 표시한다.mpf.make_mpf_style
함수를 이용해 그래프의 전체적인 스타일을 설정한다. 여기서는 마켓 색상과 그리드 색상, 그리드 스타일을 지정하고 있다.mpf.plot
함수를 사용하여 캔들스틱 차트와 앞서 설정한 이동평균선을 함께 그린다. 여기서 addplot
인자로 이동평균선 플롯을 추가하며, datetime_format
으로 날짜 형식을 지정한다.ax_main.set_ylabel('')
을 통해 Y축의 라벨을 제거한다.이 코드는 mplfinance 라이브러리를 이용하여 구글 주식의 캔들스틱 차트와 이동평균선을 그리는 과정을 보여준다. mplfinance 라이브러리는 매우 간단하게 캔들스틱 차트, 이동평균선을 그릴 수 있으며, 내장된 스타일을 이용할 수 있다는 장점이 있다.
자세한 사용법은 [Python] mplfinance를 이용하여 캔들스틱 차트 그리기에서 mplfinance 라이브러리를 이용해 캔들스틱 차트 그리는 방법을 확인할 수 있다.
MACD 지표는 두 개의 이동평균선 간의 차이를 나타내며, 이 차이는 트렌드의 강도와 방향을 파악하는 데 중요한 역할을 한다. MACD 오실레이터 히스토그램은 이 차이를 막대그래프로 표현해 시각적으로 분석을 도와준다.
ax_macd.plot([0, len(index)-1],
[0, 0],
color='#DE0000',
linestyle='--',
linewidth=0.7)
ax_macd.plot(data.index,
data['macd'],
label='MACD')
ax_macd.plot(data.index,
data['macd_signal'],
label='MACD Signal')
histogram = data['macd_hist']
index = data.index.strftime('%Y-%m-%d')
ax_hist.bar(list(index), list(histogram.where(histogram > 0)), 0.7, color="#EC3019")
ax_hist.bar(list(index), list(histogram.where(histogram < 0)), 0.7, color="#4375E0")
#DE0000
)으로 표시된다.ax_macd.plot
함수를 이용해 MACD 값과 MACD Signal 값을 선 그래프로 그린다.ax_hist.bar
함수를 사용해 MACD 히스토그램을 그립니다. 여기서 양수와 음수를 판별하여 각각 빨간색(#EC3019
)과 파란색(#4375E0
)으로 표시한다.strftime('%Y-%m-%d')
함수를 사용하여 날짜 인덱스를 해당 문자열 형식으로 변환한다.이 섹션에서는 차트의 완성을 위해 필요한 마지막 단계들을 수행한다. 타이틀을 추가해 차트의 주제를 명확히 하고, 범례를 통해 차트의 각 부분을 설명한다. 눈금 설정은 축의 단위를 지정하며, 모든 설정을 완료한 후 차트를 출력한다.
# 각 차트의 제목 설정
ax_main.set_title('삼성전자', fontsize=15)
ax_macd.set_title('MACD', fontsize=15)
ax_hist.set_title('MACD Oscillator', fontsize=15)
# 메인 차트의 범례 설정
font = font_manager.FontProperties(family='NanumGothic', weight='normal')
ax_main.legend([None]*(len(added_plots)+2))
handles = ax_main.get_legend().legend_handles
ax_main.legend(handles=handles[2:], labels=list(added_plots.keys()), prop=font)
# MACD 차트의 범례 설정
ax_macd.legend(loc=2, prop=font)
# x축 눈금 설정
step = (len(data) - 1) / (tick_count - 1)
ticks = [0 + int(step * i) for i in range(tick_count)]
ax_main.xaxis.set_ticks(ticks)
ax_macd.xaxis.set_ticks(ticks)
ax_hist.xaxis.set_ticks(ticks)
ax_main.xaxis.set_ticklabels([])
ax_macd.xaxis.set_ticklabels([])
# 그리드 설정
ax_main.grid(color='#dddddd', linestyle='--', linewidth=0.5)
ax_macd.grid(color='#dddddd', linestyle='--', linewidth=0.5)
ax_hist.grid(color='#dddddd', linestyle='--', linewidth=0.5)
# 그래프 표시
plt.show()
ax_main.set_title
, ax_macd.set_title
, ax_hist.set_title
을 사용한다. 각 메서드의 인자로 제목의 문자열과 글꼴 크기를 전달한다.mplfinance
로 그려진 차트는 직접적으로 범례를 그릴 수 없으므로, 여러 단계의 절차를 거쳐 범례를 추가한다. 먼저 ax_main.legend([None]*(len(added_plots)+2))
를 통해 빈 범례를 만든 후, handles
를 사용하여 실제 범례 핸들을 가져와 범례를 설정한다.tick_count
변수를 사용하여 x축에 표시될 눈금의 개수를 계산하고 설정한다. 각 눈금의 위치는 전체 데이터 길이와 눈금 개수에 따라 균일하게 배치된다.plt.show()
를 호출하여 그래프를 화면에 표시한다.메인 차트의 범례 설정은 mplfinance 라이브러리의 특정한 동작 방식으로 인해 복잡한 절차가 필요한 부분이며, 이 부분을 정확하게 이해하고 구현하는 것이 중요하다.
yahooquery
를 사용하여 데이터를 가져오는 과정이 복잡한가요?yahooquery
는 Yahoo Finance에서 데이터를 가져오는 작업을 매우 간단하게 만들어준다. 특정 주식의 특정 기간에 대한 데이터를 쉽게 가져올 수 있으며, 복잡한 설정 없이도 원하는 데이터를 즉시 사용할 수 있다. 자세한 정보는 [파이썬] Yahooquery로 과거 주식 데이터와 재무 데이터 얻는 방법에서 확인할 수 있다.yahooquery
, TA-Lib와 같은 라이브러리를 사용하면 복잡한 계산과 시각화를 매우 간단하게 만들 수 있으므로, 복잡한 수학적 지식은 필수적이지는 않다. 해당 라이브러리와 모듈에 대한 자세한 내용은 앞서 제공한 링크에서 참조할 수 있다.[Python] 비트 연산자 다양한 예제를 통해 이해하기 |
---|
[Python] 관계 연산자 다양한 예제를 통해 이해하기 |
[Python] 'zsh: command not found: python' 오류 해결하기 |
[Python] 할당 연산자 다양한 예제를 통해 이해하기 |
[Python] 산술 연산자 다양한 예제를 통해 이해하기 |
CloneCoding
한 줄의 코드에서 시작되는 혁신!