투자 기간 설정

# -*- coding: utf-8 -*-
# 필요한 라이브러리를 임포트합니다.
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
IPython_default = plt.rcParams.copy()  # 기본 Matplotlib 설정을 저장합니다.
 
import yfinance as yf  # Yahoo Finance에서 데이터를 다운로드하기 위해 yfinance를 임포트합니다.
import pyfolio as pf  # 포트폴리오 성능 분석을 위해 pyfolio를 임포트합니다.
import quantstats as qs  # 투자 포트폴리오 분석을 위해 quantstats를 임포트합니다.
 
# 분석할 자산의 티커 목록을 정의합니다.
tickers = ['SPY', 'TLT', 'GLD', 'BIL', 'IEF']
# Yahoo Finance를 사용해 지정된 티커의 '최대' 기간 동안의 '일간' 종가 데이터를 다운로드합니다.
df_close = yf.download(tickers=tickers, 
                       period='max',
                       interval='1d',
                       auto_adjust=True  # OHLC(Open, High, Low, Close) 자동 조정
                      )['Close'][tickers]
 
# 각 자산의 시작 날짜를 출력합니다.
print('Start date of each stock')
print('-'*25)
for ticker in tickers:
    # 각 티커의 종가 데이터에서 첫 번째 유효 데이터의 날짜를 출력합니다.
    print(f"{ticker}: {df_close[[ticker]].dropna().iloc[0].name.strftime('%Y-%m-%d')}")
print('-'*25)

# 'CASH'라는 새로운 열을 추가하고 모든 값을 1로 설정합니다. (위험회피 자산을 나타냄)
df_close['CASH'] = 1
# 새로운 자산군에 'CASH'를 포함시킵니다.
tickers = ['SPY', 'TLT', 'GLD', 'CASH']
 
# 결측치를 제거한 후 필요한 자산만 포함하는 새로운 데이터 프레임을 생성합니다.
df = df_close[tickers].dropna()
 
# 트레이딩 기간을 정의합니다.
# 데이터 프레임 인덱스에서 날짜를 데이터 프레임으로 변환합니다.
time_period = df.index.to_frame()
# 연 단위로 데이터를 리샘플링하고 각 연도의 마지막 영업일을 선택합니다.
trading_period = time_period.resample('BM').last().iloc[::12, :].rename(columns={'Date':'start_date'})
# 각 트레이딩 기간의 종료 날짜를 설정합니다. 마지막 기간의 'end_date'는 데이터의 마지막 날짜로 설정됩니다.
trading_period = trading_period.assign(end_date=trading_period.start_date.shift(-1).fillna(time_period.iloc[-1].name))
# 트레이딩 기간을 출력합니다.
print(trading_period)