【株価予測ツール作成③】Pythonでテクニカル指標算出

前の記事ではPythonで株価指標を取得する方法をまとめました。
この記事では株価からテクニカル分析でよく利用される指標を求める方法をまとめます。
算出する指標
今回は以下の指標を用います。
算出する指標
- 単純移動平均
- ボリンジャーバンド
- RSI
- MACD
- 移動平均乖離率
以下のデータを用います。
#銘柄コード
ticker_symbol="5401"
ticker_symbol_dr=ticker_symbol + ".JP"
#start以降の株価取得
start='2016-01-01'
end = dt.date.today()
#データ取得
df = web.DataReader(ticker_symbol_dr, data_source='stooq', start=start,end=end)
df = df.sort_index()
print(df)

指標の算出に用いるパラメータはすべて楽天証券のデフォルト設定を参考としました。
多くの人が見ている指標を説明変数として用いることが重要だと考えたからです。
単純移動平均
移動平均はPandasで簡単に求められます。
#移動平均(5日、25日、50日、75日、100日)
df["SMA5"] = df["Close"].rolling(window=5).mean()
df["SMA25"] = df["Close"].rolling(window=25).mean()
df["SMA50"] = df["Close"].rolling(window=50).mean()
df["SMA75"] = df["Close"].rolling(window=75).mean()
df["SMA100"] = df["Close"].rolling(window=100).mean()
ボリンジャーバンド
ボリンジャーバンドもPandasで簡単に求められます。
#ボリンジャーバンド
df["std"] = df["Close"].rolling(window=25).std()
df["1upper"] = df["SMA25"] + (1 * df["std"])
df["1lower"] = df["SMA25"] - (1 * df["std"])
df["2upper"] = df["SMA25"] + (2 * df["std"])
df["2lower"] = df["SMA25"] - (2 * df["std"])
df["3upper"] = df["SMA25"] + (3 * df["std"])
df["3lower"] = df["SMA25"] - (3 * df["std"])
RSI
RSIもPandasで簡単に求められます。Pandas様様です。
#RSI(9日、14日)
period = 14
delta = df['Close'].diff()
gain = delta.where(delta > 0, 0)
loss = -delta.where(delta < 0, 0)
avg_gain = gain.rolling(period).mean()
avg_loss = loss.rolling(period).mean()
rsi = 100 *(avg_gain/(avg_gain+avg_loss))
df['RSI14'] = rsi
period = 9
delta = df['Close'].diff()
gain = delta.where(delta > 0, 0)
loss = -delta.where(delta < 0, 0)
avg_gain = gain.rolling(period).mean()
avg_loss = loss.rolling(period).mean()
rsi = 100 *(avg_gain/(avg_gain+avg_loss))
df['RSI9'] = rsi
MACD
MACDも(以下略)
#MACD
es=12
el=26
sg=9
df['ema_s'] = df['Close'].ewm(span=es).mean()
df['ema_l'] = df['Close'].ewm(span=el).mean()
df['macd'] = df['ema_s'] - df['ema_l']
df['signal'] = df['macd'].ewm(span=sg).mean()
del df['ema_s']
del df['ema_l']
移動平均乖離率
#移動平均乖離率
df["SMA5_dev"] = (df["Close"] - df["SMA5"]) / df["SMA5"] * 100
df["SMA25_dev"] = (df["Close"] - df["SMA25"]) / df["SMA25"] * 100
まとめ
普段なにげなく使っていたテクニカル指標の導出方法を知る良い機会となりました。