20行で資産運用モデル作成 [Python 米国株の株価を取得し、グラフ・チャートを表示]
ーーーーーーーーーーー2021/07/27 追記ーーーーーーーーーーー
Pythonの一部仕様変更などでうまく動いていなかった部分を新しいサイトでは修正しました。
今後適宜修正や改修を行おうとは思いますが、すべてを改修できるわけではないことはご承知おきください。
2021/07/27時点では動いていることは確認しております。
今後こちらに移行します。
ーーーーーーーーーーー2021/07/27 追記ーーーーーーーーーーー
20行のプログラミングコードで資産運用モデルを紹介します。
目標とするのはプログラム言語Pythonを使って米国株の株価データを取得し、グラフ・チャートを表示することです。初心者の方にも簡単にできるように使い方、コードを書いてありますので、入門編としても最適だと思います。
行うことは
Pythonの yfinanceモジュールを使い、
米国個別銘柄の株価、日経平均をダウンロードし、
そのチャートを表示する
ことになります。S&P500の代わりにダウ(DIA)にしたりアマゾンなど、他の銘柄にしたりすることもできます。
Google Colaboratoryのpythonを使うことにより、無料で、簡単に行うことができます。
Colaboratoryを使えば、Chromeブラウザ上で無料でPythonの実行環境を手に入れる ことができます。新規に費用をかけずにやりたいことである「株価データの取得と解析」ができるのでお勧めのツールになります。
Google Colaboratoryの使い方ですが、Google ColaboratoryのサイトにChromeブラウザでアクセスするだけです。
はじめて起動すると、チュートリアル用のnotebookが開きます。初回以降は、直近に開いていたnotebookが立ち上がります。
早速新規に一つnotebookを新規作成してみましょう。
「ファイル>Python 3 の新しいノートブックを」を選択します。(Python 2 は古いバージョンのPythonです。新規で作る場合は3を選ぶことをお勧めします。)
以下のような新しいnotebookが立ち上がると思います。
次は以下のコードを”写経”と思い入力してください。実際にはコピペで行けると思いますので、手順的には簡単ですね。
!pip install yfinance --upgrade --no-cache-dir
import datetime
import yfinance as yf
import matplotlib.pyplot as plt
start = datetime.date(2018,1,1)
end = datetime.date.today()
codelist = ["SPY","^N225","AMZN"]
data2 = yf.download(codelist, start=start, end=end)["Adj Close"]
display(data2.head().append(data2.tail()))
df_all=(1+data2.pct_change()).cumprod()
display(df_all.head().append(df_all.tail()))
df_all.plot(figsize=(8,6),fontsize=18)
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5), fontsize=18)
plt.grid(True)
plt.show()
コードを入力した後はシフトキーを押しながらエンターを押す(「Shift + Enter」)と、このコードが実行され、結果が出力されます。
ーーーーーーーーーーー2021/07/27 追記ーーーーーーーーーーー
2021/07/27時点では動いていることは確認しております。
ーーーーーーーーーーー2021/07/27 追記ーーーーーーーーーーー
表示されているのは
アマゾンの株価
SPY(S&P500に連動するETF)
日経平均
の3つで、2018年1月を1とした場合のパーセントでの推移です。
つまり1万ドル(10000ドル)をアマゾンとSPYに投資いていた場合
アマゾンは16000ドル、(60%の上昇!)
SPYは11000ドル相当(10%の上昇)になっていたということです。
日経平均で言えば100万円投資していた場合94万円になっていたということです。(米国株の強さが際立ちますね。)
もし、
ValueError: zero-size array to reduction operation maximum which has no identity
というようなエラーメッセージがでてしまう場合はYahoo Financeへのアクセスが多くて、一時的にアクセス制限をしていることが考えられます。
10分程度おいて、再度 シフトキーを押しながらエンターを押して実行すると、結果が出てくると思います。
プログラムの内容を説明すると以下のようになります。
!pip install yfinance --upgrade --no-cache-dir
Yahooから株価データを読み取るためのモジュールのインストールになります。
import datetime
import yfinance as yf
import matplotlib.pyplot as plt
使用するモジュールの宣言部分になります。
今回は日付の機能と、株価のデータ読み込みと、グラフの作画の機能を使いますので、3っつ宣言することになります。
start = datetime.date(2018,1,1)
end = datetime.date.today()
データ読み込みの期間を決めます。今回の例では2018年1月1日から本日までのデータの読み込みを行うことにします。
codelist = ["SPY","^N225","AMZN"]
読み込む銘柄リストを指定します。人によってはアップル(AAPL)やマイクロソフト(MSFT)など指定するかもしれませんね。
data2 = yf.download(codelist, start=start, end=end)["Adj Close"]
display(data2.head().append(data2.tail()))
実際のデータの読み込みとそのデータがきちんと読み込めているか表示させての確認です。今回は複数の銘柄のデータ読み込みであることと、データの種類としては["Adj Close"]というタイプのデータを読み込んでいます。
始値、高値、安値、終値などありますが、終値の分割などがあった時の修正値のデータと理解していただければと思います。
df_all=(1+data2.pct_change()).cumprod()
display(df_all.head().append(df_all.tail()))
ここで実際の価格からパーセントの変化率に変換したのち、累積積を算出して実際の価格推移に変更します。累積積とは1番目の要素 * 2番目の要素 * 三番目の要素 * … と和が累積されていく計算のことです。
単純にパーセントを足していくだけでは正確な価格推移になりませんのでcumprod() 累積積を使っています。似たような関数で、cumsum() 累積和というものもあります。
df_all.plot(figsize=(8,6),fontsize=18)
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5), fontsize=18)
plt.grid(True)
plt.show()
チャートの作画部分になります。legendは 伝説 ではなく、図表などに付される凡例や説明文を意味する語ということらしいです。由来は同じですが、ラテン語の「legenda(読まれるべきもの)」に由来するらしいです。
logoも同じ語源らしいです。
駆け足で、米国株の株価を取得し、グラフ・チャートを表示する手順を示しました。
------------------------------------告知枠------------------------------------------
Pythonで米国株を中心とした資産運用モデルについての記事を集めました。
米国株だけでなく投資信託のパフォーマンスもPythonで調べる記事も書いています。
各資産の相関を調べるウェブアプリを作りました。期間、銘柄を選択して、マウスだけで、簡単に銘柄間の関係を調べることができます。