証券API自動売買Pythonkabuステーション
API概要
kabuステーションAPI(kabu STATION API)は、三菱UFJ eスマート証券(旧auカブコム証券)が提供する個人投資家向けのプログラミング発注基盤。2020年8月リリース。
ユーザーのPC上で起動している「kabuステーション」がローカルHTTPサーバーとして動作し、REST API経由でデータ取得・注文執行を行う。OpenAPI 3.0仕様(v1.5)で定義されており、任意のプログラミング言語から利用可能。
| 項目 | 内容 |
|---|
| 提供元 | 三菱UFJ eスマート証券(旧auカブコム証券) |
| 方式 | ローカルREST API + WebSocket |
| ベースURL(本番) | http://localhost:18080/kabusapi |
| ベースURL(検証) | http://localhost:18081/kabusapi |
| 仕様 | OpenAPI 3.0 |
| 対応商品 | 現物・信用・先物・オプション |
| 利用料 | 無料(kabuステーション月額も無料化済み) |
| 信用取引手数料 | API経由は無料 |
利用条件・セットアップ
前提条件
- 三菱UFJ eスマート証券の口座開設(無料)
- kabuステーション Professional プラン以上の適用
- kabuステーションAPI利用申し込み(Web上で完結、審査不要)
セットアップ手順
- メンバーズサイト → 設定・申込 → らくらく電子契約 → 取引ツール → kabuステーションAPI利用設定
- kabuステーション起動 → 右上「</>」アイコン右クリック → APIシステム設定
- 「APIを利用する」にチェック → APIパスワード設定(英数字6〜16桁) → ソフトリミット金額設定
- kabuステーション再起動(アイコン緑色で利用可能)
認証方式
トークンベース認証。/tokenエンドポイントにAPIパスワードを送信してトークンを取得し、以降のリクエストでX-API-KEYヘッダーに設定。
import requests
res = requests.post("http://localhost:18080/kabusapi/token", json={
"APIPassword": "your_api_password"
})
token = res.json()["Token"]
headers = {"X-API-KEY": token}
| トークン特性 | 詳細 |
|---|
| 有効期間 | kabuステーション起動中のみ |
| 無効化条件 | kabuステーション終了・ログアウト・新規トークン発行時 |
| 利用可能時間 | 6:30〜翌6:15(毎日自動ログアウト) |
エンドポイント一覧
発注系(秒間5件制限)
| メソッド | パス | 説明 |
|---|
| POST | /sendorder | 現物・信用注文 |
| POST | /sendorder/future | 先物注文 |
| POST | /sendorder/option | オプション注文 |
| PUT | /cancelorder | 注文取消 |
情報取得系(秒間10件制限)
| メソッド | パス | 説明 |
|---|
| GET | /board/{symbol} | 板情報・時価情報(気配値10本) |
| GET | /symbol/{symbol} | 銘柄情報 |
| GET | /orders | 注文約定照会 |
| GET | /positions | 残高照会 |
| GET | /ranking | 詳細ランキング(15種類) |
| GET | /exchange/{symbol} | 為替情報 |
| GET | /regulations/{symbol} | 規制情報・空売り規制 |
| GET | /primaryexchange/{symbol} | 優先市場 |
| GET | /apisoftlimit | ソフトリミット値 |
| GET | /margin/marginpremium/{symbol} | プレミアム料 |
取引余力系(秒間10件制限)
| メソッド | パス | 説明 |
|---|
| GET | /wallet/cash | 現物取引余力 |
| GET | /wallet/cash/{symbol} | 銘柄指定の現物余力 |
| GET | /wallet/margin | 信用取引余力 |
| GET | /wallet/margin/{symbol} | 銘柄指定の信用余力 |
| GET | /wallet/future | 先物取引余力 |
| GET | /wallet/option | オプション取引余力 |
銘柄コード取得
| メソッド | パス | 説明 |
|---|
| GET | /symbolname/future | 先物銘柄コード(NK225等11種類) |
| GET | /symbolname/option | オプション銘柄コード |
| GET | /symbolname/minioptionweekly | ミニオプション(限週)銘柄コード |
PUSH配信用銘柄登録(秒間10件制限)
| メソッド | パス | 説明 |
|---|
| PUT | /register | 配信銘柄登録(最大50銘柄) |
| PUT | /unregister | 登録解除 |
| PUT | /unregister/all | 全銘柄登録解除 |
対応市場
| 市場コード | 市場名 |
|---|
| 1 | 東証 |
| 3 | 名証 |
| 5 | 福証 |
| 6 | 札証 |
| 9 | SOR |
| 27 | 東証+ |
発注リクエスト例
現物買い注文(指値)
order = {
"Password": "trading_password",
"Symbol": "7203",
"Exchange": 1,
"SecurityType": 1,
"Side": "2",
"CashMargin": 1,
"DelivType": 2,
"FundType": "AA",
"AccountType": 2,
"Qty": 100,
"Price": 2500,
"ExpireDay": 20260320,
"FrontOrderType": 20
}
res = requests.post(
"http://localhost:18080/kabusapi/sendorder",
json=order,
headers={"X-API-KEY": token}
)
print(res.json())
注文種別コード(FrontOrderType)
| コード | 種別 |
|---|
| 10 | 成行 |
| 13 | 寄成(前場) |
| 14 | 寄成(後場) |
| 15 | 引成(前場) |
| 16 | 引成(後場) |
| 17 | IOC成行 |
| 20 | 指値 |
| 21 | 寄指(前場) |
| 22 | 寄指(後場) |
| 23 | 引指(前場) |
| 24 | 引指(後場) |
| 25 | 不成(前場) |
| 26 | 不成(後場) |
| 27 | IOC指値 |
| 30 | 逆指値 |
板情報取得
res = requests.get(
"http://localhost:18080/kabusapi/board/7203@1",
headers={"X-API-KEY": token}
)
board = res.json()
レスポンスに含まれる主要フィールド:
| フィールド | 説明 |
|---|
| CurrentPrice | 現在値 |
| CurrentPriceTime | 現在値時刻 |
| OpeningPrice | 始値 |
| HighPrice | 高値 |
| LowPrice | 安値 |
| TradingVolume | 売買高 |
| VWAP | 加重平均価格 |
| Sell1〜Sell10 | 売気配(価格・数量) |
| Buy1〜Buy10 | 買気配(価格・数量) |
WebSocket PUSH配信
接続
import asyncio
import websockets
import json
async def receive_push():
uri = "ws://localhost:18080/kabusapi/websocket"
async with websockets.connect(uri) as ws:
while True:
data = json.loads(await ws.recv())
print(f"{data['Symbol']} {data['SymbolName']}: {data['CurrentPrice']}")
asyncio.run(receive_push())
PUSH配信前の銘柄登録
requests.put(
"http://localhost:18080/kabusapi/register",
json={"Symbols": [
{"Symbol": "7203", "Exchange": 1},
{"Symbol": "9984", "Exchange": 1},
]},
headers={"X-API-KEY": token}
)
| PUSH仕様 | 詳細 |
|---|
| 最大登録銘柄数 | 50 |
| 間引き間隔 | 400ms |
| 配信フィールド数 | 約63項目 |
| 配信タイミング | 値更新時リアルタイム |
PUSH配信にはオプション固有のグリークス(IV、デルタ、ガンマ、セータ、ベガ)も含まれる。
レート制限
| API種別 | 制限 |
|---|
| 発注系(sendorder, cancelorder) | 秒間5件 |
| 取引余力系 | 秒間10件 |
| 情報取得系 | 秒間10件 |
| 銘柄登録系 | 秒間10件 |
超過時はエラーレスポンスが返される。
制約事項
- kabuステーションを起動しているPCと同一IPアドレスからのリクエストのみ受付(リモートアクセス不可)
- kabuステーションは常時起動が必要(Windows専用)
- 1PCにつき1インスタンスのみ起動可能
- 利用可能時間: 6:30〜翌6:15(毎日自動ログアウト)
- ソフトリミット(1日あたりの注文金額上限)の設定必須
- PUSH配信は最大50銘柄
SDK・ライブラリ
公式サンプル(GitHub: kabucom/kabusapi)
| 言語 | バージョン |
|---|
| Python | v1.9.0 |
| JavaScript | v1.9.0 |
| C# | v1.3.0 |
| Excelアドイン | v1.11.0 |
| Excelマクロ | v1.19.0 |
リポジトリ: 388スター、MITライセンス
非公式ライブラリ
- python-kabusapi(shirasublue/python-kabusapi)— REST + WebSocket対応、
pip install requests websockets
手数料
| 項目 | 手数料 |
|---|
| 信用取引(API経由) | 無料 |
| 現物取引(〜5万円) | 55円 |
| 現物取引(〜10万円) | 99円 |
| 現物取引(〜20万円) | 115円 |
| 現物取引(〜50万円) | 275円 |
| 現物取引(〜100万円) | 535円 |
| 1日定額(〜100万円) | 0円 |
| 日経225先物 | 275円/枚 |
| 日経225mini | 38.5円/枚 |
| 25歳以下 | 全て無料 |
他社API比較
| 項目 | auカブコム(kabuステーション) | SBI証券(HyperSBI2) | 楽天証券(MS2 RSS) | 松井証券 |
|---|
| 方式 | ローカルREST + WebSocket | ローカルHTTP | Excel RSSアドイン | FXのみAPI公開 |
| 対応商品 | 現物・信用・先物・OP | 現物・信用 | 現物・信用・先物・OP | FXのみ |
| 言語自由度 | 任意(Python等) | 任意(Python等) | Excel VBA限定 | — |
| 公式ドキュメント | 充実(OpenAPI仕様) | 限定的 | あり | — |
| 検証環境 | あり | なし | — | — |
| API手数料特典 | 信用取引無料 | なし | なし | — |
| 審査 | 不要(Web完結) | 不要 | — | 事業者契約必須 |
結論: 個人投資家が株式自動売買APIを利用する場合、kabuステーションAPIが最も整備されている。公式ドキュメント・OpenAPI仕様・検証環境・サンプルコードが揃い、信用取引手数料無料の特典がある。主な制約はWindows PC上でのkabuステーション常時起動が必要な点。
リファレンス