株式投資を始めたばかりの人にとって、いざ自分で情報収集を始めると投資情報があまりにも多すぎて、どの情報が有益なのか初心者の方が正しく見極めるのは至難の業です。
巷にあふれている投資情報には、「1日10分チャートを見るだけで稼げます!」「このルールで取引するだけで月何十万稼げます!」といった甘美な言葉を使って、初心者を待ち構えています。
もちろん中には有益な情報、投資手法を発信している方がいることは否定しません。
ただ、ある期間だけ効果のある手法だったり、一部の銘柄にだけ効果のある手法だったりすることが多く、不都合な情報は言及されておらず上手くはぐらかされているのが現状です。
私が株式投資を始めた時も例にもれず、色々な投資手法を試してみては上手くいったりいかなかったりを繰り返し、本当にこの手法を信じていいのか、もやもやした状態が続いていました。
そんな状況に陥った時の1つの羅針盤となるのが、実際に過去の株価のデータを取得して、自分でその投資手法の効果を検証することだと考えています。
今回の記事では、「自分で株価データを取得し、投資シミュレーション(バックテスト)が行える状態になること」をゴールとし、解説していければと考えています。
本職のプログラマーではないため拙いコードではありますが、記事執筆時点で動作確認はとれていますので、その点はご容赦ください。
第1回目となる今回は、株価をYahoo Financeから取得し、取得したデータを表示するところまでを解説します。
用意するもの
・PC
・Google Chrome(ブラウザ)
・Googleアカウント
これだけで大丈夫です。また、基本的に全部無料で利用可能です。
プログラミングが得意な方は、環境構築を自前で行えるので必ずしも「Google Colaboratory」を利用する必要はないですが、今回はGoogleが提供している「Google Colaboratory」(通称Googleコラボ)を使って、初めての方でも挫折しないように進めていきます。
Google Chromeについては、「chrome インストール」等で検索して、PC上で利用できるようにしておいてください。
Googleアカウントについても同様に、「Googleアカウント 作成」等で検索して手順通りに作成をお願いします。
ステップ1:Google Colaboratoryを起動する
「Google Colaboratory」は、簡単に言うと面倒な設定不要でPython等のプログラミング実行環境をブラウザ上で利用できるサービスです。
今回は、プログラミング言語のPythonを用いて上記の株価分析環境を構築します。
Google Colaboratoryの起動は非常に簡単です。ここからは略称のグーグルコラボと呼ばせていただきます。
まずChromeのブラウザを起動し、新しいウィンドウを開くとGoogleの検索窓が中央に表示されているページが現れます。
そこから右上にある9つのドットの箇所をクリックしてください。するとGoogleの様々なアプリが表示されるので、その中から三角形の「ドライブ」のマークをクリックしてください。
するとグーグルドライブの画面が開きます。グーグルドライブは無料で利用できるクラウドのストレージサービスで、これから作成するファイルは全てこのグーグルドライブの中に配置されます。
では早速グーグルコラボのサービスを使ってみましょう。
先ほどのドライブの画面の左上にある「新規」ボタンをクリックします。ここからグーグルドライブ内のフォルダ作成やファイル作成が行えます。一番下のその他にカーソルを合わせると「Google Colaboratory」の候補が現れるので、そこをクリックします。
もし「Google Colaboratory」が見当たらない場合は、候補の下にある「アプリの追加」から「Google Colaboratory」を検索してインストールしてください。
すると画像のような画面が別ウィンドウで立ち上がります。これがグーグルコラボの画面となります。
ステップ2:グーグルドライブをマウント(連動)する
コードを書き始める前にグーグルドライブと連動させておきましょう。この操作はマウントと呼ばれています。
マウントを行うことで、今後ファイルを保存したり読み込んだりする際に任意の場所を指定することができるので非常に便利です。
先ほど開いた画面の左端にいくつかアイコンが並んでいますので、その中のファイルをクリックします。
するとファイルの文字のすぐ下にアイコンが表示されるので、その中の「ドライブをマウント」をクリックします。
許可を求められるので、「Googleドライブに接続」を押します。するとドライブのマウントが完了します。
ステップ3:作業パスの指定
先ほどドライブとのマウントが完了したので、続けて作業パス(作成したファイルの場所)を指定しましょう。
ステップ1でグーグルコラボを起動したタイミングでファイルが作成されているのですが、このファイルはデフォルトで作成されている「Colab Notebooks」フォルダの中に「Untitled1.ipynb」という名前で存在しています。
「Colab Notebooks」フォルダ直下を作業パスとしても問題ないですが、今後他の用件で利用することも踏まえると、今回の株価分析用のフォルダを作成し、そこを作業場所としてもよいです。
初めに開いたグーグルドライブの画面から、新規フォルダ作成やファイル作成も簡単に行えるので、必要に応じて対応ください。
「Colab Notebooks」フォルダ直下を作業パスとする場合は、グーグルコラボの画面に戻って以下のように入力し、youtubeの再生マークのような実行ボタンをクリックします。
問題なく実行されていれば、上の画像のように緑色のチェックと実行結果が表示されます。
「Colab Notebooks」フォルダ内に新しくフォルダを作成し、そこを作業パスとする場合は以下のように記載します。私は直近スイングトレード用に利用していたので、フォルダ名を「swing_trade」としています。ここの部分を作成したフォルダ名で置き換えてください。
#↓ドライブをマウントした後に実施すること
%cd "/content/drive/My Drive/Colab Notebooks/swing_trade"
コードの簡単な説明ですが、1行目はコメント行と呼ばれるもので、#をつけることでその行の以降の入力は無視されて実行はされないため、メモやコードの説明を行う際に利用します。
2行目が作業パスとして指定しているコード部分です。
また、ここでは詳細な説明は省きますが、画面上部にある「コード」をクリックすることで、新しく入力用のセルを追加することができます。
ステップ4:ライブラリインポート
次にライブラリをインポートしておきます。
ライブラリは超ざっくり言うと便利な機能をまとめられたものです。
このライブラリをインポートし都度呼びだすことで、自分でコードを実装せずとも様々な処理が簡単に行えるようになります。
今回必要なライブラリは以下3つです。新しく追加したセルに以下を入力してください。
import datetime as dt
from pandas_datareader import data as pdr #日経平均やナスダック、日本の個別銘柄のデータを取得
import yfinance as yfin
1つ目は日付を扱うことができる「datetime」、2つ目は様々なデータをAPIを利用して取得することができる「pandas_datareader」、3つ目はYahoo Financeからデータを取得するのに必要な「yfinance」です。
2022年ごろまではpandas_datareaderだけでYahoo Financeから取得できていたようなのですが、2023年現在はなぜか上手く取得できないことが多かったため、こちらもインポートしています。
これでライブラリインポートは完了です。
ステップ5:株価データ取得
いよいよ本題の株価取得です。
まずは取得したい期間を決めましょう。今回は2013年から2023年の10年間分のデータを取得します。
start = dt.date(2013,1,1)
end = dt.date(2023,3,31)
1行目のdt.dateの()内に始まりの期間を入力してstartという変数に格納しています。
同様に、2行目で終わりの期間を取得してendという変数に格納します。
変数名はなんでも大丈夫です。また、Yahoo Financeが提供している期間であれば、もっと前の期間も取得可能です。
続いてYahoo Financeから取得するために、追加で以下を記載します。詳細な説明は割愛しますが、オーバーライドの処理を行っているようです。
yfin.pdr_override()
これで株価取得の準備は完了です。今回は例として、日経平均と個別株の三菱UFJ銀行の株価を取得します。
df = pdr.get_data_yahoo('^N225', start, end)
df1 = pdr.get_data_yahoo('8306.T', start, end)
1行目では、get_data_yahooという関数を用いて日経平均の株価を取得し、dfという変数に格納しています。
()内の1つ目は日経平均のコードを指定しており、startとendは先ほど指定した期間を引数として渡しています。
2行目も同様です。日本の個別株の場合は、xxxx.Tという形式で入力する必要があります。xの部分を取得したい銘柄の証券コードに変えてやると、他の銘柄も取得することが可能です。
米国株を取得する場合は、銘柄のティッカーを記載するだけで取得できます。
以下のコードでアマゾン株のデータが取得可能できます。
df2 = pdr.get_data_yahoo('AMZN', start, end)
ステップ6:取得したデータを表示する
実際に取得したデータを表示してみましょう。df.head()という関数を利用することで、一番前の期間の上から5つまでのデータを表示することができます。
df.head()
出力結果が以下のように出ていればOKです。
head関数の()内に数字を入れれば、もっと多くのデータを表示することも可能です。
Open High Low Close Adj Close Volume
Date
2013-01-04 10604.500000 10734.230469 10602.240234 10688.110352 10688.110352 219000000
2013-01-07 10743.690430 10743.690430 10589.700195 10599.009766 10599.009766 187700000
2013-01-08 10544.209961 10602.120117 10463.429688 10508.059570 10508.059570 211400000
2013-01-09 10405.669922 10620.700195 10398.610352 10578.570312 10578.570312 215000000
2013-01-10 10635.110352 10686.120117 10619.650391 10652.639648 10652.639648 268500000
日経平均はdfという変数にデータを格納しています。取得できる項目は左から日付、始値、高値、安値、終値、調整後終値、出来高です。
日経平均指数なので出来高がないはずですが、なぜか表示されています。何が表示されているのか調べきれなかったので、参考程度に捉えてもらえればと思います。
続いて、新しい期間も表示してみます。
df.tail()
出力結果は以下のようになっていればOKです。
Open High Low Close Adj Close Volume
Date
2023-03-24 27368.619141 27397.289062 27257.439453 27385.250000 27385.250000 59500000
2023-03-27 27482.390625 27543.480469 27359.720703 27476.869141 27476.869141 57400000
2023-03-28 27573.820312 27603.449219 27432.759766 27518.250000 27518.250000 66400000
2023-03-29 27549.369141 27897.720703 27505.480469 27883.779297 27883.779297 83800000
2023-03-30 27827.890625 27876.380859 27630.550781 27782.929688 27782.929688 82000000
正しくデータがとれていることが確認できました。
なお、get_data_yahooの仕様で、endに指定した日の1日前のデータまでしか出力されません。なので、3/31のデータを取得したければ、endを4/1としてください。
続いて、三菱UFJも取得してみます。
df1.head()
結果が以下のように表示されればOKです。
Open High Low Close Adj Close Volume
Date
2013-01-04 477.0 485.0 474.0 484.0 335.292023 119113900
2013-01-07 487.0 488.0 475.0 476.0 329.749969 86678900
2013-01-08 469.0 471.0 457.0 462.0 320.051422 117835800
2013-01-09 451.0 472.0 449.0 469.0 324.900665 122409400
2013-01-10 474.0 484.0 472.0 474.0 328.364441 158715200
おわりに
次回は、取得したデータをエクセル等のソフトに出力・読み込みを行い、グーグルコラボを使っていない間も検証に使える手順を紹介できればと考えています。
なお、当記事ではコピペをすれば誰でも同じ結果が出せる、ということを主眼にしております。
そのためPythonや株に関する情報は必要最小限となっておりますので、適宜わからない点は他サイト様で補っていただけると幸いです。
Pythonそのものを勉強したいという場合は、以下の書籍が現状最もとっつきやすく、分かりやすく書かれているのではないかと思います。(私も持っています)興味があれば是非手にとってみてください。
また、同じシリーズでPythonを使った機械学習入門の書籍も発売されています。
結構なボリュームがありますが、初心者にも分かりやすく丁寧に書かれていますので、こちらも入門書としておすすめです。
機械学習に特化しているので、今後株価予測などを行いたい方にぴったりだと思います。
次回の記事はこちらからどうぞ。