AB型技術系 主に備忘録

ほぼプログラム関連の備忘録

au 株コム証券のkabuステーション®APIで株価情報を取得してみる

取引した銘柄の最新の株価を取得したい

数年前からExcelで投資した取引情報等を記録してるのですが、
たまに過去に売却した株をずっと保有していればどうなっていたか?
と思うことがあり、その都度証券会社にログインしてその日の株価を確認してExcelに転記して確認してました。

取引履歴が多くなってきたので手動でやると時間がかかってしまうので自動化することに。
当初は株探等をスクレイピングして最新の株価を取得するようにしました。

freelancer.hatenablog.jp

スクレイピング自体がグレーな感じなのとHPのレイアウトが変更されたりすると
プログラムの修正が発生する。
ということでauカブコム証券が提供するAPIを利用することにしました。

kabuステーション®API利用設定

kabuステーションAPI利用申請

kabuステーション、kabuステーションAPIを利用するためにau 株コム証券にログインして申請します。

注意点1

kabuステーションの通常プランの利用に990円(税込)/月 が必要になります。
初回申込みの翌々月第1営業日まで無料。
その後も預かり資産や取引状態によって無料で利用を続けることも可能。

注意点2

kabuステーションAPIはFintechプランが適用されないと利用不可。
Fintechプランは信用取引口座や先物オプション取引口座の開設状況、取引状態によって適用するか判定される。
初回申込みの翌々月第1営業日までFintechプランが適用される。

kabuステーションのダウンロードとインストール

下記よりsetup.exeをダウンロードしてインストール。
download.r10.kabu.co.jp

kabuステーションのダウンロード

APIシステム設定

kabuステーションを起動する。

kabuステーションのログイン画面

au 株コム証券の口座番号とパスワードを入力してログインする。

kabuステーション

右上の</>を右クリック→APIシステム設定を選択

APIシステム設定を選択
APIシステム設定

APIを利用する」をチェックし、「APIパスワード(本番用)」、「APIパスワード(検証用)」に任意のパスワードを入力。
入力したパスワードは認証時のパスワードとして利用します。
設定後にkabuステーションを再起動する。

APIが利用可能か確認

</>が緑色になればAPIが利用可能。

※ kabuステーション経由でデータを取得するため起動していないとデータは取得できません。

プログラムを作成するために参考にしたページ

REST API リファレンス
kabucom.github.io

サンプルコード
github.com

認証後に指定した銘柄の板情報を取得するサンプル

イオンの板情報を取得するPythonのサンプルプログラム。

import urllib.request
import json
import pprint

# kabuステーションのAPIシステム設定で入力したAPIパスワード(本番用)を指定
obj = { 'APIPassword': 'password' }
json_data = json.dumps(obj).encode('utf8')

# APIトークン取得用のURL
# リファレンス:https://kabucom.github.io/kabusapi/reference/index.html#tag/auth
url = 'http://localhost:18080/kabusapi/token'
# パラメーターをHTTPリクエストメッセージボディに設定
req = urllib.request.Request(url, json_data, method='POST')
req.add_header('Content-Type', 'application/json')
token = ""
try:
    with urllib.request.urlopen(req) as res:
        content = json.loads(res.read())
        # APIトークン
        token = content["Token"]
except urllib.error.HTTPError as e:
    print(e)
    content = json.loads(e.read())
    pprint.pprint(content)
except Exception as e:
    print(e)

# 板情報取得用のURL
# http://localhost:18080/kabusapi/symbol/{symbol}
# symbolには銘柄コード@市場コードを指定、イオンの場合は東証なので市場コードは1、銘柄コードは8267
# リファレンス:https://kabucom.github.io/kabusapi/reference/index.html#operation/boardGet
url = 'http://localhost:18080/kabusapi/board/8267@1'
req = urllib.request.Request(url, method='GET')
req.add_header('Content-Type', 'application/json')
# APIトークンをHTTPヘッダに設定
req.add_header('X-API-KEY', token)
try:
    with urllib.request.urlopen(req) as res:
        content = json.loads(res.read())
        print("現値:" + str(content["CurrentPrice"]))
        print("前日終値:" + str(content["PreviousClose"]))
        print("前日比:" + str(content["ChangePreviousClose"]))
        print("騰落率:" + str(content["ChangePreviousClosePer"]))
        print("始値:" + str(content["OpeningPrice"]))
        print("高値:" + str(content["HighPrice"]))
        print("安値:" + str(content["LowPrice"]))
        print("出来高:" + str(content["TradingVolume"]))
except urllib.error.HTTPError as e:
    print(e)
    content = json.loads(e.read())
    pprint.pprint(content)
except Exception as e:
    print(e)

2023/02/13に実行した結果

現値:2648.5
前日終値:2617.0   
前日比:31.5       
騰落率:1.2        
始値:2625.0       
高値:2654.5       
安値:2616.5       
出来高:2042800.0
イオンの個別銘柄情報

認証→板情報取得の流れで板情報が取得できました。
今のところ板情報以外必要ありませんが、発注処理もできるので板情報と合わせて自動売買なんかもできそうですね。
個人的には条件指定して該当する銘柄一覧が取得できるような機能があれば利用したいけどリファレンスをみた限りではなさそうですね。