はじめに
年明け早々に市場区分の見直しが発表1され、市場の運営を支えるITベンダはざわざわ(?)していることかと思慮します。
昔は、ヘラクレス(新興企業向けの市場で、現在はJASDAQ)の情報をよく眺めていました。。。懐かしい。
筆者の学生時代からの趣味、いや夢。はい、株取引きで楽して儲けたいです。
昔からメンテしている株価トレンド予測のJavaプログラムは一旦置いといて、再スタートを切るべくちょいと前にPythonプログラムとして刷新しました。
今回から2本立ての記事で、「東証1部の銘柄コードに対して翌日の株価トレンド(上昇/下降)を予測する」過程をCode交えて紹介してゆく。
- モデル作成に使うCSVファイルの準備 ★本稿
- CSVファイルをInputにした予測モデルの作成
本稿で紹介すること
- データの収集および整形
- 特徴量設計
本稿で紹介しないこと
- 予測モデルの作成(含むハイパーパラメータのチューニング)
- 予測精度の確認
- 特徴量重要度の確認(可視化)
まずは、環境の準備
こちらで紹介されているDockerを使った環境2を参考にしました。
筆者は、作ったコンテナイメージを使ってJupyterHubからコンテナ起動しました。
ベースのコンテナイメージは、こちらで公開されているものを利用しました。
以下、PythonとPythonライブラリ群のVer情報です。
$ python -V
Python 3.8.8
$ python -m pip --version
pip 21.3.1 from /opt/conda/lib/python3.8/site-packages/pip (python 3.8)
続いて、データの収集および整形
こちらの動画にて解説されているPythonコード3を参考にしました。冒頭から約9分です。
異なるところを簡単に。
筆者は、自宅PCからプロバイダ網抜けてインターネット接続ありの環境で実行しています。
企業(Proxy環境)の方はお気を付けくださいませ。
動画では「日経225インデックス」を対象としているのですが、本稿では冒頭で伝えた通り東証1部の銘柄コードを対象としました。
そのため、以下のPythonコードでデータ取得しています。
# 分析用データのダウンロード
import datetime
import pandas_datareader as data
# 銘柄コード
MEIGARA_CODE = '9983.T'
start = datetime.date(2010, 1, 1)
end = datetime.date(2021, 12, 31)
df = data.DataReader(MEIGARA_CODE, 'yahoo', start, end)
df.to_csv('%s.csv' %MEIGARA_CODE)
目的変数(pandas.DataFrameのUp列)まで作ります。
そして、特徴量設計
基本的に、参考動画の流れをそのままにです。
が、異なるところを簡単に。
以下のPythonコードで勢力指数を追加しました。
# 勢力指数(Force Index)を追加
df['Force_Index'] = df['Close'] * df['Volume']
加えて、いくつかテクニカル指標を追加しました。
「TA-Libで株価のテクニカル指標をチェック」の項で紹介されているテクニカル指標が対象4。
TA-Libは秀逸ですね(インストールはちょっとクセあるけれども)。
# TA-Libのインポート
import talib
# テクニカル指標
def add_technical_features(df):
# Simple Moving Average
close = df['Close']
df['sma3'] = talib.SMA(close, timeperiod=3)
df['sma5'] = talib.SMA(close, timeperiod=5)
df['sma25'] = talib.SMA(close, timeperiod=25)
df['sma50'] = talib.SMA(close, timeperiod=50)
df['sma75'] = talib.SMA(close, timeperiod=75)
df['sma100'] = talib.SMA(close, timeperiod=100)
# Bollinger Bands
df['upper1'], middle, df['lower1'] = talib.BBANDS(close, timeperiod=25, nbdevup=1, nbdevdn=1, matype=0)
df['upper2'], middle, df['lower2'] = talib.BBANDS(close, timeperiod=25, nbdevup=2, nbdevdn=2, matype=0)
df['upper3'], middle, df['lower3'] = talib.BBANDS(close, timeperiod=25, nbdevup=3, nbdevdn=3, matype=0)
# MACD - Moving Average Convergence/Divergence
df['macd'], df['macdsignal'], df['macdhist'] = talib.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9)
# RSI - Relative Strength Index
df['rsi9'] = talib.RSI(close, timeperiod=9)
df['rsi14'] = talib.RSI(close, timeperiod=14)
return df
Notebook(Pythonコード)
githubで公開しました。このタイミングですが、参考サイトの方々に感謝申し上げます。
まとめ
モデル作成に使うCSVファイルの準備の過程をまずはご紹介。
そして、ココから先が本番。予測モデルの作成&チューニングのスタートラインに立ったまで。。。
-
市場区分見直しの概要 | https://www.jpx.co.jp/equities/market-restructure/market-segments/index.html ↩
-
Dockerを使った環境構築 | https://kino-code.com/python_automation_stock_analysis2/#Docker ↩
-
Pythonで将来予測|株価データを使ってpythonで機械学習をしてみよう【データ加工、データ整形、予測モデル作成、株価データの分類予測、予測精度の確認まで】 | https://www.youtube.com/watch?v=asfWaVpCyl8 ↩
-
機械学習で株価予測(TA-LibとLightGBMを使った学習モデル構築) | https://nehori.com/nikki/2020/01/26/post-15231/ ↩