2
5

More than 1 year has passed since last update.

ゼロから始める株取引!Pythonで株価トレンド予測(1本目:CSVファイルの準備まで)

Last updated at Posted at 2022-02-06

はじめに

年明け早々に市場区分の見直しが発表1され、市場の運営を支えるITベンダはざわざわ(?)していることかと思慮します。
昔は、ヘラクレス(新興企業向けの市場で、現在はJASDAQ)の情報をよく眺めていました。。。懐かしい。

筆者の学生時代からの趣味、いや夢。はい、株取引きで楽して儲けたいです。
昔からメンテしている株価トレンド予測のJavaプログラムは一旦置いといて、再スタートを切るべくちょいと前にPythonプログラムとして刷新しました。

今回から2本立ての記事で、「東証1部の銘柄コードに対して翌日の株価トレンド(上昇/下降)を予測する」過程をCode交えて紹介してゆく。

  1. モデル作成に使うCSVファイルの準備 ★本稿
  2. 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ファイルの準備の過程をまずはご紹介。
そして、ココから先が本番。予測モデルの作成&チューニングのスタートラインに立ったまで。。。


  1. 市場区分見直しの概要 | https://www.jpx.co.jp/equities/market-restructure/market-segments/index.html 

  2. Dockerを使った環境構築 | https://kino-code.com/python_automation_stock_analysis2/#Docker 

  3. Pythonで将来予測|株価データを使ってpythonで機械学習をしてみよう【データ加工、データ整形、予測モデル作成、株価データの分類予測、予測精度の確認まで】 | https://www.youtube.com/watch?v=asfWaVpCyl8 

  4. 機械学習で株価予測(TA-LibとLightGBMを使った学習モデル構築) | https://nehori.com/nikki/2020/01/26/post-15231/ 

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5