SPY 누적수익률, 최고점, 일별수익률

# 필요한 라이브러리 임포트
import yfinance as yf  # Yahoo Finance에서 금융 데이터 가져오기 위한 라이브러리
import pandas as pd  # 데이터 조작 및 분석을 위한 라이브러리
import numpy as np  # 수치 연산을 위한 라이브러리
from matplotlib import pyplot as plt  # 데이터 시각화를 위한 라이브러리
import matplotlib.dates as mdates  # 날짜 포맷을 지원하기 위한 라이브러리

# 폰트 설정
plt.rcParams['font.family'] = 'NanumGothic'

# SPY ETF의 가격 데이터 가져오기
df_SPY = yf.Ticker('SPY').history('max', auto_adjust=True)

# 역사적인 최고가 날짜 찾기
historical_high_date = df_SPY.iloc[df_SPY.Close.argmax()].name.strftime('%Y-%m-%d')

# 가격 그래프 그리기
df_SPY.Close.plot(figsize=(16,8))
plt.title('SPY 종가')  # 그래프 제목 설정
plt.axvline(x=historical_high_date, color='green', linestyle='dashed')  # 역사적인 최고가 날짜에 수직선 추가
plt.text(x=historical_high_date, y=500, s=historical_high_date);  # 최고가 날짜에 텍스트 추가

# SPY ETF의 일별 수익률 데이터 가져오기
df_ret = df_SPY.loc['2020-12-31':'2022-08-31', 'Close'].pct_change().dropna()
df_ret.index = df_ret.index.strftime('%y/%m/%d')

# 수익률 바 차트 그리기
fig, ax = plt.subplots(figsize=(20,8))
ax = df_ret.plot.bar(color=(df_ret>0).map({True: 'g', False: 'r'}))
ax.xaxis.set_major_locator(mdates.MonthLocator(interval=1))
plt.title('SPY 일별 수익률 (2021.1~2022.8)')
plt.axhline(y=0.01, linestyle='dashed')  # 수익률 1%에 대한 수평선 추가
plt.axhline(y=-0.01, linestyle='dashed')  # 수익률 -1%에 대한 수평선 추가
plt.xticks(fontsize=7)  # x축 눈금 크기 설정
plt.ylabel('일일 수익률')  # y축 라벨 설정
plt.show()  # 그래프 출력