
【Python】【テクニカル指標】単純移動平均線(SMA:Simple Moving Average)を算出
ここでは取得した株価データから単純移動平均線(SMA:Simple Moving Average)を算出します。単純移動平均線はトレンドフォロー系のテクニカル分析指標です。現状のトレンドの見極めや、トレンド転換に対する売買シグナルなどを求めることができます。
単純移動平均線の計算式$${\\}$$
$${SMA(t) = Close(t) + Close(t-1) + ・・・+ Close(t-n+1) / n}$$$${\\}$$
$${SMA(t)}$$:現時点での移動平均値$${\\}$$
$${Close}$$:終値$${\\}$$
$${t}$$:現時点$${\\}$$
$${n}$$:算出期間$${\\}$$
なお、最低限のポイントのみの説明にするため、Pythonライブラリ、モジュール等のインストール方法については割愛させて頂きます。お使いのPC環境等に合わせてインストールしてもらえればと思います。
1.株価データを取得する
単純移動平均線を算出するには、pandasのDataFrameオブジェクトにデータを用意する必要があります。ここでは、下記を参考にOHLCV(始値 / 高値 / 安値 / 終値 / 出来高)形式の日経平均株価(^NKX)データを取得します。データの取得期間は、2023年3月1日から現在の日付までです。
import pandas_datareader.data as web
import datetime
start = '2023-03-01'
end = datetime.date.today()
df = web.DataReader('^NKX', 'stooq', start, end)
2.単純移動平均線を計算する(pandasのrollingメソッド)
Pythonで移動平均値を求めるときに計算式を書かなくてもローリング計算を行うための専用メソッドがpandasの中に用意されています。今回はpandasのrollingメソッドを利用します。
使い方は非常に簡単です。データフレーム形式のohlcvデータを、算出期間を引数に持ったrollingメソッドで計算させます。ローリング計算の計算方法を平均にするため後にmean()をつけます。rollingメソッドの引数に設定している window=5 は算出期間です。df['ma5']には計算された移動平均値が返されます。
df['ma5'] = df['Close'].rolling(window=5).mean()
df.head(10)

3.単純移動平均線を計算する(TA-Libを利用)
Ta-Lib(Technical Analysis Library)を使用することでも移動平均を算出することができます。Ta-Libはさまざまなテクニカル指標を計算するためのPythonのライブラリです。
SMAメソッドの引数に設定している timeperiod=5 は算出期間です。df['ma5']には計算された移動平均値が返されます。
import talib as ta
df['ma5'] = ta.SMA(df['Close'], timeperiod=5)
df.head(10)

4.ローソク足チャートに移動平均線を追加して描画する
次のコードではrollingメソッドを使用して5日と25日の移動平均線を計算し、自分で用意した移動平均線をローソク足チャートに追加することも可能です。線の太さや色も指定することも可能です。
具体的には、rolling()を使って移動平均線を計算して、addplotで追加しています。addplotの中には、リスト形式で表示したいデータを指定します。
import mplfinance as mpf
# 移動平均線の計算
df['ma5'] = df['Close'].rolling(window=5).mean()
df['ma25'] = df['Close'].rolling(window=25).mean()
# 表示したいデータをリスト形式で指定
apd = [
mpf.make_addplot(df['ma5'], color='blue', width=0.8),
mpf.make_addplot(df['ma25'], color='red', width=0.8),
]
mpf.plot(df, type='candle', addplot=apd)

ローソク足チャートの描画の参考
これで、Pythonを使用して単純移動平均線(SMA)を描くことができました。取得した情報を使用して、現状のトレンドの見極めや、トレンド転換に対する売買シグナルなどを求めることができます。