ビットコイン相場が盛り上がっていますね。
私は本職がソフトウェアエンジニアなので、プログラムを組んでビットコイン取引を自動化することに熱中しています。
ビットコイン取引所であるCoincheck(コインチェック)では、取引APIが公開されています。
これを使用することで、板情報の取得や、取引などを自動化することができます。
ところが、ポジション一覧の取得で行き詰まってしまいました。
API仕様を見ると以下のようになっています。
ポジション一覧
レバレッジ取引のポジション一覧を表示します。レバレッジ取引の注文は 新規注文 から行えます。
HTTP REQUEST
GET /api/exchange/leverage/positions
PARAMETERS
status “open”, “closed” を指定できます。
これだと、25件しか取得できません。
そこから先の取得にはページネーションを使用する必要があります。
そのためには下記のパラメータを指定する必要があります。
PARAMETERS
limit : 1ページあたりの取得件数を指定できます。
order : “desc”, “asc” を指定できます。
starting_after : IDを指定すると絞り込みの開始位置を設定できます。
ending_before : IDを指定すると絞り込みの終了位置を設定できます。
さて、ここで、orderにasc(昇順)を指定し、starting_afterに1ページ目の最後(つまり25件目)の要素を指定すると、
返ってくる一覧は1ページ目から最後の要素を除いたものと同じになってしまいます。合計24件です。
どうやら、ページネーションを使用する際は、orderをdesc(降順)にしなければいけないようです。
ascのままでも、ending_beforeを使用するのかなとも思いましたが、指定しても取得結果に変化がありません。
使い方が悪いのでしょうか。
ググったところ、ヒットしたのはこのツイートだけでした。
CoinCheck API 取引履歴(ページネーション)は
ending_before 有効なのかな
get の parameter に指定しても戻り値が必ず null だ
starting_after は指定した値が返ってくるから指定の仕方は間違ってないと思うんだけど— kazuhisa (@kazuhisam3) 2017年5月25日
解決策
とりあえず、orderをdescにしている分には問題ないようです。
本当は、古いポジションから決済したいので、ascを使って取得したいのですが、
仕方がないので、descで取得してから昇順にソートし直すことにします。
APIが公開されているビットコイン取引所一覧
国内の取引所のうち、まともに自動売買ができるのは、私が知る限り以下の4つです。
- CoinCheck(コインチェック)
- 国内取引高は1位。ビットコイン以外のオルトコインも多数取り扱っています。
- Bitflyer(ビットフライヤー)
- テレビCMでおなじみ。FXが人気。手数料が高めなのが難点。
- Zaif(ザイフ)
- 取引手数料がマイナスなので、取引するほど儲かります。
- QUOINE(コイン)
- この4つの中では取引量が一番少ないですが、レバレッジ取引のAPIが公開されているため、私は愛用しています。