[◎_◎] Bitflyer 2種類のAPI HTTP APIとrealtime API

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 が返ります
  • unsubscribe – チャンネルの購読を解除します
    • params: { channel: "(Channel Name)" }
    • 購読が解除されると true が返ります

クライアントメソッド

  • 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はどう違ってどっちを使えばいいのか?

CCData
A collection of articles, research, ideas and challenges from the staff at CCData and CryptoCompare.

というサイトに記述があったので引用。

古いストリーマーバージョン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 APIRealtime 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 key
  • ACCESS-TIMESTAMP: リクエスト時の Unix Timestamp
  • ACCESS-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 キーの権限設定

ページ形式

複数の結果を返す 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

クエリパラメータ

レスポンス

[
  {
    "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

クエリパラメータ

レスポンス

[
  {
    "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

クエリパラメータ

レスポンス

[
  {
    "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

クエリパラメータ

  • count, before, after: ページ形式 を参照してください。
  • message_id: 出金 API の戻り値の受付 ID を指定して、出金状況を確認できます。

レスポンス

[
  {
    "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"
}

注文をキャンセルする

リクエスト

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_stateCANCELED, EXPIRED, もしくは REJECTED を指定することは可能ですが、その場合でも、約定しなかった注文は結果に含まれません。
  • id: ページング用の ID です。 child_order_stateACTIVE または無指定の場合、オープンな注文については、現在、レスポンスの 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

クエリパラメータ

レスポンス

[
  {
    "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"
  }
]

コメント

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