Pythonのyahoo-finance-api2用いて株価を取得する

2022-09-28

概要

背景

yahoo-financeを使ってみようと思いましたが、python3.7までしか対応していないらしく私の環境python3.8では動作しませんでした。Historyを見ると2016年から更新が止まっていました。もしかすると今は使えないのかもしれません。
そこでyahoo-finance-api2というライブラリを使用して株価の取得を行います。

目的

yahoo-finance-api2の使用方法について説明をします。

yahoo-finance-api2

yahoo-finance-api2とは

yahoo-finance-api2はpkout氏によって製作された株価データ取得用のライブラリです。データはYahoo Financeより取得をしています。

インストール

pip経由でインストールが可能です。以下のコマンドをターミナルに入力します。

$ pip install yahoo_finance_api2

使用方法

例として「1301【(株)極洋】」の株価を取得してみます。以下のコードを使用して株価データの取得をすることができます。

それでは詳しくスクリプトの内容について説明をしていきます。

ライブラリの読み出し

まず最初に必要なライブラリをimportします。株価を取得するためには以下の2つのライブラリが必要になります。

from yahoo_finance_api2 import share
from yahoo_finance_api2.exceptions import YahooFinanceError

インスタンスを生成する

yahoo-finance-api2ではデータの取得用にすでにクラスが定義されています。インスタンスを生成する際は取得したい銘柄コードを渡します。

code = "1301"  # (株)極洋の東証コード
my_share = share.Share(code + ".T")  # データ取得用のクラス

日本の上場企業の株価を取得する場合は、銘柄コードにTOPIXを表す「.T」をコードの後に付ける必要があります。

株価を取得する

以下のスクリプトを使用することで、株価のデータを取得できます。例外が検出された場合は、エラーメッセージを表示するようにしています。

try:
    symbol_data = my_share.get_historical(share.PERIOD_TYPE_DAY,
                                          3,
                                          share.FREQUENCY_TYPE_DAY,
                                          1)
except YahooFinanceError as e:
    print(e.message)

株価の取得はget_historical関数を使用します。get_historical関数では、データを取得する期間の単位と値、データの取得頻度の単位と値を指定します。それぞれ指定できる値は以下になります。

取得期間

  • DAY
  • MONTH
  • WEEK
  • YEAR

取得頻度

  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • MONTH

取得期間は休日も含みます。ただし休日は取引がない場合はデータが空になります。

結果の出力

プログラムでは以下の値が取得されます。各値はディクショナリ型の値に配列として格納されています。ディクショナリ型になっているのはDataframeに簡単に変換しやすくするためと考えられます。

  • タイムスタンプ
  • 始値
  • 高値
  • 安値
  • 終値
  • 取引数
{'timestamp': [1663718400000, 1663804800000], 'open': [3665.0, 3665.0], 'high': [3685.0, 3665.0], 'low': [3640.0, 3620.0], 'close': [3665.0, 3620.0], 'volume': [10000, 14600]}

応用

東証の株式データを取得する

まずは「東証上場銘柄一覧のExcelファイルから東証コードのリスト抽出する」を参考にして、東証コード一覧のリストを取得してください。その後、codesにリストを渡すことで東証一覧の株価を取得できます。

途中でスクリプトを止めたためエラーが発生しています。無視してください。

日経平均を取得したい方は「yahoo-finance-api2を使って日経平均株価を取得する」もご参照ください。

取得したデータをDataframeに変換する

 先程取得したデータをDataframeに変換します。まず、pandasのライブラリをインストールします。

pip install pandas

 yahoo_finance_api2で取得したデータはsymbol_dataに入っているので、そちらをDataframe型に変換します。

timestampはそのまま保存すると読みにくいので、datetime型に変換しています。

まとめ

yahoo-finance-api2について説明をしました。こんなに簡単にデータが取れるなんて驚きです。途中から若干速度が低下するのでYahoo側でなにかスクレイピングの対策を入れているのかもしれません。

次のステップ

次に取得したデータからチャートを描写したいという方は、「mplfinanceでSBI証券Likeなチャートを記載してみる」をご参照ください。株取引の理解を深めるためにチャートを記載してみるのもオススメです。