Pythonを使って株価を読出しテクニカル分析を実行

2022年6月7日火曜日

Python備忘録

t f B! P L

2022年6月3日 更新履歴

人口知能を使った株価予想への1歩

ここでは、Pythonを使って株価分析を行うにあたり、初歩的な説明を行います。

米国のテスラ社の株価と日本のトヨタ社の株価を2021年1月1日~2022年5月27日のデータをYahooから読みだしてみます。米国株の場合は、短縮したティッカー名を使用。テスラの場合は"TSLA"となります。日本株の場合は、割り当てられたコード名を使用。トヨタの場合は、"7203"に".T"を付け加えて"7203.T"となります。


import pandas_datareader.data as data

us_stock = data.DataReader('TSLA','yahoo','2021-01-01' ,'2022-05-27')
jp_stock = data.DataReader('7203.T','yahoo','2021-01-01' ,'2022-05-27')
    

テスラの株価(us_stock)は以下の通りです。



  High  Low Open  Close Volume  Adj Close
Date            
2020-12-31  718.719971  691.119995  699.989990  705.669983  49649900  705.669983
2021-01-04  744.489990  717.190002  719.460022  729.770020  48638200  729.770020
2021-01-05  740.840027  719.200012  723.659973  735.109985  32245200  735.109985
2021-01-06  774.000000  749.099976  758.489990  755.979980  44700000  755.979980
2021-01-07  816.989990  775.200012  777.630005  816.039978  51498900  816.039978
... ... ... ... ... ... ...
2022-05-23  679.960022  638.059998  655.020020  674.900024  29634500  674.900024
2022-05-24  653.919983  620.570007  653.530029  628.159973  29697500  628.159973
2022-05-25  669.320007  623.010010  623.849976  658.799988  30713100  658.799988
2022-05-26  718.669983  653.659973  661.419983  707.729980  35334400  707.729980
2022-05-27  759.799988  720.530029  723.250000  759.630005  29630300  759.630005
355 rows × 6 columns
    

'Close'が終値になります。簡単ですよね!以下'High'が高値、'Low'が安値、'Open'がオープン値、'Volume'が出来高、'Adj Close'が調整値となります。トヨタも同じ形式で呼び出されています。

2021年1月1日から指定しているのに何故か2020年12月31日からデータを読み出されていますが。。。。

次に移動平均を求める

先ほど読みだしたTSLAのデータを使っての5日移動平均を求めてみます。


import pandas as pd

MA_5 = us_stock.rolling(window=5).mean()
    

windowの'5'を'25'に変えれば25日移動平均。簡単ですよね!5日移動平均の結果は以下の通りです。



 
High  Low Open  Close Volume  Adj Close
Date            
2020-12-31  NaN NaN NaN NaN NaN NaN
2021-01-04  NaN NaN NaN NaN NaN NaN
2021-01-05  NaN NaN NaN NaN NaN NaN
2021-01-06  NaN NaN NaN NaN NaN NaN
2021-01-07  759.007996  730.362000  735.845996  748.513989  45346440.0  748.513989
... ... ... ... ... ... ...
2022-05-23  732.104004  678.965991  713.578003  703.928003  32788000.0  703.928003
2022-05-24  709.992004  657.309998  694.812012  677.238000  33378420.0  677.238000
2022-05-25  691.756006  641.750000  670.678003  667.035999  33666920.0  667.035999
2022-05-26  688.690002  633.659998  661.562000  666.697998  34714020.0  666.697998
2022-05-27  696.333997  651.166003  663.414001  685.843994  31001960.0  685.843994
355 rows × 6 columns
    

観ての通り、全ての項目において移動平均が計算されています。NaNは「空値」。今回の場合は5日間のデータが揃わない部分がNaNとなります。

次にMACDを求める

MACDとは、Moving Average Convergence Divergenceの略で、移動平均の一種ですが、昔の数字よりも最近の数字を重視した平均値を計算しています。

  • 短期指数平滑移動平均(短期EMA)
  • 長期指数平滑移動平均(長期EMA)
  • MACD = 短期EMA - 長期EMA
  • シグナル = MACDの指数平滑移動平均

また先ほどと同じくTSLAのデータを使います。移動平均の時は全ての項目に対して移動平均が計算されていましたが、今回は「終値」にターゲットを絞りながら、計算過程をMACDというデータフレームへ追加する方法を採用しています。


import pandas as pd

MACD = us_stock
MACD = MACD.drop(['High','Low','Open','Volume','Adj Close'], axis=1)
MACD = MACD.rename(columns={'Close':'株価'})
MACD['短期EMA'] = MACD['株価'].ewm(span=12, adjust=False).mean()
MACD['長期EMA'] = MACD['株価'].ewm(span=26, adjust=False).mean()
MACD['MACD'] = MACD['短期EMA'] - MACD['長期EMA']
MACD['Signal'] = MACD['MACD'].ewm(span=9,adjust=False).mean()    

MACDのデータフレームは以下の通りです。


  株価  短期EMA 長期EMA MACD  Signal
Date          
2020-12-31  705.669983  705.669983  705.669983  0.000000  0.000000
2021-01-04  729.770020  709.377681  707.455171  1.922510  0.384502
2021-01-05  735.109985  713.336497  709.503676  3.832821  1.074166
2021-01-06  755.979980  719.897033  712.946365  6.950668  2.249466
2021-01-07  816.039978  734.688255  720.582929  14.105326 4.620638
... ... ... ... ... ...
2022-05-23  674.900024  747.055582  818.691386  -71.635804  -59.792044
2022-05-24  628.159973  728.763949  804.577948  -75.813998  -62.996435
2022-05-25  658.799988  718.000263  793.779580  -75.779317  -65.553011
2022-05-26  707.729980  716.420220  787.405536  -70.985316  -66.639472
2022-05-27  759.630005  723.067879  785.348089  -62.280210  -65.767620
355 rows × 5 columns
    
  • Signal より MACD が大きい時は上昇トレンド
  • Signal より MACD が小さい時は下降トレンド

これで売買戦略を立てる訳です。

なんか「億万長者への道」ってワイディングロードじゃなく、簡単にたどり着けそうな気しませんか?

次は、売買アルゴリズムを考える前に、売買アルゴリズムの結果を検証するためのツールを作成しようと思います。
では、See you later~(^^♪

更新履歴

2022.06.7
新規作成

QooQ