Skip to content

Latest commit

 

History

History
287 lines (203 loc) · 12.7 KB

README_jp.md

File metadata and controls

287 lines (203 loc) · 12.7 KB

bitflyer4j

Build Status Coverage Status Maven Central Javadocs

概要

bitflyer4j (bitFlyer for Java)はビットフライヤー・ライトニングAPIのラッパーライブラリです。

ビットフライヤーは暗号通貨を取り扱う日本の取引所であり、他社の取引所と同様にJSON+RESTによるAPIを提供しています。 このAPI電文や通信方式をカプセル化し、いくつかの便利な機能を加え、静的に型付けされたAPIを提供することがこのライブラリの目的です。

  • 静的に型付けされたメソッド呼び出し、引数および戻り値
  • java.util.concurrent.CompletableFuture によるキューイング・速度制限・メソッドチェインなどの非同期実行
  • リアルタイムデータの購読に標準対応
  • APIのプラベートキーを文字どおりプライベートに保管
  • 作者自身が実践検証済

使い方

ダウンロード

MavenあるいはGradleを利用して、 ライブラリのJARとその依存関係をセントラル・レポジトリより自動で取得します。

Maven (pom.xml)

<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認証

プライベートAPIを使用するためには、 以下を環境変数あるいは設定ファイルにて指定します:

  • bitflyer4j.auth_key
  • bitflyer4j.auth_secret

APIライブラリは初期化される際、以下を探索します:

  1. Javaの実行時環境変数 (java -Dbitflyer4j.auth_key=... -Dbitflyer4j.auth_secret=...)
  2. ${HOME}/.bitflyer4j設定ファイル
  3. クラスパス中の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リクエストの回数に制限を設けています。

このライブラリでは、それぞれの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
    • 口座(操作)
      • 出金 : /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_*