LINE証券のいちかぶ銘柄を日足チャートで見られるようにしました-その2

Python
スポンサーリンク

皆さんこんにちは!SEふじたけです。

前回はLINE証券のグループAの銘柄一覧を取得するプログラムを作成しました。

今回は、前回の続きでAPIを使用する事でグループAの始値・終値・高値・安値を取得します。

スポンサーリンク

API「yahoo_finance_api2」を使用する

今回はyahoo_finance_api2を使用する事で株価を取得します。

yahoo_finance_api2とは何か?

ざっくりと説明しますとyahoo finance APIを呼び出す為の色々な設定を簡略化したapiです。

ちなみに以下のサイト様の情報によると、yahoo financeは2017年5月頃にサービスは終了したようですが、2017年末から非公式でサービスの提供を始めているようです。

Yahoo Finance USから株価をダウンロードしてみた - Qiita
株式市場を理解する1つの良い方法は過去の株価を取得してチャートを描いてみたり、統計分析をしてみることです。株価の動きを経済変数と比較してみるなどということも大事です。このような環境は海外のほうが日本よりも充実しています。  Pyth...

その為今は、多くの非公式情報が存在しております。

過去の分足データを取得する事ができる

この理由が一番惹かれた点です。過去といっても分足は7日前までですが、分足を取得できるAPIは他を探す限り見つかりませんでした。(あれば教えてもらえると嬉しいです。)

APIの実行可能回数は分からない

以前のyahoo finance apiでは2000回/時間までは無料で実行できましたが、

今は公式情報が存在しないので、実行可能回数が分かる資料はみつかりませんでした。

以下のサイト様を拝見すると、

YahooのFinanceAPIのクエリ制限は何ですか? | 2022
YahooのFinanceAPIのクエリ制限は何ですか?または、制限を説明するドキュメントはどこにありますか? YahooのすべてのAPIについて、私はすべてのAPIの一般的なドキュメントしか見つけることができませんでした。 ..。

一般的に、認証されていない(無料の)バージョンを使用すると、1時間ごとに「4桁の数字」になります。

https://ja.thercb.org/163240-what-is-the-query-limit-OXKVHD

と書いてありますので、具体的な実行回数は分かりませんでした。

[AI]BOTさん
[AI]BOTさん

じゃあ試してみればいいじゃないか!

と言いたい所ですが、制限回数を何回も超えてAPI呼び出せない事態になる事は避けたいので、いずれ暇があれば試していこうと思います。

pipにも対応している

pipにも対応しているため、パッケージの管理も簡単です。

つまり、インストールやアップデートも簡単に実行でき、すぐにAPIを呼び出せる環境が整います。

pipさえ入っていれば以下のコマンドを実行するだけでyahoo_finance_api2の実行準備が整います。

pip install yahoo_finance_api2

「yahoo_finance_api2」の実行方法を探していこう

yahoo_finance_api2のpipリファレンスを参考にしてみようかと思いました。

yahoo-finance-api2
Yahooo Finance API package

・・・情報こんだけ?

これだけ見るとget_historicalメソッドを実行すれば株価は取得できそうですが、東証の株価取得方法とか全く分かりません。

という訳でこちらのサイト様に詳しく記載されておりましたので、参考にさせて頂きました。

株価をダウンロードしてプロット - Qiita
はじめに 株取引を行うために統計を取りたい、と思い、株価のデータの取得方法を調べました。 株価をダウンロードしてプロットするところまでpython で動かせたので、メモします。東京証券取引所で取引されている3銘柄のデータをダウン...

銘柄コードの末尾に「.T」を付ける事で東証の銘柄を取得できます

pipのリファレンス例には記載されておりませんが、例えば「00001.T」のように

銘柄コードの末尾に「.T」を付ける事で東証の銘柄を取得する事ができます。

つまり、前回の記事で取得した一覧情報を以下のように編集すれば動作しそうです。

['1332.T ', ' 日本水産']
['1333.T ', ' マルハニチロ']
['1414.T ', ' ショーボンドホールディングス']
['1605.T ', ' 国際石油開発帝石']
['1801.T ', ' 大成建設']
[AI]BOTさん
[AI]BOTさん

意外と簡単ですね!

こちらをPythonで組んでいこうと思います。

前記事で作成したソースにAPIを組み込む

実際に日足データを出力し、銘柄毎にcsvファイル出力していきます。

yahoo_finance_api2は簡単に実行できた!

以下のコードをご覧下さい。yahoo_finance_api2を実行するために、shareにて銘柄を設定後、get_historicalで日足データを取得します。

from yahoo_finance_api2 import share
from yahoo_finance_api2.exceptions import YahooFinanceError
import pandas as pd

linegrp = []
#ファイルのオープン
with open("C:/WorkDir/Python/GroupA.txt", "r", encoding="utf-8") as file:
    for i in file:
        #空の行は削除する
        if(i.replace('\n', '') == '' ):
            #改行だけの行はスキップする
            continue
        else:
            # 改行は除去する
            linestr = i.rstrip('\n')
            #「/」で分割
            splstr = linestr.split('/')
            # 分割後のスペースを除去
            for idx in range(len(splstr)):
                splstr[idx] = splstr[idx].strip(' ')
            
            #APIで読み込むために、末尾.T付与(東証)
            splstr[0] = splstr[0] + '.T'
            linegrp.append(splstr)
    
    #グループAのリストをAPIに投げる
    for idx, line in enumerate(linegrp):
        my_share = share.Share(line[0])
        symbol_data = None
        try:
            symbol_data = my_share.get_historical(share.PERIOD_TYPE_DAY,10,share.FREQUENCY_TYPE_DAY,1)
            #value:symbol_dataの値, column:各値の名称, index:実データ行
            dframe = pd.DataFrame(symbol_data.values(), index=symbol_data.keys()).T
            dframe.to_csv(line[0] + ".csv", sep="\t")
        except YahooFinanceError as ex:
            print(ex.message)

get_historical関数は株価の取得日数と株価の取得粒度(日足・分足)を設定できます。

上の例でいくと、PERIOD_TYPE_DAY:10、FREQUENCY_TYPE_DAY:1という事から

1日ごとに過去10日間の株価を取得するという事になります。

FREQUENCY_TYPE_MINUTEも設定する事ができ、その場合は分足を取得する事ができます。

上のコードを実行すると、LINE証券のグループA銘柄の株価がcsvファイルで出力されます。

試しに先頭の「1332.T.csv」を開くとちゃんと過去10日間の株価が取得できた事が分かります。

さいごに

今回はyahoo_finance_api2を使用する事により、前回の記事で取得したLINE証券のグループA銘柄の株価を一括取得してみました。

LINE証券の検索画面にグループ単位でいちかぶ銘柄を一覧表示する機能が無いので不便に感じていました。

いちかぶ銘柄に限定すると、API呼び出し回数も抑える事ができるので汎用的でもありますね!

今後はこの過去株価を使用して色々挑戦していこうかと思っています。

最後までお読み頂きありがとうございました。

コメント

タイトルとURLをコピーしました