指数データをもとにドローダウンチャートを作成するコードです。
#ライブラリの読み込み
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from datetime import datetime
import seaborn as sns
sns.set()
#ETFデータの読み込み
NASDAQサイトで取得したcsvファイルを使ってますが、指数データであれば何でもよいです。
#あらかじめ以下のサイトから保存したCSVファイルの終値を一つにまとめる
#https://www.nasdaq.com/market-activity/funds-and-etfs/vti/historical
def make_df(etfs):
df = pd.DataFrame()
for etf in etfs:
csvfile = etf +'.csv'
csv_data = pd.read_csv(csvfile)
csv_data.Date = pd.to_datetime(csv_data.Date)
csv_data = csv_data.set_index('Date')
csv_data= csv_data.rename(columns={' Close/Last': etf})
df[etf] = csv_data[etf]
df = df.sort_index().dropna()
return df
#ドローダウンチャート作成
#ドローダウンチャート
def dd_chart(df):
#全ファンドのドローダウンを計算したdfDD_allを作成
dfDD_all = pd.DataFrame()
for i in range(0,df.shape[1]):
dfDD = pd.DataFrame(df.iloc[:,i])
dfDD['max'] = dfDD.iloc[:,0].cummax()
dfDD[dfDD.columns[0]+'_DD'] = dfDD.iloc[:,0] / dfDD['max'] -1
dfDD_all[dfDD.columns[0]+'_DD'] = dfDD[dfDD.columns[0]+'_DD']
#チャートを作成
fig = plt.figure()
dfDD_all.plot(figsize = (15, round(dfDD_all.shape[1]/2+0.4,0)*5), subplots=True,
layout=(-1, 2),sharey=True, title ='Drawdown')
plt.savefig('dd_plot.png',bbox_inches="tight")
#実行
etfs = ['VTI','SPXL']
df = make_df(etfs)
dd_chart(df)