bitFlyer Lightning
HTTP APIとRealtime API、2つのAPIの違いは通信方式の違いによるものになります。
HTTP APIはHTTPプロトコルを用いてクライアント(つまりここで言うと私達API利用者)に対して、サーバ(ここで言う情報提供者:bitFlyer)が情報を提供するという仕組みになります。
自動売買での自分に関わるやり取りはこちらの方式を使います。
Realtime APIとはWebSocketを使ったリアルタイムデータのAPIになっています。
何がリアルタイムかというと、こちらが〇〇のデータをくれと言わなくても、チャンネルを指定すれば常に(リアルタイムの)データを流してくれる方式です。データのラジオですかね。
reaitime APIで取引所の値段や板や約定の情報を受信しておき、分析し戦略を立てて、
HTTP APIで自分の状態を確認しつつ、オーダーを出すという流れが理想です。
HTTP API
API制限
- Private API の呼出は 5 分間で 500 回を上限
- 同一 IP アドレスからの API の呼出は 5 分間で 500 回を上限
- 0.1 以下の数量の注文は、すべての板の合計で 1 分間で 100 回を上限
認証
リクエストヘッダに含めます。
- ACCESS-KEY: 開発者ページで発行した API key
- ACCESS-TIMESTAMP: リクエスト時の Unix Timestamp
- ACCESS-SIGN: 以下の方法でリクエストごとに生成した署名
TIMESTAMP,
HTTP メソッド,
リクエストのパス,
リクエストボディ
これらを文字列として連結したものを、 API secret で HMAC-SHA256 署名を行ったもの
#持ち玉を取得するコード例 import datetime import hmac import hashlib import requests url = "https://api.bitflyer.com" path_url = "/v1/me/getpositions?product_code=FX_BTC_JPY" method = "GET" timestamp = str(datetime.datetime.today()) message = timestamp + method + path_url signature = hmac.new(bytearray('あなたのsecret'.encode('utf-8')), message.encode('utf-8') , digestmod = hashlib.sha256 ).hexdigest() headers = { 'ACCESS-KEY' : 'あなたのkey', 'ACCESS-TIMESTAMP' : timestamp, 'ACCESS-SIGN' : signature, 'Content-Type' : 'application/json'} response = requests.get( url + path_url , headers = headers) result=response.json() print(result[0])
使い方 url+path+query
url=’https://api.bitflyer.com’
query path
GET /v1/getmarkets
GET /v1/markets
GET /v1/getmarkets/usa
GET /v1/markets/usa
GET /v1/getmarkets/eu
GET /v1/markets/eu
GET /v1/getboard
GET /v1/board
GET /v1/getticker
GET /v1/ticker
GET /v1/getexecutions
GET /v1/executions
GET /v1/getchats
GET /v1/getchats/usa
GET /v1/getchats/eu
GET /v1/gethealth
GET /v1/getboardstate
GET /v1/me/getpermissions (Private)
GET /v1/me/getbalance (Private)
GET /v1/me/getcollateral (Private)
GET /v1/me/getcollateralaccounts (Private)
POST /v1/me/sendchildorder (Private)
POST /v1/me/sendparentorder (Private)
POST /v1/me/cancelchildorder (Private)
POST /v1/me/cancelparentorder (Private)
POST /v1/me/cancelallchildorders (Private)
GET /v1/me/getchildorders (Private)
GET /v1/me/getparentorders (Private)
GET /v1/me/getparentorder (Private)
GET /v1/me/getexecutions (Private)
GET /v1/me/getbalancehistory (Private)
GET /v1/me/getpositions (Private)
GET /v1/me/getcollateralhistory (Private)
GET /v1/me/gettradingcommission (Private)
GET /v1/me/getaddresses (Private)
GET /v1/me/getcoinins (Private)
GET /v1/me/getcoinouts (Private)
GET /v1/me/getdeposits (Private)
GET /v1/me/getwithdrawals (Private)
GET /v1/me/getbankaccounts (Private)
POST /v1/me/withdraw (Private)
bitFlyer Lightning Realtime API
エンドポイント
wss://ws.lightstream.bitflyer.com/json-rpc
サーバーメソッド
auth
– 認証要求をします- params の内容は認証ページを参照してください
- 認証に成功すると
true
が返ります (必ず確認してください)
subscribe
– チャンネルの購読を開始します- params:
{ channel: "(Channel Name)" }
- 購読が開始されると
true
が返ります
- params:
unsubscribe
– チャンネルの購読を解除します- params:
{ channel: "(Channel Name)" }
- 購読が解除されると
true
が返ります
- params:
クライアントメソッド
channelMessage
– 購読している全チャンネルのメッセージが配信されます
Private Channel の購読には認証が必要です。
API ページにおいて発行した API Key と API Secret を使用します。「注文のイベントを受信」という権限が必要です。
API Key は、bitFlyer Lightning がご利用可能なアカウントクラスのお客様にご利用いただけます。
各接続方法の auth
メソッドにて認証要求が可能です。
認証完了またはエラーのレスポンスを必ず確認してから次の動作を実行してください。
認証要求パラメーター
下記のプロパティは全て必須です。
Property | Type | Description |
---|---|---|
api_key | String | API Key |
timestamp | Number | リクエスト時の Unix Timestamp (10 または 13 桁) |
nonce | String | リクエストごとにランダムな文字列 (16 から 255 文字) |
signature | String | 上記 timestamp + nonce を文字列連結したものを API Secret で HMAC SHA256 署名した Hex (16進数) 文字列 |
Socket.IO
lightning_board_snapshot_<productCode>
lightning_board_<productCode>
lightning_ticker_<productCode>
lightning_executions_<productCode>
child_order_events (Private)
parent_order_events (Private)
JSON-RPC 2.0 over WebSocket
lightning_board_snapshot_<productCode>
lightning_board_<productCode>
lightning_ticker_<productCode>
lightning_executions_<productCode>
child_order_events (Private)
parent_order_events (Private)
socket.IO とWebSocketはどう違ってどっちを使えばいいのか?
というサイトに記述があったので引用。
古いストリーマーバージョン1(Socket.Io)では注文書のデータを取得できないため、ストリーマーバージョン2(純粋なWebSocket)についてのみ説明します。
JSON-RPC 2.0 over WebSocketがストリーマーバージョン2(純粋なWebSocket)かどうかわかりませんが、socket.IOは古いとは言えるのかもしれません。
<番外>最小・最大発注数量(テストの際気をつけないと怒られる)
Lightning 現物
取扱通貨ペア | 単位 | 最小発注数量 | 最大発注数量 | 保有制限数量 |
---|---|---|---|---|
BTC/JPY | BTC | 0.001 | 1,000 | 無 |
ETH/BTC | ETH | 0.01 | 1,000 | 無 |
BCH/BTC | BCH | 0.01 | 1,000 | 無 |
ETH/JPY | ETH | 0.01 | 1,000 | 無 |
Lightning FX
取扱通貨ペア | 単位 | 最小発注数量 | 最大発注数量 | 保有建玉数量 |
---|---|---|---|---|
BTC-FX/JPY | BTC-FX | 0.01 | 1,000 | 1,000 |
Lightning Futures
先物の種類 | 単位 | 最小発注数量 | 最大発注数量 | 保有建玉数量 |
---|---|---|---|---|
1 週間先物 | BFT | 0.001 | 1,000 | 1,000 |
2 週間先物 | BFT | 0.001 | 1,000 | 1,000 |
3 か月先物 | BFT | 0.001 | 1,000 | 1,000 |
以下bitflyerから転載したもの
API Documentation
bitFlyer Lightning では、HTTP API と Realtime API の 2 種類の API を提供しています。
HTTP API
エンドポイント URL:
https://api.bitflyer.jp/v1/
HTTP API には、API キーによる認証が不要な HTTP Public API と、 認証が必要な HTTP Private API に分けられます。
API Playground では、API の呼出を実際に行うことができます。
API制限
HTTP API は、以下のとおり呼出回数を制限いたします。
- Private API は 1 分間に約 200 回を上限とします。
- IP アドレスごとに 1 分間に約 500 回を上限とします。
- 注文数量が 0.01 以下の注文を大量に発注するユーザーは、一時的に、発注できる注文数が 1 分間に約 10 回までに制限されることがあります。
- システムに負荷をかける目的での発注を繰り返していると当社が判断した場合は、API の使用が制限されることがあります。ご了承ください。
認証
Private API の呼出には認証が必要です。 ログイン後、開発者ページ において発行した API key と API secret を使用します (API key は、bitFlyer Lightning がご利用可能なアカウントクラスのお客様にご利用いただけます)。
以下の情報を HTTP リクエストヘッダに含めます。
ACCESS-KEY
: 開発者ページで発行した API keyACCESS-TIMESTAMP
: リクエスト時の Unix TimestampACCESS-SIGN
: 以下の方法でリクエストごとに生成した署名
ACCESS-SIGN
は、ACCESS-TIMESTAMP, HTTP メソッド, リクエストのパス, リクエストボディ を文字列として連結したものを、 API secret で HMAC-SHA256 署名を行った結果です。// Node.js のサンプル var request = require('request'); var crypto = require('crypto'); var key = '{{ YOUR API KEY }}'; var secret = '{{ YOUR API SECRET }}'; var timestamp = Date.now().toString(); var method = 'POST'; var path = '/v1/me/sendchildorder'; var body = JSON.stringify({ product_code: 'BTC_JPY', child_order_type: 'LIMIT', side: 'BUY', price: 30000, size: 0.1 }); var text = timestamp + method + path + body; var sign = crypto.createHmac('sha256', secret).update(text).digest('hex'); var options = { url: 'https://api.bitflyer.jp' + path, method: method, body: body, headers: { 'ACCESS-KEY': key, 'ACCESS-TIMESTAMP': timestamp, 'ACCESS-SIGN': sign, 'Content-Type': 'application/json' } }; request(options, function (err, response, payload) { console.log(payload); });
API キーの権限
API キーを作成する際には、キーごとにパーミッションを指定することができます。 キーの持っている権限の一覧を取得するには API キーの権限を取得する API を使用してください。
ページ形式
複数の結果を返す API は、範囲を指定しての読み込みに対応しています。
count
: 結果の個数を指定します。省略した場合の値は100
です。before
: このパラメータに指定した値より小さいid
を持つデータを取得します。after
: このパラメータに指定した値より大きいid
を持つデータを取得します。二段階認証
出金時の二段階認証を設定している場合、API 呼出時にも二段階認証が必要です。 確認コードを
code
パラメータとしてリクエストに含めることで認証を行います。code
パラメータを指定しなかった場合や、確認コードが間違っている場合、以下のようなエラーレスポンスを返します。{ "status": -505, "error_message": "Two-factor authentication code is incorrect." }
メール、もしくは SMS による二段階認証を設定されている場合は、同時に確認コードをお送りしますので、その値を含めて再度 API を呼出してください。
HTTP Public API
マーケットの一覧
リクエスト
GET /v1/getmarkets GET /v1/markets
レスポンス
[ { "product_code": "BTC_JPY" }, { "product_code": "FX_BTC_JPY" }, { "product_code": "ETH_BTC" }, { "product_code": "BTCJPY28APR2017", "alias": "BTCJPY_MAT1WK" }, { "product_code": "BTCJPY05MAY2017", "alias": "BTCJPY_MAT2WK" } ]
alias
: 以下の呼出でproduct_code
を指定するときに、代わりに使用できます。板情報
リクエスト
GET /v1/getboard GET /v1/board
クエリパラメータ
product_code
: マーケットの一覧で取得できるproduct_code
またはalias
のいずれかを指定してください。 省略した場合の値はBTC_JPY
です。レスポンス
{ "mid_price": 33320, "bids": [ { "price": 30000, "size": 0.1 }, { "price": 25570, "size": 3 } ], "asks": [ { "price": 36640, "size": 5 }, { "price": 36700, "size": 1.2 } ] }
Ticker
リクエスト
GET /v1/getticker GET /v1/ticker
クエリパラメータ
product_code
: マーケットの一覧で取得できるproduct_code
またはalias
のいずれかを指定してください。 省略した場合の値はBTC_JPY
です。レスポンス
{ "product_code": "BTC_JPY", "timestamp": "2015-07-08T02:50:59.97", "tick_id": 3579, "best_bid": 30000, "best_ask": 36640, "best_bid_size": 0.1, "best_ask_size": 5, "total_bid_depth": 15.13, "total_ask_depth": 20, "ltp": 31690, "volume": 16819.26, "volume_by_product": 6819.26 }
timestamp
: 時刻は UTC(協定世界時)で表されます。ltp
: 最終取引価格volume
: 24 時間の取引量約定履歴
リクエスト
GET /v1/getexecutions GET /v1/executions
クエリパラメータ
product_code
: マーケットの一覧で取得できるproduct_code
またはalias
のいずれかを指定してください。 省略した場合の値はBTC_JPY
です。count
,before
,after
: ページ形式 を参照してください。レスポンス
[ { "id": 39287, "side": "BUY", "price": 31690, "size": 27.04, "exec_date": "2015-07-08T02:43:34.823", "buy_child_order_acceptance_id": "JRF20150707-200203-452209", "sell_child_order_acceptance_id": "JRF20150708-024334-060234" }, { "id": 39286, "side": "SELL", "price": 33170, "size": 0.36, "exec_date": "2015-07-08T02:43:34.72", "buy_child_order_acceptance_id": "JRF20150708-010230-400876", "sell_child_order_acceptance_id": "JRF20150708-024334-197755" } ]
side
: この約定を発生させた注文(テイカー)の売買種別です。 板寄せによって約定した場合等、空文字列になることがあります。板の状態
リクエスト
GET /v1/getboardstate
クエリパラメータ
product_code
: マーケットの一覧で取得できるproduct_code
またはalias
のいずれかを指定してください。 省略した場合の値はBTC_JPY
です。レスポンス
{ "health": "NORMAL", "state": "RUNNING", } { "health": "NORMAL", "state": "MATURED", "data": { "special_quotation": 410897 } }
health
: 取引所の稼動状態です。以下のいずれかの値をとります。
NORMAL
: 取引所は稼動しています。BUSY
: 取引所に負荷がかかっている状態です。VERY BUSY
: 取引所の負荷が大きい状態です。SUPER BUSY
: 負荷が非常に大きい状態です。発注は失敗するか、遅れて処理される可能性があります。NO ORDER
: 発注が受付できない状態です。STOP
: 取引所は停止しています。発注は受付されません。state
: 板の状態です。以下の値をとります。
RUNNING
: 通常稼働中CLOSED
: 取引停止中STARTING
: 再起動中PREOPEN
: 板寄せ中CIRCUIT BREAK
: サーキットブレイク発動中AWAITING SQ
: Lightning Futures の取引終了後 SQ(清算値)の確定前MATURED
: Lightning Futures の満期に到達data
: 板の状態について、付加情報を提供します。
special_quotation
: Lightning Futures の SQ(清算値)※今後、表示項目について変更・追加の可能性はございます。予め了承ください。
Lightning Futures(ビットコイン先物)についてはこちらをご参照ください。
取引所の状態
取引所の稼動状態を取得します。
リクエスト
GET /v1/gethealth
クエリパラメータ
product_code
: マーケットの一覧で取得できるproduct_code
またはalias
のいずれかを指定してください。 省略した場合の値はBTC_JPY
です。レスポンス
{ "status": "NORMAL" }
status
: 板の状態で取得できる health と同じものです。チャット
チャットの発言一覧を取得します。
リクエスト
GET /v1/getchats
クエリパラメータ
from_date
: 指定された日付以降の発言を取得します。省略された場合は、5 日前からの発言を返します。レスポンス
[ { "nickname": "User1234567", "message": "Hello world!", "date": "2016-02-16T10:58:08.833" }, { "nickname": "ビット太郎", "message": "サンプルメッセージ", "date": "2016-02-15T10:18:06.67" } ]
HTTP Private API
Private API の呼出には、API key による認証が必要です。 認証 の項を参照してください。
API キーの権限を取得
この API キーで呼出可能な HTTP Private API の一覧を取得できます。
リクエスト
GET /v1/me/getpermissions
レスポンス
[ "/v1/me/getpermissions", "/v1/me/getbalance", "/v1/me/getcollateral", "/v1/me/getchildorders", "/v1/me/getparentorders", "/v1/me/getparentorder", "/v1/me/getexecutions", "/v1/me/getpositions" ]
資産残高を取得
リクエスト
GET /v1/me/getbalance
レスポンス
[ { "currency_code": "JPY", "amount": 1024078, "available": 508000 }, { "currency_code": "BTC", "amount": 10.24, "available": 4.12 }, { "currency_code": "ETH", "amount": 20.48, "available": 16.38 } ]
証拠金の状態を取得
リクエスト
GET /v1/me/getcollateral
レスポンス
{ "collateral": 100000, "open_position_pnl": -715, "require_collateral": 19857, "keep_rate": 5.000 }
collateral
: 預け入れた証拠金の評価額(円)です。open_position_pnl
: 建玉の評価損益(円)です。require_collateral
: 現在の必要証拠金(円)です。keep_rate
: 現在の証拠金維持率です。
リクエスト
GET /v1/me/getcollateralaccounts
レスポンス
[ { "currency_code": "JPY", "amount": 10000 }, { "currency_code": "BTC", "amount": 1.23 } ]
通貨別の証拠金の数量を取得できます。
預入用アドレス取得
仮想通貨を bitFlyer アカウントに預入るためのアドレスを取得します。
リクエスト
GET /v1/me/getaddresses
レスポンス
[ { "type": "NORMAL", "currency_code": "BTC", "address": "3AYrDq8zhF82NJ2ZaLwBMPmaNziaKPaxa7" }, { "type": "NORMAL", "currency_code": "ETH", "address": "0x7fbB2CC24a3C0cd3789a44e9073381Ca6470853f" } ]
type
: 通常の預入用アドレスは"NORMAL"
となります。currency_code
: ビットコイン預入用アドレスは"BTC"
, イーサ預入用アドレスの場合は"ETH"
仮想通貨預入履歴
リクエスト
GET /v1/me/getcoinins
クエリパラメータ
count
,before
,after
: ページ形式 を参照してください。レスポンス
[ { "id": 100, "order_id": "CDP20151227-024141-055555", "currency_code": "BTC", "amount": 0.00002, "address": "1WriteySQufKZ2pVuM1oMhPrTtTVFq35j", "tx_hash": "9f92ee65a176bb9545f7becb8706c50d07d4cee5ffca34d8be3ef11d411405ae", "status": "COMPLETED", "event_date": "2015-11-27T08:59:20.301" } ]
status
: 仮想通貨の預入が手続き中の場合は"PENDING"
, 完了している場合は"COMPLETED"
仮想通貨送付履歴
リクエスト
GET /v1/me/getcoinouts
クエリパラメータ
count
,before
,after
: ページ形式 を参照してください。レスポンス
[ { "id": 500, "order_id": "CWD20151224-014040-077777", "currency_code": "BTC", "amount": 0.1234, "address": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa", "tx_hash": "724c07dfd4044abcb390b0412c3e707dd5c4f373f0a52b3bd295ce32b478c60a", "fee": 0.0005, "additional_fee": 0.0001, "status": "COMPLETED", "event_date": "2015-12-24T01:40:40.397" } ]
status
: 仮想通貨の送付が手続き中の場合は"PENDING"
, 完了している場合は"COMPLETED"
銀行口座一覧取得
アカウントに登録された銀行口座の一覧を取得します。
リクエスト
GET /v1/me/getbankaccounts
レスポンス
[ { "id": 3402, "is_verified": true, "bank_name": "三井住友銀行", "branch_name": "アオイ支店", "account_type": "普通", "account_number": "1111111", "account_name": "ビットフライヤータロウ" } ]
id
: 出金時に指定する口座の ID。is_verified
: 承認済みで出金が可能な口座の場合はtrue
となります。入金履歴
リクエスト
GET /v1/me/getdeposits
クエリパラメータ
count
,before
,after
: ページ形式 を参照してください。レスポンス
[ { "id": 300, "order_id": "MDP20151014-101010-033333", "currency_code": "JPY", "amount": 10000, "status": "COMPLETED", "event_date": "2015-10-14T10:10:10.001" } ]
status
: 入金が手続き中の場合は"PENDING"
, 完了している場合は"COMPLETED"
出金
リクエスト
POST /v1/me/withdraw
Body パラメータ
{ "currency_code": "JPY", "bank_account_id": 1234, "amount": 12000, "code": "012345" }
currency_code
: 必須。現在は"JPY"
のみ対応しています。bank_account_id
: 必須。出金先の口座のid
を指定します。amount
: 必須。出金する数量です。code
: 二段階認証の確認コードです。出金時の二段階認証を設定している場合のみ必要となります。 二段階認証の項を参照してください。別途日本円出金手数料がかかります。 手数料一覧・税のページをご覧ください。
レスポンス
{ "message_id": "69476620-5056-4003-bcbe-42658a2b041b" }
message_id
: 出金メッセージの受付 ID。エラーレスポンスの例
{ "status": -700, "error_message": "This account has not yet been authenticated", "data": null }
エラーが発生して負の
status
値が返った場合は、出金されません。出金履歴
リクエスト
GET /v1/me/getwithdrawals
クエリパラメータ
レスポンス
[ { "id": 700, "order_id": "MWD20151020-090909-011111", "currency_code": "JPY", "amount": 12000, "status": "COMPLETED", "event_date": "2015-10-20T09:09:09.416" } ]
status
: 出金が手続き中の場合は"PENDING"
, 完了している場合は"COMPLETED"
新規注文を出す
リクエスト
POST /v1/me/sendchildorder
Body パラメータ
{ "product_code": "BTC_JPY", "child_order_type": "LIMIT", "side": "BUY", "price": 30000, "size": 0.1, "minute_to_expire": 10000, "time_in_force": "GTC" }
product_code
: 必須。注文するプロダクトです。マーケットの一覧で取得できるproduct_code
またはalias
のいずれかを指定してください。child_order_type
: 必須。指値注文の場合は"LIMIT"
, 成行注文の場合は"MARKET"
を指定します。side
: 必須。買い注文の場合は"BUY"
, 売り注文の場合は"SELL"
を指定します。price
: 価格を指定します。child_order_type
に"LIMIT"
を指定した場合は必須です。size
: 必須。注文数量を指定します。minute_to_expire
: 期限切れまでの時間を分で指定します。省略した場合の値は43200
(30 日間) です。time_in_force
: 執行数量条件 を"GTC"
,"IOC"
,"FOK"
のいずれかで指定します。省略した場合の値は"GTC"
です。レスポンス
パラメータが正しい場合は、ステータスコード
200 OK
が返ります。{ "child_order_acceptance_id": "JRF20150707-050237-639234" }
child_order_acceptance_id
: API の受付 ID です。注文を指定する際に、child_order_id
の代わりに指定できます。 注文をキャンセルする, 約定の一覧を取得 の項もご確認ください。注文をキャンセルする
リクエスト
POST /v1/me/cancelchildorder
Body パラメータ
{ "product_code": "BTC_JPY", "child_order_id": "JOR20150707-055555-022222" } { "product_code": "BTC_JPY", "child_order_acceptance_id": "JRF20150707-033333-099999" }
product_code
: 必須。対象の注文のプロダクトです。マーケットの一覧で取得できるproduct_code
またはalias
のいずれかを指定してください。
child_order_id
またはchild_order_acceptance_id
のどちらか片方のみを指定してください。
child_order_id
: キャンセルする注文の ID です。child_order_acceptance_id
: 新規注文を出す API の受付 ID です。指定された場合、対応する注文をキャンセルします。レスポンス
パラメータが正しい場合は、ステータスコード
200 OK
が返ります。新規の親注文を出す(特殊注文)
単純な指値注文 (LIMIT), 成り行き注文 (MARKET) 以外の、ロジックを含んだ注文を発注することができます。 このような注文は、親注文 (parent order) として扱われます。 特殊注文を利用することで、マーケットの状況に応じて注文を出したり、複数の注文を関連付けたりすることが可能です。
注文の方法と種類については、bitFlyer Lightning の特殊注文について もよくお読みください。
リクエスト
POST /v1/me/sendparentorder
Body パラメータ
{ "order_method": "IFDOCO", "minute_to_expire": 10000, "time_in_force": "GTC", "parameters": [{ "product_code": "BTC_JPY", "condition_type": "LIMIT", "side": "BUY", "price": 30000, "size": 0.1 }, { "product_code": "BTC_JPY", "condition_type": "LIMIT", "side": "SELL", "price": 32000, "size": 0.1 }, { "product_code": "BTC_JPY", "condition_type": "STOP_LIMIT", "side": "SELL", "price": 28800, "trigger_price": 29000, "size": 0.1 }] }
order_method
: 注文方法です。以下の値のいずれかを指定してください。省略した場合の値は"SIMPLE"
です。
"SIMPLE"
: 1 つの注文を出す特殊注文です。"IFD"
: IFD 注文を行います。一度に 2 つの注文を出し、最初の注文が約定したら 2 つめの注文が自動的に発注される注文方法です。"OCO"
: OCO 注文を行います。2 つの注文を同時に出し、一方の注文が成立した際にもう一方の注文が自動的にキャンセルされる注文方法です。"IFDOCO"
: IFD-OCO 注文を行います。最初の注文が約定した後に自動的に OCO 注文が発注される注文方法です。minute_to_expire
: 期限切れまでの時間を分で指定します。省略した場合の値は43200
(30 日間) です。time_in_force
: 執行数量条件 を"GTC"
,"IOC"
,"FOK"
のいずれかで指定します。省略した場合の値は"GTC"
です。parameters
: 必須。発注する注文のパラメータを指定する配列です。 指定したorder_method
の値によって、必要な配列の長さが異なります。
"SIMPLE"
の場合、1 つのパラメータを指定します。"IFD"
の場合、2 つ指定します。 1 つめのパラメータが、最初に発注される注文のパラメータです。 2 つめは、最初の注文の約定後に発注される注文のパラメータになります。"OCO"
の場合、2 つ指定します。 パラメータをもとに 2 つの注文が同時に出されます。"IFDOCO"
の場合、3 つ指定します。 1 つめのパラメータが、最初に発注される注文のパラメータです。 その注文が約定した後、2 つめと 3 つめのパラメータをもとに OCO 注文が出されます。
parameters
には以下のキーと値を持つオブジェクトの配列を指定します。
product_code
: 必須。注文するプロダクトです。マーケットの一覧で取得できるproduct_code
またはalias
のいずれかを指定してください。condition_type
: 必須。注文の執行条件です。以下の値のうちいずれかを指定してください。
"LIMIT"
: 指値注文。"MARKET"
成行注文。"STOP"
: ストップ注文。"STOP_LIMIT"
: ストップ・リミット注文。"TRAIL"
: トレーリング・ストップ注文。side
: 必須。買い注文の場合は"BUY"
, 売り注文の場合は"SELL"
を指定します。size
: 必須。注文数量を指定します。price
: 価格を指定します。condition_type
に"LIMIT"
または"STOP_LIMIT"
を選んだ場合は必須です。trigger_price
: ストップ注文のトリガー価格を指定します。condition_type
に"STOP"
または"STOP_LIMIT"
を選んだ場合は必須です。offset
: トレーリング・ストップ注文のトレール幅を、正の整数で指定します。condition_type
に"TRAIL"
を選んだ場合は必須です。レスポンス
パラメータが正しい場合は、ステータスコード
200 OK
が返ります。{ "parent_order_acceptance_id": "JRF20150707-050237-639234" }
parent_order_acceptance_id
: API の受付 ID です。親注文を指定する際に、parent_order_id
の代わりに指定できます。親注文をキャンセルする
親注文も、普通の注文と同様にキャンセルすることができます。 親注文をキャンセルした場合、その注文に関連する発注中の注文はすべてキャンセルされます。
リクエスト
POST /v1/me/cancelparentorder
Body パラメータ
{ "product_code": "BTC_JPY", "parent_order_id": "JCO20150925-055555-022222" } { "product_code": "BTC_JPY", "parent_order_acceptance_id": "JRF20150925-033333-099999" }
product_code
: 必須。対象の注文のプロダクトです。マーケットの一覧で取得できるproduct_code
またはalias
のいずれかを指定してください。
parent_order_id
またはparent_order_acceptance_id
のどちらか片方のみを指定してください。
parent_order_id
: キャンセルする親注文の ID です。parent_order_acceptance_id
: 新規の親注文を出す API の受付 ID です。指定された場合、対応する親注文をキャンセルします。レスポンス
パラメータが正しい場合は、ステータスコード
200 OK
が返ります。すべての注文をキャンセルする
対象となるプロダクトの、これまで発注したすべての自分の注文をキャンセルします。
リクエスト
POST /v1/me/cancelallchildorders
Body パラメータ
{ "product_code": "BTC_JPY" }
product_code
: 必須。対象の注文のプロダクトです。マーケットの一覧で取得できるproduct_code
またはalias
のいずれかを指定してください。レスポンス
パラメータが正しい場合は、ステータスコード
200 OK
が返ります。注文の一覧を取得
リクエスト
GET /v1/me/getchildorders
クエリパラメータ
product_code
: マーケットの一覧で取得できるproduct_code
またはalias
のいずれかを指定してください。 省略した場合の値はBTC_JPY
です。count
,before
,after
: ページ形式 を参照してください。child_order_state
: 指定された場合、child_order_state
がその値に一致する注文のみを返します。 指定されない場合、ACTIVE
な注文とそうでない注文の一覧を連結したものを返します。
次のいずれかを指定します。
ACTIVE
: オープンな注文の一覧を取得します。COMPLETED
: 全額が取引完了した注文の一覧を取得します。CANCELED
: お客様がキャンセルした注文です。EXPIRED
: 有効期限に到達したため取り消された注文の一覧を取得します。REJECTED
: 失敗した注文です。child_order_id
,child_order_acceptance_id
: 指定した ID に一致する注文を取得できます。parent_order_id
: 指定された場合、その親注文に関連付けられている注文の一覧を取得します。レスポンス
[ { "id": 138398, "child_order_id": "JOR20150707-084555-022523", "product_code": "BTC_JPY", "side": "BUY", "child_order_type": "LIMIT", "price": 30000, "average_price": 30000, "size": 0.1, "child_order_state": "COMPLETED", "expire_date": "2015-07-14T07:25:52", "child_order_date": "2015-07-07T08:45:53", "child_order_acceptance_id": "JRF20150707-084552-031927", "outstanding_size": 0, "cancel_size": 0, "executed_size": 0.1, "total_commission": 0 }, { "id": 138397, "child_order_id": "JOR20150707-084549-022519", "product_code": "BTC_JPY", "side": "SELL", "child_order_type": "LIMIT", "price": 30000, "average_price": 0, "size": 0.1, "child_order_state": "CANCELED", "expire_date": "2015-07-14T07:25:47", "child_order_date": "2015-07-07T08:45:47", "child_order_acceptance_id": "JRF20150707-084547-396699", "outstanding_size": 0, "cancel_size": 0.1, "executed_size": 0, "total_commission": 0 } ]
- 一度も約定せずにキャンセル・取り消し等無効になった注文は、取得できる注文の一覧に含まれません。
child_order_state
にCANCELED
,EXPIRED
, もしくはREJECTED
を指定することは可能ですが、その場合でも、約定しなかった注文は結果に含まれません。id
: ページング用の ID です。child_order_state
がACTIVE
または無指定の場合、オープンな注文については、現在、レスポンスのid
の値は0
固定となります。 (before
,after
が指定された場合は、一度も約定していない注文は結果に含まれません。)child_order_id
: 注文の一意な ID です。親注文の一覧を取得
リクエスト
GET /v1/me/getparentorders
クエリパラメータ
product_code
: マーケットの一覧で取得できるproduct_code
またはalias
のいずれかを指定してください。count
,before
,after
: ページ形式 を参照してください。parent_order_state
: 指定された場合、parent_order_state
がその値に一致する注文のみを返します。次のいずれかを指定します。
ACTIVE
: オープンな注文の一覧を取得します。COMPLETED
: 全額が取引完了した注文の一覧を取得します。CANCELED
: お客様がキャンセルした注文です。EXPIRED
: 有効期限に到達したため取り消された注文の一覧を取得します。REJECTED
: 失敗した注文です。レスポンス
[ { "id": 138398, "parent_order_id": "JCO20150707-084555-022523", "product_code": "BTC_JPY", "side": "BUY", "parent_order_type": "STOP", "price": 30000, "average_price": 30000, "size": 0.1, "parent_order_state": "COMPLETED", "expire_date": "2015-07-14T07:25:52", "parent_order_date": "2015-07-07T08:45:53", "parent_order_acceptance_id": "JRF20150707-084552-031927", "outstanding_size": 0, "cancel_size": 0, "executed_size": 0.1, "total_commission": 0 }, { "id": 138397, "parent_order_id": "JCO20150707-084549-022519", "product_code": "BTC_JPY", "side": "SELL", "parent_order_type": "IFD", "price": 30000, "average_price": 0, "size": 0.1, "parent_order_state": "CANCELED", "expire_date": "2015-07-14T07:25:47", "parent_order_date": "2015-07-07T08:45:47", "parent_order_acceptance_id": "JRF20150707-084547-396699", "outstanding_size": 0, "cancel_size": 0.1, "executed_size": 0, "total_commission": 0 } ]
複数の注文が関連づけられた親注文の
price
,size
の値は、いずれも参考値です。個別の注文の詳細なパラメータを取得するには、親注文の詳細を取得 する API を利用してください。 また、関連する注文の一覧を取得する場合は、注文の一覧を取得 する API を利用してください。
親注文の詳細を取得
リクエスト
GET /v1/me/getparentorder
クエリパラメータ
parent_order_id
またはparent_order_acceptance_id
のどちらか片方のみを指定してください。
parent_order_id
: 対象の親注文の ID です。parent_order_acceptance_id
: 新規の親注文を出す API の受付 ID です。指定された場合、対応する親注文の詳細を返します。レスポンス
{ "id": 4242, "parent_order_id": "JCO20150925-046876-036161", "order_method": "IFDOCO", "minute_to_expire": 10000, "parameters": [{ "product_code": "BTC_JPY", "condition_type": "LIMIT", "side": "BUY", "price": 30000, "size": 0.1, "trigger_price": 0, "offset": 0 }, { "product_code": "BTC_JPY", "condition_type": "LIMIT", "side": "SELL", "price": 32000, "size": 0.1, "trigger_price": 0, "offset": 0 }, { "product_code": "BTC_JPY", "condition_type": "STOP_LIMIT", "side": "SELL", "price": 28800, "size": 0.1, "trigger_price": 29000, "offset": 0 }], "parent_order_acceptance_id": "JRF20150925-060559-396699" }
約定の一覧を取得
リクエスト
GET /v1/me/getexecutions
クエリパラメータ
product_code
: マーケットの一覧で取得できるproduct_code
またはalias
のいずれかを指定してください。count
,before
,after
: ページ形式 を参照してください。child_order_id
: 省略可能。指定された場合、その注文に関連する約定の一覧を取得します。child_order_acceptance_id
: 省略可能。新規注文を出す API の受付 ID です。指定された場合、対応する注文に関連する約定の一覧を取得します。レスポンス
[ { "id": 37233, "child_order_id": "JOR20150707-060559-021935", "side": "BUY", "price": 33470, "size": 0.01, "commission": 0, "exec_date": "2015-07-07T09:57:40.397", "child_order_acceptance_id": "JRF20150707-060559-396699" }, { "id": 37232, "child_order_id": "JOR20150707-060426-021925", "side": "BUY", "price": 33470, "size": 0.01, "commission": 0, "exec_date": "2015-07-07T09:57:40.397", "child_order_acceptance_id": "JRF20150707-060559-396699" } ]
建玉の一覧を取得
リクエスト
GET /v1/me/getpositions
クエリパラメータ
product_code
:"FX_BTC_JPY"
を指定します。レスポンス
[ { "product_code": "FX_BTC_JPY", "side": "BUY", "price": 36000, "size": 10, "commission": 0, "swap_point_accumulate": -35, "require_collateral": 120000, "open_date": "2015-11-03T10:04:45.011", "leverage": 3, "pnl": 965, "sfd": -0.5 } ]
証拠金の変動履歴を取得
リクエスト
GET /v1/me/getcollateralhistory
クエリパラメータ
count
,before
,after
: ページ形式 を参照してください。レスポンス
[ { "id": 4995, "currency_code": "JPY", "change": -6, "amount": -6, "reason_code": "CLEARING_COLL", "date": "2017-05-18T02:37:41.327" }, { "id": 4994, "currency_code": "JPY", "change": 2083698, "amount": 0, "reason_code": "EXCHANGE_COLL", "date": "2017-04-28T03:05:07.493" }, { "id": 4993, "currency_code": "BTC", "change": -14.69001618, "amount": 34.97163164, "reason_code": "EXCHANGE_COLL", "date": "2017-04-28T03:05:07.493" } ]
change
: 証拠金の変動額です。amount
: 変動後の証拠金の残高です。取引手数料を取得
リクエスト
GET /v1/me/gettradingcommission
クエリパラメータ
product_code
: 必須。マーケットの一覧で取得できるproduct_code
またはalias
のいずれかを指定してください。レスポンス
{ "commission_rate": 0.001 }
Realtime API
bitFlyer は、PubNub を利用してリアルタイムの更新情報を配信しています。 以下の Subscribe Key を使用して受信できます。
PubNub Subscribe Key:
sub-c-52a9ab50-291b-11e5-baaa-0619f8945a4f
PubNub のドキュメントもご確認ください。
// Node.js のサンプル var PubNub = require('pubnub'); var pubnub = new PubNub({ subscribeKey: 'sub-c-52a9ab50-291b-11e5-baaa-0619f8945a4f' }); pubnub.addListener({ message: function (message) { console.log(message.channel, message.message); } }); pubnub.subscribe({ channels: ['lightning_ticker_BTC_JPY'] });
板情報
PubNub Channel Name
channel 名は、マーケットの一覧で取得できる
product_code
の前にlightning_board_snapshot_
を付与したものです(alias
は使用できません)。
- BTC/JPY 板(現物):
lightning_board_snapshot_BTC_JPY
- BTC/JPY FX 板:
lightning_board_snapshot_FX_BTC_JPY
- ETH/BTC 板:
lightning_board_snapshot_ETH_BTC
- Lightning Futures:
lightning_board_snapshot_BTCJPY05MAY2017
等レスポンス
板情報のスナップショットを配信します。 データ量が大きくなる場合、板情報更新のたびに配信されることは保証されません。 更新のたびに情報を取得する場合、差分情報を利用してください。
サンプルレスポンスは 板情報 の項を参照してください。
※
asks
,bids
の配列の順序については保証していません。板情報の差分
PubNub Channel Name
channel 名は、マーケットの一覧で取得できる
product_code
の前にlightning_board_
を付与したものです(alias
は使用できません)。
- BTC/JPY 板(現物):
lightning_board_BTC_JPY
- BTC/JPY FX 板:
lightning_board_FX_BTC_JPY
- ETH/BTC 板:
lightning_board_ETH_BTC
レスポンス
板の注文に更新があった場合、その差分情報を配信します。 以下のレスポンスは、33,350 円の bid 注文が更新され、その合計数量が 1 BTC になっていることを示します。
{ mid_price: 35625, bids: [ { price: 33350, size: 1 } ], asks: [] }
注文が約定・キャンセル等で板から消えた場合、
size
が 0 のものが配信されます。Ticker
PubNub Channel Name
channel 名は、マーケットの一覧で取得できる
product_code
の前にlightning_ticker_
を付与したものです(alias
は使用できません)。
- BTC/JPY 板(現物):
lightning_ticker_BTC_JPY
- BTC/JPY FX 板:
lightning_ticker_FX_BTC_JPY
- ETH/BTC 板:
lightning_ticker_ETH_BTC
レスポンス
更新が発生するたびに配信されます。Ticker の項を参照してください。
約定
PubNub Channel Name
channel 名は、マーケットの一覧で取得できる
product_code
の前にlightning_executions_
を付与したものです(alias
は使用できません)。
- BTC/JPY 板(現物):
lightning_executions_BTC_JPY
- BTC/JPY FX 板:
lightning_executions_FX_BTC_JPY
- ETH/BTC 板:
lightning_executions_ETH_BTC
レスポンス
約定が発生するたびに配信されます。
[ { "id": 39361, "side": "SELL", "price": 35100, "size": 0.01, "exec_date": "2015-07-07T10:44:33.547", "buy_child_order_acceptance_id": "JRF20150707-014356-184990", "sell_child_order_acceptance_id": "JRF20150707-104433-186048" } ]
コメント