2023年3月25日土曜日

【Python】株価データに移動平均を付ける

前回(【Python】APIで日本の個別株情報を取得する)、株価データを取得しましたが、それだけでは単なるコレクションなので分析するために、移動平均を追加していきたいと思います。

データは前回同様9432:日本電信電話になります。

9432:日本電信電話 5年間の終値

APIで取得した終値のデータに5日、25日、75日の移動平均線を追加してみます。

今回はJupyter Labでグラフとして表示させます。

■プログラム

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

df=pd.read_csv('9432.csv',encoding='shift-jis', index_col=0)

df.index=pd.to_datetime(df.index)

df['5MA']=df['Close'].rolling(5).mean()
df['25MA']=df['Close'].rolling(25).mean()
df['75MA']=df['Close'].rolling(75).mean()


■解説

1.必要なライブラリのインポート

まずpandasとグラフを描画するmatplotlibをインポートします。

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline


2.CSVを読み込む

1列目をindexとして読み込みます。

df=pd.read_csv('9432.csv',encoding='shift-jis', index_col=0)

読み込んだ状態ではindexが文字列Object型になるので、日付型に変更します。

df.index=pd.to_datetime(df.index)

データの型を確認すると以下のようになります。

df.info()
DatetimeIndex: 1272 entries, 2018-01-03 to 2023-03-03
Data columns (total 5 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   Open    1272 non-null   float64
 1   High    1272 non-null   float64
 2   Low     1272 non-null   float64
 3   Close   1272 non-null   float64
 4   Volume  1272 non-null   int64  
dtypes: float64(4), int64(1)
memory usage: 59.6 KB


3.移動平均を付ける

DataFrame[カラム名].rolling(期間).mean() でそのサイクルに対する平均値を出すことができます。

今回は移動平均なので.mean()ですが、.sum()だとその期間の合計値とかも行けます。

df['5MA']=df['Close'].rolling(5).mean()


データフレームの中を確認するとそれぞれの移動平均値が格納されています。

df
データフレームの中に移動平均値が格納されている


4.グラフに描画する

実際にグラフに描画してみます。

df[['Close','5MA','25MA','75MA']].plot(color=['skyblue','pink','blue','red'])
株価の終値に5日25日75日の移動平均線が表示される

■少し見てみる

よく短期移動平均が長期移動平均を上回るとゴールデンクロスとして株価が上昇する兆し、短期移動平均が長期移動平均を下回るとデッドクロスとして株価が下がる兆しと言われますが、グラフで表現するとホントその通りなんですね。

ゴールデンクロス以降は株価が上がっている

これはゴールデンクロスのポイントを毎日見つければ、上がる株価がわかるんですかね。


↓よろしければクリックをお願いします!



■関連情報

0 件のコメント:

コメントを投稿