FX・シストレ Python プログラミング

【Python】KabuステーションAPIのサンプルコードと使い方②(板情報・価格情報の取得)

この記事は約9分で読めます。

 

 

前回の内容

 

前回の記事:【Python】AUカブコム証券のKabuステーションAPIのサンプルコードと使い方①(口座残高・注文一覧)

 

前回に引き続いてKabuステーションAPIの使い方について紹介していきたいと思います。今回は板情報・価格情報についてサンプルコードと合わせて紹介します。

 

認証トークンの発行

 

今回叩くAPIについても前回と同様に認証トークンが必要になります。またurlはローカルサーバーですが、これはKabustationをソフトをPC上起動すると自動的に立ち上がっています。

 

import urllib.request
import json 
host_ = '18080' # 本番環境
pass_ = 'KABUSTATIONで設定時に決めたパスワード'

# 認証用のトークンを作成する関数
def generate_token():

    obj = {'APIPassword': pass_}
    json_data = json.dumps(obj).encode('utf8')
    url = f'http://localhost:{host_}/kabusapi/token'
    req = urllib.request.Request(url, json_data, method='POST')
    req.add_header('Content-Type', 'application/json') 

    try:
        with urllib.request.urlopen(req) as res:
            content = json.loads(res.read())
        token_value = content.get('Token')
        return token_value

    except urllib.error.HTTPError as e:
        print(e)
        return e

# 関数を実行してトークンを発行
token = generate_token()
print(token)

 

スポンサーリンク
スポンサーリンク

銘柄情報の取得

 

def get_symbol(market, code, token):

    url_symbol = f'http://localhost:{host_}/kabusapi/symbol/{code}@{market}'
    req_symbol = urllib.request.Request(url_symbol, method='GET')
    req_symbol.add_header('X-API-KEY', token)
    try:
        with urllib.request.urlopen(req_symbol) as res_symbol:
            content_symbol = json.loads(res_symbol.read())
    except urllib.error.HTTPError as e_symbol:

        print(e_symbol)
        content_symbol = json.loads(e_symbol.read())
    return content_symbol

 

<実行例>

# ソニー<6758>の銘柄情報を取得
get_symbol(1, 6758, token)

 

<実行結果>

{'BisCategory': '3650      ',
 'TotalMarketValue': 14143032173915.0,
 'TotalStocks': 1261058.0,
 'FiscalYearEndBasic': 20230331,
 'KCMarginBuy': True,
 'KCMarginSell': True,
 'MarginBuy': True,
 'MarginSell': True,
 'DisplayName': 'ソニーG',
 'Exchange': 1,
 'ExchangeName': '東証プ',
 'TradingUnit': 100.0,
 'PriceRangeGroup': '10003',
 'UpperLimit': 14215.0,
 'LowerLimit': 8215.0,
 'Symbol': '6758',
 'SymbolName': 'ソニーグループ'}

 

 

板情報の取得

 

# 板情報・価格情報を取得 
def get_priceinfo(market, code, token):
    url_symbol = f'http://localhost:{host_}/kabusapi/board/{code}@{market}'
    req_symbol = urllib.request.Request(url_symbol, method='GET')
    req_symbol.add_header('X-API-KEY', token)
    try:
        with urllib.request.urlopen(req_symbol) as res_symbol:
            content_symbol = json.loads(res_symbol.read())
    except urllib.error.HTTPError as e_symbol:
        print(e_symbol)
    return content_symbol

 

 

<使用例>

# <3647>ジースリーHDの板情報・約定情報を取得
data = get_priceinfo(1, 3647, token)
print(data)

 

<実行結果>

{'OverSellQty': 141100.0,
 'UnderBuyQty': 193300.0,
 'TotalMarketValue': None,
 'MarketOrderSellQty': 0.0,
 'MarketOrderBuyQty': 0.0,
 'BidTime': None,
 'AskTime': None,
 'Exchange': 1,
 'ExchangeName': '東証ス',
 'TradingVolume': None,
 'TradingVolumeTime': None,
 'VWAP': None,
 'TradingValue': None,
 'BidQty': None,
 'BidPrice': None,
 'BidSign': None,
 'Sell1': {'Price': 259.0, 'Qty': 1300.0, 'Sign': '0101', 'Time': None},
 'Sell2': {'Price': 260.0, 'Qty': 5100.0},
 'Sell3': {'Price': 261.0, 'Qty': 3900.0},
 'Sell4': {'Price': 262.0, 'Qty': 5900.0},
 'Sell5': {'Price': 263.0, 'Qty': 2900.0},
 'Sell6': {'Price': 264.0, 'Qty': 4200.0},
 'Sell7': {'Price': 265.0, 'Qty': 10400.0},
 'Sell8': {'Price': 266.0, 'Qty': 900.0},
 'Sell9': {'Price': 267.0, 'Qty': 4100.0},
 'Sell10': {'Price': 268.0, 'Qty': 1100.0},
 'AskQty': None,
 'AskPrice': None,
 'AskSign': None,
 'Buy1': {'Price': 258.0, 'Qty': 1200.0, 'Sign': '0101', 'Time': None},
 'Buy2': {'Price': 257.0, 'Qty': 1500.0},
 'Buy3': {'Price': 256.0, 'Qty': 3200.0},
 'Buy4': {'Price': 255.0, 'Qty': 8600.0},
 'Buy5': {'Price': 254.0, 'Qty': 7300.0},
 'Buy6': {'Price': 253.0, 'Qty': 2600.0},
 'Buy7': {'Price': 252.0, 'Qty': 6300.0},
 'Buy8': {'Price': 251.0, 'Qty': 3000.0},
 'Buy9': {'Price': 250.0, 'Qty': 7800.0},
 'Buy10': {'Price': 249.0, 'Qty': 3900.0},
 'Symbol': '3647',
 'SymbolName': 'ジー・スリーホールディングス',
 'CurrentPrice': 258.0,
 'CurrentPriceTime': None,
 'CurrentPriceChangeStatus': '0061',
 'CurrentPriceStatus': 1,
 'CalcPrice': 258.0,
 'PreviousClose': 253.0,
 'PreviousCloseTime': None,
 'ChangePreviousClose': 5.0,
 'ChangePreviousClosePer': 1.98,
 'OpeningPrice': None,
 'OpeningPriceTime': None,
 'HighPrice': None,
 'HighPriceTime': None,
 'LowPrice': None,
 'LowPriceTime': None,
 'SecurityType': 1}

 

インデントがずれている場合はGITのコードを参照していただけると幸いです。

https://github.com/beginerSE/kabustationAPI_samplecode

 

 

次は注文の発注方法について紹介していきます

次回:【Python】KabuステーションAPIのサンプルコードと使い方③(現物取引・信用取引の注文発注)

 

オススメ参考書

 

 

 

 

 

コメント

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