グーグルコラボで始める株価分析シリーズその3です。
第3回目となる今回は、Yahoo Financeから取得したデータを用いて、テクニカル指標である移動平均線を追加する手順を解説します。
バックテストを行うにあたって、こうなったら買って、こうなったら手仕舞いする、といった条件を決める必要があります。その際に条件としてよく使われるのがテクニカル指標です。
テクニカル指標の中でも、まずは一番メジャーといっても過言ではない移動平均線を算出します。
巷の投資情報では、移動平均線だけで勝てる!といったものもあるくらいです。(真偽はさておき)
シリーズものとなっておりますので、この記事に直接アクセスされた方は第1回の記事もぜひご参照ください。
前回の記事はこちらです。
ステップ1:事前準備
事前準備として、データ取得まで行います。
グーグルドライブとマウントし、保存先のパスを指定しておきます。(第1回の記事参照)
また、ライブラリもインポートしておきます。
#↓ドライブをマウントした後に実施すること
%cd "/content/drive/My Drive/Colab Notebooks/swing_trade"
import pandas as pd
import datetime as dt
from pandas_datareader import data as pdr #日経平均やナスダック、日本の個別銘柄のデータを取得
import yfinance as yfin
続いて、適当な銘柄のデータを取得します。
start = dt.date(2013,1,1)
end = dt.date(2023,3,31)
yfin.pdr_override()
df = pdr.get_data_yahoo('8306.T', start, end)
取得したデータがdfという変数に格納されました。
ステップ2:単純移動平均線
単純移動平均線(sma)は、簡単にいうと基準の日から指定した過去期間の終値の平均を線でつないだ線です。
例えば、5日単純移動平均は基準の日を含む5日間分の終値を平均した値となります。
証券会社のチャートでは、デフォルトで25日移動平均がよく表示されています。
今回は簡便のため、5日移動平均を算出してみようと思います。
以下のコードで算出が可能です。
close=df['Close']
df['sma05'] = close.rolling(window=5).mean()
1行目はdfのClose列をcloseという変数に格納しています。
2行目は、rolling.meanという関数を利用しています。windowの部分の数字を変えることで、任意の単純移動平均を算出可能です。
算出した値を、sma05という新しく追加した列に格納しています。
headで確認してみましょう。
df.head(10)
Open High Low Close Adj Close Volume sma05
Date
2013-01-04 477.0 485.0 474.0 484.0 335.292023 119113900 NaN
2013-01-07 487.0 488.0 475.0 476.0 329.749939 86678900 NaN
2013-01-08 469.0 471.0 457.0 462.0 320.051422 117835800 NaN
2013-01-09 451.0 472.0 449.0 469.0 324.900726 122409400 NaN
2013-01-10 474.0 484.0 472.0 474.0 328.364410 158715200 473.0
2013-01-11 482.0 485.0 476.0 479.0 331.828186 102374600 472.0
2013-01-15 487.0 488.0 481.0 483.0 334.599182 83801000 473.4
2013-01-16 479.0 482.0 466.0 469.0 324.900726 111780600 474.8
2013-01-17 473.0 474.0 461.0 471.0 326.286194 109902600 475.2
2013-01-18 484.0 485.0 477.0 484.0 335.292023 117878500 477.2
5日移動平均のため、始めの4日間はNaNになっています。5日目以降は正しく算出されていそうです。
ステップ3:指数平滑移動平均線(次回実施)
続いて指数平滑移動平均線(ema)を追加します。
と思ったのですが、emaを算出するにはTa-libというライブラリを利用することで簡単に算出することができるのですが、グーグルコラボで利用しようとするとなかなか手間がかかるので、次回MACDやRSIを算出する回でまとめて解説とさせてください。
ステップ4:出来高移動平均線
最後に出来高移動平均線を算出します。
こちらも単純移動平均線と同じで、扱う値が終値⇒出来高に変わっただけです。
出来高を伴って上昇/下落した日はトレンド発生のシグナルとなったり、トレンドの転換点となったりすると言われています。
出来高を伴ったかどうかの判断基準として、出来高移動平均線を使うことが多いので、これも有用な指標となりそうです。
例として5日の出来高移動平均線を算出します。
volume=df['Volume']
df['vwma05'] = volume.rolling(window=5).mean()
df.head(10)
問題なく算出されていそうです。
Open High Low Close Adj Close Volume sma05 vwma05
Date
2013-01-04 477.0 485.0 474.0 484.0 335.292023 119113900 NaN NaN
2013-01-07 487.0 488.0 475.0 476.0 329.749939 86678900 NaN NaN
2013-01-08 469.0 471.0 457.0 462.0 320.051422 117835800 NaN NaN
2013-01-09 451.0 472.0 449.0 469.0 324.900726 122409400 NaN NaN
2013-01-10 474.0 484.0 472.0 474.0 328.364410 158715200 473.0 120950640.0
2013-01-11 482.0 485.0 476.0 479.0 331.828186 102374600 472.0 117602780.0
2013-01-15 487.0 488.0 481.0 483.0 334.599182 83801000 473.4 117027200.0
2013-01-16 479.0 482.0 466.0 469.0 324.900726 111780600 474.8 115816160.0
2013-01-17 473.0 474.0 461.0 471.0 326.286194 109902600 475.2 113314800.0
2013-01-18 484.0 485.0 477.0 484.0 335.292023 117878500 477.2 105147460.0
次回の記事はこちらからどうぞ。
終わりに:もっと勉強したい方向けのおすすめ参考書
当記事ではコピペをすれば誰でも同じ結果が出せる、ということを主眼にしております。
そのためPythonや株に関する情報は必要最小限となっておりますので、適宜わからない点は他サイト様で補っていただけると幸いです。
Pythonそのものを勉強したいという場合は、以下の書籍が現状最もとっつきやすく、分かりやすく書かれているのではないかと思います。(私も持っています。)興味があれば是非手にとってみてください。
また、同じシリーズでPythonを使った機械学習入門の書籍も発売されています。
結構なボリュームがありますが、初心者にも分かりやすく丁寧に書かれていますので、こちらも入門書としておすすめです。
機械学習に特化しているので、今後株価予測などを行いたい方にぴったりだと思います。