joda!!

jodaによるプログラミング芸

モデルを改善しようシリーズ① volume追加

はじめに

当記事は、

jodawithforce.hatenablog.com

のBaseCodeをどうにかして、
モデルを改善しようseriesです。

タイトルのように、 特徴量にvolumeをくわえていきます。

目次

背景

volumeは、単位時間あたりにどれだけの取引が行われたかを示します。
ティック(価格が動いた回数)であったり、
売買代金であったり、
取引枚数であったりと
様々な種類のボリュームが存在します。

基本的にはボラティリティ流動性を表す指標という理解で問題ないかと思われます。

特徴量を作っていこう

今回は非常に簡単です。
利用する特徴量をまとめた features
"volume" と記述するだけです。
GMOからOHLCVをダウンロードしてくる際に、
既にdfにはvolumeが含まれます。
これまではテクニカル指標を作成するために利用していた
volumeカラムを、特徴量として使うよ、と指示してあげるだけでOKですね。

設計

featuresに"volume"

コード

features = sorted([
    "volume",
    'ADX',
    'ADXR',
    'APO',
    'AROON_aroondown',
    'AROON_aroonup',
    'AROONOSC',
    'CCI',
    'DX',
    'MACD_macd',
    'MACD_macdsignal',
    'MACD_macdhist',
    'MFI',
#     'MINUS_DI',
#     'MINUS_DM',
    'MOM',
#     'PLUS_DI',
#     'PLUS_DM',
    'RSI',
    'STOCH_slowk',
    'STOCH_slowd',
    'STOCHF_fastk',
#     'STOCHRSI_fastd',
    'ULTOSC',
    'WILLR',
#     'ADOSC',
#     'NATR',
    'HT_DCPERIOD',
    'HT_DCPHASE',
    'HT_PHASOR_inphase',
    'HT_PHASOR_quadrature',
    'HT_TRENDMODE',
    'BETA',
    'LINEARREG',
    'LINEARREG_ANGLE',
    'LINEARREG_INTERCEPT',
    'LINEARREG_SLOPE',
    'STDDEV',
    'BBANDS_upperband',
    'BBANDS_middleband',
    'BBANDS_lowerband',
    'DEMA',
    'EMA',
    'HT_TRENDLINE',
    'KAMA',
    'MA',
    'MIDPOINT',
    'T3',
    'TEMA',
    'TRIMA',
    'WMA',
])

結果

feature importance

BaseCodeのfeature importance

f:id:jodawithforce:20211214125240p:plain

volume追加後のfeature importanse

f:id:jodawithforce:20211214125424p:plain

累積リターン

BaseCode

f:id:jodawithforce:20211214125654p:plain

volume追加後

f:id:jodawithforce:20211214125749p:plain

考察

特徴量重要度からわかるように、volumeカラムは分析に大きく貢献するようです。
そもそもの話、volumeから作成している特徴量も多いので、
元となるvolume見たほうが早い ということなのかもしれません。
累積リターンに関しては、2.5増加しています。
累積リターンは割合なので、百分率にすると、 250%
になります。
予測精度の向上により、利回りが250%改善したということですね。

参考