【株価予測ツール作成②】Pythonで株価と指標を取得する方法

株価予測ツールを作成するために取引の判断をするために必要なデータを集めます。
前回の記事で株価を予測するために見るべき指標を紹介しました。
判断材料になる指標
- チャート(株価)
- 出来高
- 信用残
- 指数
- 業績
- (配当利回り)
- (機関の空売り状況)
この記事ではこれらの指標をデータとして取得します。
開発言語:Python
主にPythonを利用します。
あくまで予測がメインなので機械学習のライブラリの充実とデータが扱いやすいのが決め手です。個人的に仕事で利用しており馴染みがあるという理由もあります。

ほかにも証券会社からデータを取りやすいなどの理由で株価の分析にはエクセルが多く用いられています。少し調べると分析用のエクセルシートが売っていたりします。
株価を分析する方法のほとんどが Python か エクセル でしょう。
1.チャート(株価)を取得する
チャート(株価)を取得するには pandas_datareader というライブラリを利用します。
ここでは銘柄コード 5401、日本製鉄の株価を取得してみます。
処理としてはstooq というポーランドのサイトから株価を取得しています。
import pandas_datareader.data as web
#銘柄コード入力
stock_code = "5401"
stock_code_name = stock_code + ".JP"
#株価を取得する期間
start = '2020-01-01'
end = dt.date.today()
#データ取得
df = web.DataReader(stock_code_name, data_source = 'stooq', start = start, end = end)
取得したデータフレームは以下です。

一日ごとに初値、終値、高値、安値、出来高が取得できています。試しにローソク足のグラフをプロットします。

このデータから移動平均などのテクニカル指標を求めていきます。
テクニカル指標の計算は次の記事でまとめます。
2.出来高を取得する
出来高も pandas_datareader で取得したデータのなかに含まれています。
3.信用残高を取得する
結論としては今回は信用残高は取得しません。
どうしてもほしい場合は自己責任です。
スクレイピングも以前のような手間は不要でchatGPTの画像入力でできます。

調べた限り信用倍率を取得する方法は3つありますがそれぞれ利用しない理由があります。
信用残高を取得する方法
- スクレイピングによる取得
- APIによる取得
- 楽天RSSから取得
1.スクレイピングによる取得
スクレイピングとはWebから特定の情報を抽出する技術・行為です。
プログラムによる処置も書き起こしもすべてスクレイピングですね。
信用残高が載っているWebサイトはサイト規約でスクレイピングもしくはそれに準ずる行為を禁止しています。
例えば、yahoo!ファイナンスhttps://finance.yahoo.co.jp/はスクレイピングを明確に禁止、株探https://kabutan.jp/もコンテンツの複製行為を禁止しています。
禁止していないサイトがあるかもしれないですが時間の問題かもしれないのでやめておきます。
2.APIによる取得
日本取引所グループhttps://www.jpx.co.jp/markets/paid-info-equities/realtime/06.htmlやauカブコム証券https://kabu.com/company/lp/lp90.htmlが指標を取得するためのサービスを提供しています。
しかし、有料でそもそも信用残高の情報が含まれているのか不明です。
3.楽天RSSから取得
この方法では信用残高に関する情報が取得できます。
しかし、RSS(リアルタイムスプレッドシート)という名前の通り、当日の情報しか取得できません。
学習用に過去数年分はほしいです。
以上が信用残高をなしとした理由です。
どうしてもほしい場合は情報が載っているサイトから過去分を取得し、楽天RSSから取得できる情報で最新の情報を更新していけばよいでしょう。そして個人利用にとどめた方がよいでしょう。
4.指数
株価を取得したpandas_datareaderで日経平均株価やナスダック指数も取得できます。
#日経平均株価
df_nikkei = web.DataReader("^NKX", data_source='stooq', start=start,end=end)
#NYダウ
df_dow = web.DataReader("^DJI", data_source='stooq', start=start,end=end)
#ナスダック指数
df_nasdaq = web.DataReader("^NDQ", data_source='stooq', start=start,end=end)
5.業績
業績についても信用残高と同じ理由で一旦なしにします。
最後に
個人でももう少し情報にアクセスしやすくしてほしいですね。。。