始める無料で始める

移動平均と 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}}\)

期間 ntalib.RSI()timeperiod 引数で設定します。

RSI では 14 期間がよく使われるため、今回もその値を計算に使用します。

この演習はコースの一部です

Python による金融のための Machine Learning

コースを見る

演習の手順

  • 特徴量名のリストを作成します(最初は '5d_close_pct' のみを含むリストから始めましょう)。
  • timeperiod を 14、30、50、200 として、修正終値(lng_df['Adj_Close'])から talib.SMA() を使って移動平均を計算しましょう。
  • Adj_Close で割ることで、移動平均を修正終値で正規化しましょう。
  • ループ内で、Adj_Closentimeperiod として 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)
コードを編集して実行