グーグルコラボで始める株価分析シリーズその4です。
第4回目となる今回は、Yahoo Financeから取得したデータを用いて、テクニカル指標である指数平滑移動平均・MACD・RSIを追加する手順を解説します。
バックテストを行うにあたって、こうなったら買って、こうなったら手仕舞いする、といった条件を決める必要があります。その際に条件としてよく使われるのがテクニカル指標です。
MACDやRSIは移動平均に次いでポピュラーなテクニカル指標で、トレードに利用されている方も多いのではないかと思います。
シリーズものとなっておりますので、この記事に直接アクセスされた方は第1回の記事もぜひご参照ください。
前回の記事はこちらです。
ステップ1:事前準備
今回指数平滑移動平均・MACD・RSIの算出には「TA-Lib」というテクニカル分析に特化したライブラリをインポートして用います。
私が利用した当時は(2022年12月)特に問題なくグーグルコラボからも利用できていたのですが、どうやらグーグルコラボで利用されるPython のバージョンが 3.9 にアップグレードされたことに伴い、少し手間が増えてしまいました。
ネットの有識者の記事を参考に、現時点(2023年5月)ではインポートできることが確認とれております。
こちらの記事を参照させていただきました。ありがとうございます。
では手順です。まずは「TA-Lib」のモジュールをサイトからダウンロードしてきて、インストールを行います。
!curl -L http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz -O && tar xzvf ta-lib-0.4.0-src.tar.gz
!cd ta-lib && ./configure --prefix=/usr && make && make install && cd - && pip install ta-lib
画像のように出力結果の最後に「Successfully installed..」と出ていればOKです。ちなみに「TA-Lib」のインストールには3分くらい時間がかかります。
都度「TA-Lib」をインストールすると時間がもったいないので、バックテスト用のデータは取得でき次第csv等の形式で保存しておくことをおすすめします。
続いて、Numpyのアップグレードを行います。(ここから記事を参照させていただきました。)こちらも最後に「Successfully installed」と出ていればOKのようです。
!pip install numpy --upgrade
ここまで進んだら一度ランタイムを再起動します。上部メニューの「ランタイム」から、「ランタイムを再起動」を実行します。
続いて、環境変数を設定します。
!echo 'export LD_LIBRARY_PATH=/usr/lib' >> ~/.bashrc
!source ~/.bashrc
上記の操作が行うことで、「TA-Lib」のインストール準備が整ったので、他のライブラリと同様にインポートします。(参照おわり)
import pandas as pd
import datetime as dt
from pandas_datareader import data as pdr #日経平均やナスダック、日本の個別銘柄のデータを取得
import yfinance as yfin
import talib as ta
ステップ2:指数平滑移動平均線を算出
ここからはtalibを用いてテクニカル指標を算出していきましょう。
指数平滑移動平均(以下ema)は、ざっくり言うと単純移動平均に比べ、基準の日に近い日数の終値ほど重視して値を算出している指標です。
例えば、5日前の終値よりも1日前の終値の値を重視するといった感じです。
start = dt.date(2013,1,1)
end = dt.date(2023,3,31)
yfin.pdr_override()
df = pdr.get_data_yahoo('8306.T', start, end)
今回も三菱UFJの株価を取得します。
close=df['Close']
df['sma05'] = close.rolling(window=5).mean()
df['ema05'] = ta.EMA(close, timeperiod=5)
終値の列をcloseに代入しておきます。emaは、ta.EMAと記載することで算出可能です。
2つ目の引数で期間を指定することができます。今回は5日としています。
tailで出力し、出力結果が以下のようになっていればOKです。
Open High Low Close Adj Close Volume sma05 ema05
Date
2023-03-24 830.000000 835.900024 826.099976 830.000000 814.265381 74099700 837.260010 840.919122
2023-03-27 830.000000 830.700012 816.500000 825.599976 809.948792 75936300 834.200000 835.812740
2023-03-28 840.599976 849.299988 834.500000 839.599976 823.683350 95826000 837.039990 837.075152
2023-03-29 832.099976 845.000000 832.000000 844.000000 828.000000 82038200 835.679993 839.383434
2023-03-30 835.000000 841.000000 827.099976 827.500000 827.500000 100018900 833.339990 835.422290
ステップ3:MACDを算出
続いてMACDを算出します。
MACDは短期のemaと中長期のemaの移動平均線を用いて買い・売りの判断に用いるテクニカル指標です。
こちらもコードは簡単で、1行で済みます。
df['macd'], df['macdsignal'], df['macdhist'] = ta.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9)
fastperiodは短期移動平均、slowperiodは中長期移動平均、signalperiodがmacdシグナルに対応しています。
全て、最も頻繁に使われる期間を使用しています。
出力結果は以下のようになります。
Open High Low Close Adj Close Volume sma05 ema05 macd macdsignal macdhist
Date
2023-03-24 830.000000 835.900024 826.099976 830.000000 814.265381 74099700 837.260010 840.919122 -32.362396 -21.212255 -11.150141
2023-03-27 830.000000 830.700012 816.500000 825.599976 809.948792 75936300 834.200000 835.812740 -33.437620 -23.657328 -9.780292
2023-03-28 840.599976 849.299988 834.500000 839.599976 823.683350 95826000 837.039990 837.075152 -32.782167 -25.482296 -7.299871
2023-03-29 832.099976 845.000000 832.000000 844.000000 828.000000 82038200 835.679993 839.383434 -31.544051 -26.694647 -4.849404
2023-03-30 835.000000 841.000000 827.099976 827.500000 827.500000 100018900 833.339990 835.422290 -31.530780 -27.661873 -3.868906
ステップ4:RSIを算出
最後にRSIを算出します。
RSIは売られすぎ、買われすぎを示すシグナルで、一般的に30を下回ると売られすぎ、70を上回ると買われすぎと言われています。
これらの傾向が本当にシグナルとして使えるのか?は今後のバックテストで確認できればと思います。
こちらもコードは簡単で、1行で済みます。
df['RSI'] = ta.RSI(close, timeperiod=14)
出力結果は以下のようになります。
Open High Low Close Adj Close Volume sma05 ema05 macd macdsignal macdhist RSI
Date
2023-03-24 830.000000 835.900024 826.099976 830.000000 814.265381 74099700 837.260010 840.919122 -32.362396 -21.212255 -11.150141 35.062299
2023-03-27 830.000000 830.700012 816.500000 825.599976 809.948792 75936300 834.200000 835.812740 -33.437620 -23.657328 -9.780292 34.438528
2023-03-28 840.599976 849.299988 834.500000 839.599976 823.683350 95826000 837.039990 837.075152 -32.782167 -25.482296 -7.299871 38.205502
2023-03-29 832.099976 845.000000 832.000000 844.000000 828.000000 82038200 835.679993 839.383434 -31.544051 -26.694647 -4.849404 39.384304
2023-03-30 835.000000 841.000000 827.099976 827.500000 827.500000 100018900 833.339990 835.422290 -31.530780 -27.661873 -3.868906 36.567240
終わりに:もっと勉強したい方向けのおすすめ参考書
当記事ではコピペをすれば誰でも同じ結果が出せる、ということを主眼にしております。
そのためPythonや株に関する情報は必要最小限となっておりますので、適宜わからない点は他サイト様で補っていただけると幸いです。
Pythonそのものを勉強したいという場合は、以下の書籍が現状最もとっつきやすく、分かりやすく書かれているのではないかと思います。(私も持っています。)興味があれば是非手にとってみてください。
また、同じシリーズでPythonを使った機械学習入門の書籍も発売されています。
結構なボリュームがありますが、初心者にも分かりやすく丁寧に書かれていますので、こちらも入門書としておすすめです。
機械学習に特化しているので、今後株価予測などを行いたい方にぴったりだと思います。