bitflyer4j (bitFlyer for Java)はビットフライヤー・ライトニングAPIのラッパーライブラリです。
ビットフライヤーは暗号通貨を取り扱う日本の取引所であり、他社の取引所と同様にJSON+RESTによるAPIを提供しています。 このAPI電文や通信方式をカプセル化し、いくつかの便利な機能を加え、静的に型付けされたAPIを提供することがこのライブラリの目的です。
- 静的に型付けされたメソッド呼び出し、引数および戻り値
java.util.concurrent.CompletableFuture
によるキューイング・速度制限・メソッドチェインなどの非同期実行- リアルタイムデータの購読に標準対応
- APIのプラベートキーを文字どおりプライベートに保管
- 作者自身が実践検証済
MavenあるいはGradleを利用して、 ライブラリのJARとその依存関係をセントラル・レポジトリより自動で取得します。
<dependency>
<groupId>com.after_sunrise.cryptocurrency</groupId>
<artifactId>bitflyer4j</artifactId>
<version>${VERSION}</version>
</dependency>
下記のコードをmain
文へコピペし、実行してください。
最良気配・直近の価格・数量、取引高などの時価情報を取得。
public class QueryTickSample {
public static void main(String[] args) throws Exception {
Bitflyer4j api = new Bitflyer4jFactory().createInstance();
Tick.Request request = Tick.Request.builder().product("ETH_BTC").build();
System.out.println(api.getMarketService().getTick(request).get());
api.close();
}
}
注文を新規で作成。(ビットフライヤー用語での子注文のこと)
public class SendOrderSample {
public static void main(String[] args) throws Exception {
Bitflyer4j api = new Bitflyer4jFactory().createInstance();
OrderCreate.Request request = OrderCreate.Request.builder()
.product("FX_BTC_JPY").type(ConditionType.LIMIT).side(SideType.BUY)
.price(new BigDecimal("12345.6789")).size(BigDecimal.ONE).build();
System.out.println(api.getOrderService().sendOrder(request).get());
api.close();
}
}
既存注文の取り消し。注文ID、あるいは受付IDのいずれかを指定してください。
public class CancelOrderSample {
public static void main(String[] args) throws Exception {
Bitflyer4j api = new Bitflyer4jFactory().createInstance();
OrderCancel.Request request = OrderCancel.Request.builder()
.product("BTCJPY_MAT1WK").orderId("JOR20150707-055555-022222").build();
System.out.println(api.getOrderService().cancelOrder(request).get());
api.close();
}
}
ストリーミング時価データの購読を開始。(異常切断時は自動再接続後に購読状態を復元)
public class RealtimeSample {
public static void main(String[] args) throws Exception {
Bitflyer4j api = new Bitflyer4jFactory().createInstance();
api.getRealtimeService().addListener(new RealtimeListenerAdapter() {
@Override
public void onTicks(String product, List<Tick> values) {
System.out.println("(" + product + ")" + values);
}
});
System.out.println(api.getRealtimeService().subscribeTick(Arrays.asList("BTC_JPY")).get());
TimeUnit.SECONDS.sleep(30L);
api.close();
}
}
その他の機能やサンプルコードについては Bitflyer4jTest を参照してください。
以下は機能や設定は、用法・用量を守って正しくお使い下さい。
プライベートAPIを使用するためには、 以下を環境変数あるいは設定ファイルにて指定します:
bitflyer4j.auth_key
bitflyer4j.auth_secret
APIライブラリは初期化される際、以下を探索します:
- Javaの実行時環境変数 (
java -Dbitflyer4j.auth_key=... -Dbitflyer4j.auth_secret=...
) ${HOME}/.bitflyer4j
設定ファイル- クラスパス中の
bitflyer4j-site.properties
ファイル
APIライブラリは上記リストの先頭から探索を始め、存在しないもの・アクセス不可なものは無視し、最初に見つけた値を使用します。
これらのプライベートな設定値は${HOME}/.bitflyer4j
を利用して、ローカルにのみ保存することをお勧めします。
ログ出力やコミットなどで、設定値を公開しないでください。
# Authentication
bitflyer4j.auth_key=MY_KEY_HERE
bitflyer4j.auth_secret=MY_SECRET_HERE
.bitflyer4j
の雛形ファイルは
こちら
からダウンロードできます。
ライブラリをネットワーク・プロキシの内側から使用する場合、以下の環境変数を設定してください。 これらの変数は前述のプライベート認証と同様の探索方法によって読み込まれます。
# HTTP Proxy
bitflyer4j.http_proxy_type=HTTP
bitflyer4j.http_proxy_host=127.0.0.1
bitflyer4j.http_proxy_port=8080
ビットフライヤーは一定時間内に要求できるHTTPリクエストの回数に制限を設けています。
このライブラリでは、それぞれのHTTPリクエストはまずキューイングされ、バックグラウンドのスレッドがキューから順にリクエストを取り出し、
速度制限を設けることでDOS攻撃してしまうことを予防しています。そのため、それぞれのHTTPリクエストは
java.util.concurrent.CompletableFuture
を戻り値とするように実装され、
HTTPリクエストがバックグランドで実際に処理されたタイミングで完了する仕組みとなっています。
この非同期HTTPリクエストを同期化するためには、単純にCompletableFuture#get()
を呼び出してください。
原則、以下の設定は変更する必要はありませんが、それぞれ外部化されているため、必要に応じて環境変数で上書きできます。それぞれの詳細は KeyType を参照してください。
キー項目 | 初期値 | 説明 |
---|---|---|
bitflyer4j.site | local | 実行環境を識別するための任意の文字列。 |
bitflyer4j.auth_key | プライベートAPIの認証キー。 | |
bitflyer4j.auth_secret | プライベートAPIの秘密文字列。 | |
bitflyer4j.http_url | https://api.bitflyer.jp | サービスのエンドポイントURL。 |
bitflyer4j.http_proxy_type | HTTPのプロキシ種別(DIRECT/HTTP/SOCKS)、無効にする場合は空欄。 | |
bitflyer4j.http_proxy_host | HTTPのプロキシサーバーのアドレス。プロキシ種別の指定が必須。 | |
bitflyer4j.http_proxy_port | HTTPのプロキシサーバーのポート番号。プロキシ種別の指定が必須。 | |
bitflyer4j.http_timeout | 180000 | HTTPのソケット通信タイムアウト(ミリ秒)。無制限とする場合は空欄。 |
bitflyer4j.http_threads | 8 | HTTPリクエストの並列スレッド数。 |
bitflyer4j.http_limit_interval | 300000 | HTTPリクエストの回数制限時間(ミリ秒)。 |
bitflyer4j.http_limit_criteria_address | 500 | 単一IPアドレスからの制限時間内アクセス可能回数。 |
bitflyer4j.http_limit_criteria_private | 500 | プライベートAPIの制限時間内アクセス可能回数。 |
bitflyer4j.realtime_type | リアルタイムデータの購読に使用する実装の種別 | |
bitflyer4j.socket_endpoint | https://io.lightstream.bitflyer.com | Socket.IOのエンドポイントURL。 |
現在、以下のエンドポイントがライブラリに実装されています:
- HTTP Public API
- マーケットの一覧 :
/v1/markets
- マーケットの一覧 USA :
/v1/markets/usa
- マーケットの一覧 EUR :
/v1/markets/eu
- 板情報 :
/v1/board
- ティッカー :
/v1/ticker
- 約定履歴 :
/v1/executions
- チャット :
/v1/getchats
- チャット USA :
/v1/getchats/usa
- チャット EUR :
/v1/getchats/eu
- 取引所の状態 :
/v1/gethealth
- 板の状態 :
/v1/getboardstate
- マーケットの一覧 :
- HTTP Private API
- 口座(参照)
- API キーの権限を取得 :
/v1/me/getpermissions
- 資産残高を取得 :
/v1/me/getbalance
- 証拠金の状態を取得 :
/v1/me/getcollateral
- 証拠金の状態を取得(通貨別) :
/v1/me/getcollateralaccounts
- 預入用アドレス取得 :
/v1/me/getaddresses
- 仮想通貨預入履歴 :
/v1/me/getcoinins
- 仮想通貨送付履歴 :
/v1/me/getcoinouts
- 銀行口座一覧取得 :
/v1/me/getbankaccounts
- 入金履歴 :
/v1/me/getdeposits
- 出金履歴 :
/v1/me/getwithdrawals
- API キーの権限を取得 :
- 口座(操作)
- 出金 :
/v1/me/withdraw
- 出金 :
- トレード(発注)
- 新規注文を出す :
/v1/me/sendchildorder
- 注文をキャンセルする :
/v1/me/cancelchildorder
- 新規の親注文を出す(特殊注文) :
/v1/me/sendparentorder
- 親注文をキャンセルする :
/v1/me/cancelparentorder
- すべての注文をキャンセルする :
/v1/me/cancelallchildorders
- 新規注文を出す :
- トレード(参照)
- 注文の一覧を取得 :
/v1/me/getchildorders
- 親注文の一覧を取得 :
/v1/me/getparentorders
- 親注文の詳細を取得 :
/v1/me/getparentorder
- 約定の一覧を取得 :
/v1/me/getexecutions
- 建玉の一覧を取得 :
/v1/me/getpositions
- 証拠金の変動履歴を取得 :
/v1/me/getcollateralhistory
- 取引手数料を取得 :
/v1/me/gettradingcommission
- 注文の一覧を取得 :
- 口座(参照)
- リアルタイムAPI
- Socket.IO
- 板情報の差分 :
lightning_board_*
- 板情報 :
lightning_board_snapshot_*
- ティッカー :
lightning_ticker_*
- 約定 :
lightning_executions_*
- 板情報の差分 :
- Socket.IO