Help us understand the problem. What is going on with this article?

python-kabusapiの使い方

概要

前回、kabuステーション®API - REST API用のPythonラッパーを作成したが、簡易的な使用方法を述べる。
また、実際に自分が保有中銘柄や注文中銘柄の確認で使用しているコードを記載する。

Github 参照: https://github.com/shirasublue/python-kabusapi

環境

  • Windows 10
  • Python 3.8.5 ( Microsoft Store からインストール )

大まかなフロー

通常の場合

  1. kabusapi をインポートする。
  2. Context で初期設定を行う。
  3. 煮るなり焼くなりする。

複数のプログラムを同時実行する場合

  1. 同様
  2. Context の初期設定で、最初に立ち上げた他のプログラムから取得したtokenを指定する。
  3. 煮るなり焼くなりする。

サンプルコード

インポート・トークン取得

import kabusapi
api = kabusapi.Context('localhost', '18080', 'hogehoge')

ちなみに、Context の引数のデフォルト値は

hostname='localhost',
port=18080,
password=None,
token=None,

となっているため、通常の使い方では以下のようにパスワードのみ指定すれば本番環境に接続できる。

api = kabusapi.Context(password='hogehoge')

また、kabuステーションAPIでは、トークンを取得する度・または起動する度にトークンが変更される。
他プログラムでtokenが取得されている場合は、以下のようにして設定可能である。

api = kabusapi.Context(token='fugafuga')

トークンを確認するには、api.token を参照すればよい。

print(api.token)

保有中の銘柄表示

positions = api.positions()

positions = sorted(positions, key=lambda x: x['Symbol'])  # 銘柄コード順にソート

print('コード 銘柄         平均取得価格     保有数     現在値       損益')
for position in positions:
    profit_loss = position['ProfitLoss']
    if profit_loss == None:
        profit_loss = '---'

    print("{}\t{:11.7}\t{:>10}\t{:>10}\t{:>10}\t{:>10}".format(
        position['Symbol'],
        position['SymbolName'],
        position['Price'],
        position['LeavesQty'],
        position['CurrentPrice'],
        profit_loss))

注文中の銘柄表示

orders = api.orders()

print('コード 銘柄           注文価格     注文数      現在値      期限')
for order in orders:
    state = order['State']
    if state >= 4:  # 1,2,3: 待機,処理中,処理済
        continue

    price = order['Price']
    if price == 0.0:
        price = '成行  '

    side = order['Side']
    if side == '2':
        side = '買'
    elif side == '1':
        side = '売'

    board = api.board(symbol=order['Symbol'], exchange=1)
    current_price = board["CurrentPrice"]
    if current_price == None:
        current_price = "---"

    print("{}\t{:11.7}\t{:>10}/{:<}\t{:>10}\t{:>10}\t{:>10}".format(
        order['Symbol'],
        order['SymbolName'],
        price,
        side,
        order['OrderQty'],
        current_price,
        order['ExpireDay'],
        ))

shirasublue
うなぎのぼりを夢見て
https://shirasu.blue
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away