移動平均と RSI の特徴量を作成する
機械学習モデルの予測精度を高めるために、過去のデータを活用したいところですが、多数の過去の時間ステップをそのまま追加するのは扱いが難しくなります。そこで、テクニカル指標を使って過去のデータポイントの情報を1つの時間ステップにまとめる方法が有効です。
移動平均は最もシンプルな指標の一つで、過去のデータポイントの平均値です。TAlib ライブラリの talib.SMA() 関数を使って計算できます。
もう一つよく使われるテクニカル指標が、相対力指数(RSI)です。RSI は次の式で定義されます。
\(RSI = 100 - \frac{100} {1 + RS}\)
\(RS = \frac{\text{average gain over } n \text{ periods}} {\text{average loss over } n \text{ periods}}\)
期間 n は talib.RSI() の timeperiod 引数で設定します。
RSI では 14 期間がよく使われるため、今回もその値を計算に使用します。
この演習はコースの一部です
Python による金融のための Machine Learning
演習の手順
- 特徴量名のリストを作成します(最初は
'5d_close_pct'のみを含むリストから始めましょう)。 timeperiodを 14、30、50、200 として、修正終値(lng_df['Adj_Close'])からtalib.SMA()を使って移動平均を計算しましょう。Adj_Closeで割ることで、移動平均を修正終値で正規化しましょう。- ループ内で、
Adj_Closeとnをtimeperiodとしてtalib.RSI()を使い、RSI を計算しましょう。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
feature_names = ____ # a list of the feature names for later
# Create moving averages and rsi for timeperiods of 14, 30, 50, and 200
for n in [____]:
# Create the moving average indicator and divide by Adj_Close
lng_df['ma' + str(n)] = talib.SMA(lng_df['Adj_Close'].values,
timeperiod=n) / lng_df[____]
# Create the RSI indicator
lng_df['rsi' + str(n)] = talib.____(lng_df['Adj_Close'].____, timeperiod=____)
# Add rsi and moving average to the feature name list
feature_names = feature_names + ['ma' + str(n), 'rsi' + str(n)]
print(feature_names)