あなたの持っている銘柄の高値からの下落率を把握していますか?人気のETF銘柄で過去の下落幅・ドローダウンをGoogle ColabのPythonウェブアプリで分析・可視化・表示!【コピペで動く!】

スポンサーリンク
投資

2022/04/08 追記 

Webアプリで18種類のETFの一年間のドローダウンが見れるようにしました。
基準として 

・S&P500連動ETF
・米国国債 7-10年 ETF
・米国国債 20年超 ETF
・金地金との連動ETF
と以下の14銘柄から一つを選べるようになります。

基本の4つはレイ・ダリオ推奨「オール・ウェザー戦略」をETFで構築で扱った銘柄です。

その他14銘柄を含む合計18銘柄の詳細はこちらの記事で紹介しています。

結果は以下のようになります。

興味ある人は是非使ってみてください。また、追加してほしい銘柄などあるようであれば、コメントなどいただければ場合によっては対応できるかもしれません。

以下のような株式投資におけるドローダウン時のデータをPythonのデータフレームで出力する方法についての質問をいただきました。

python便利 より:

2022-02-11 05:29

ドローダウンの部分が非常に参考になりました。

ありがとうございます。

ドローダウンの部分をグラフでなく、データフレーム型で表示させたいときは、どのようにコードを打てばいいのですか?

https://worth2know.com/python-statistical/#comment-33

以前書いたコードなどがありますので、疑問や問題の解決にご協力したいと思います。

2022/03/06 追記 
Google Colaboratoryでは動いていたのですが、一部Windowsの環境では動いていないとの連絡を行けましたので、修正を行いました。

また過去データを取得してのWebアプリにしてみました。過去データについては需要によっては更新していきたいと思ています。

株式トレード的な視点や、Pythonの関数的な視点数学的な統計的な視点など、”分からない・難しい”と感じる部分をきちんと切り分けて対応できれば、何か新しいことを見つける機会になるのではないでしょうか。

Webアプリにについてはこちらをご参照ください。

すべての質問に答えられるわけではないですが、依然調べたこともあったように記憶してますので、それをもとに python便利様 のご質問にお応えできればと思います。

この記事でできる事

Yahoo-USから米国株のETFデータをダウンロードし、そのドローダウンについて考察します。

下準備

いつも通りGoogle Colaboratoryのpythonを使うことにより、無料で、簡単に調査します。

Google Colaboratory については以下の記事を参考にして下さい

また、今回は以下の記事に対して、ご質問をいただきました。

Pythonでのデータ取得

まずは、データを取得します。

!pip install yfinance --upgrade --no-cache-dir

import datetime
import yfinance as yf
import matplotlib.pyplot as plt
%matplotlib inline

start = datetime.date(2014,12,31)
end = datetime.date.today()

codelist = ["QYLD","QQQ","SPY"]

data2 = yf.download(codelist, start=start, end=end)["Adj Close"]
display(data2.head(2).append(data2.tail(2)))

df_pct=100*data2.pct_change().dropna()
display(df_pct[codelist].head(2).append(df_pct[codelist].tail(2)))

df=(1+data2.pct_change()).cumprod()
df.plot(figsize=(8,6),fontsize=18)
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5), fontsize=18)  

plt.grid(True)
plt.show()

ここからドローダウンの解析なのですが、以前 Stack overflow(熱狂的でプロフェッショナルなプログラマーのためのQ&A)あたりで見つけて自分なりにチューニングしたコードがありますので、それを紹介しておきます。

2022/03/06 追記 
Google Colaboratoryでは動いていたのですが、一部Windowsの環境では動いていないとの連絡を行けましたので、修正を行いました。

修正箇所は5行目の(以下に

index=data2.index,

を追記しています。

スクリーンキャプチャは以前のまま、コードは修正後となっています。

import pandas as pd
import matplotlib.dates as mdates

output_df=pd.DataFrame(index=data2[codelist].columns,columns=["MAXDD","STD","RETURN"])
input_sheet_df=pd.DataFrame(index=data2.index,columns=["close","Roll Max","Daily_Drawdown","Max_Daily_Drawdown"])

code=["SPY"]
df3=data2[code].copy()

window = 252
plt.rcParams["font.size"] = 18
fig, ax = plt.subplots(figsize=(12, 7))


input_sheet_df["close"]=df3[code].dropna().copy()
input_sheet_df["Roll_Max"] = input_sheet_df["close"].rolling(window, min_periods=1).max()
input_sheet_df["Daily_Drawdown"] = input_sheet_df["close"]/input_sheet_df["Roll_Max"] - 1.0
input_sheet_df["Max_Daily_Drawdown"] = input_sheet_df["Daily_Drawdown"].rolling(window, min_periods=1).min()

output_df.at[code,"MAXDD"]=input_sheet_df["Max_Daily_Drawdown"].min()

input_sheet_df["HV"]=100*input_sheet_df["close"].pct_change().std()

output_df.at[code,"STD"]= input_sheet_df["HV"][-1]
output_df.at[code,"RETURN"]=100*(input_sheet_df["close"][-1]-input_sheet_df["close"][0])/input_sheet_df["close"][0]    


plt.plot(input_sheet_df.index,input_sheet_df["Daily_Drawdown"],label=code,linewidth=4)
plt.plot(input_sheet_df.index,input_sheet_df["Max_Daily_Drawdown"],label=code,linewidth=4)    

plt.grid(True)
Dateform=mdates.DateFormatter('%y/%m')
ax.xaxis.set_major_formatter(Dateform)

display(output_df.T[code])
display(input_sheet_df)

今となってはなんで、これやっていたんだっけ、、という部分もないわけではないですが、いまだに動いているようで、なんかすごいな、、という感じではあります。

オレンジ色の線は252日営業日前(約一年)の最大ドローダウンとなります。監視期間をロールして言っている状態になります。

自己流で書いている部分や、以前に書いたものですが、ご参考になればと思います。

私自身分からないことや、記事として書く時間が取れない場合もありますが、わかる範囲内では今後も質問やコメントなどいただければ、おこたえしていきたいと思います。

また、現在のところコメント入力でのメールアドレスの認証は外してありますので、お気軽にコメント等いただければ幸いです。

ディスクレーマー

投資に関する免責事項情報の提供・作業代行を目的としており、投資勧誘を目的とするものではありません。

まとめ

参考にさせていただいた記事を紹介します。

スタック・オーバーフロー
熱狂的でプロフェッショナルなプログラマーのためのQ&A
pythonで株価分析④【上場から現在まで。ドローダウンやリターンを美しく視覚化】
皆様、こんにちは。 今回は、pythonを使用した株価分析シリーズの第4弾です!(^_-)-☆ 前回のシリーズ③では、村上ファンドの手法にフォーカスするあまり、 全然pythonが出てきませんでした。 その反省を踏まえて、今回はウルトラ役に立つ❕(・ω・)ノ pythonコードをご紹介させて頂きます。 誰でも、15秒で...
【Python】株価ドローダウンチャートの作成 - Qiita
指数データをもとにドローダウンチャートを作成するコードです。#ライブラリの読み込みimport numpy as npimport matplotlib.pyplot as pltimpor…

---

関連記事を紹介します。

Pytho,投資関係に関する記事をご紹介します。

Python高速化! for文は遅いので、”これ”を使うと30倍早いですよ!【Google ColabのPython:コピペで動く!】
【コピペで動く!】Pythonで1.5GBのcsvファイル読み込み高速化:1分5秒⇒4秒程度 DASK , pickle (Pythonコードあり)
【コピペで動く!】日本株、米国株で個別銘柄ベータ値(β値)を簡単に調べる方法 Python 米国株 Webサービス&コード 【Google Colabで違いをみつけろ!】
【コピペで動く!】Google ColabでPython を用いての 効率的フロンティア と ポートフォリオの最適化 Efficient Frontier & Portfolio Optimization with Python [Part 2/2]
【コピペで動く!】20行で資産運用モデル作成 Google ColabのPythonで 米国株の株価を取得し、グラフ・チャートを表示
過去50年間のS&P500の季節性の値動きから負けにくいポジション構築はできるのか考える・大統領選挙のアノマリー対応!【コピペで動く!】Google ColabのPythonで自分で調べてみよう!
曜日による米国株指数(S&P500)のパフォーマンスに違いはあるのか?有利なポジション取りはできるのか?【Google ColabのPython:コピペで動く!】Twitterで出てくる知見は本当か自分で調べてみよう。
【解決】スクレイピングでHTTP Error 403: Forbiddenでアクセスできないときに試すべき方法【コピペで動く!】【Google Colab:Python:pd.read_html,selenium】
【解決】Google ColabのPythonでエクセル(Excel)ファイルやCSVファイルに出力・入力する方法【コピペで動く!】
【コピペで動く!】レイ・ダリオ推奨「オール・ウェザー戦略」をETFで構築するには? ETFの手軽さとそのパフォーマンスの高さとは!【違いをみつけろ!】
【コピペで動く!】IB証券(インタラクティブ・ブローカーズ証券 )へのPythonでのAPI接続 ib_insync [自分が使っているPythonコード]
米国債のゼロクーポン債STRIPSについてのメモ
自動化・効率化でなにができるのか!Google FinanceやYahoo Financeからデータ取得して年初来パフォーマンスや週次騰落率のファクターチェック
米国株のティッカー(Symbol)のスクレイピングによる取得、APIによるヒストリカルデータやファンダメンタルズデータ取得について【コピペで動く!】Python,Quandl,無料枠あり
Google ColabでYouTube動画を開始・終了の時間を指定してPythonでダウンロード(音声・動画両方対応)【コピペで動く!】

コメント