Liquid by Quoine APIの使い方と注意したいポイント

Liquid by Quoine APIを利用するための手順を紹介します。

基本的にはLiquid by Quoine APIドキュメントを参照してコーディングする流れになります。

ただ、公式サイトだとサンプルプログラムがrubyしかないので、ここではNode.js(Javacript)のコード例を交えて解説します。

Node.jsでの解説となりますが、Python等の他言語でもポイントは同じですので目を通してみてください。

事前準備

APIには認証が不要なPublic APIと認証が必要なAuthenticated APIがあります。

取引や残高確認のようなアカウントに紐づく操作は認証が必要なためログインしてAPIトークンとシークレットコードを取得します。

1. ログイン後画面から右上のメニューマークを押して、設定 > APIトークンをクリック

Liquid by Quoine APIトークン

2. 「APIトークンを新規作成する」ボタンを押して、APIトークンを作成する。
セキュリティ上、権限は最小減にしてください。

Liquid by Quoine APIトークン

2段階認証コードを入力して、確認をクリックします。

[Liquid by Quoine]API接続のサンプルコード

ここではサンプルを載せていますので参照してください。

以下の記事で詳細な使い方を解説しています。
【Node.js】Liquid by quoine APIの使い方(APIで注文する方法) - Node.jsで暗号資産アービトラージ

Public APIサンプル

Public APIは認証不要です。板の価格取得などアカウントに紐づかない操作が可能です。

//getPrice functionで価格(Last Price, Bid, Ask)を取得
const request = require('request');

let path = '/products/5';
let query = '';
let url = 'https://api.liquid.com' + path + query;
request(url, function (err, response, payload) {
  let body = JSON.parse(payload);
  console.log(body.last_traded_price,body.market_bid,body.market_ask)
});

Authenticated APIサンプル

Authenticated APIは認証が必要です。認証がjson-web-tokenを使っており、慣れていないとハマりやすいポイントです。

const request = require('request');
const fs = require('fs');
const jwt = require('json-web-token');

//LiquidのAPI画面から取得したTOKEN ID、User Secretを設定
let token_id = xxx;
let user_secret = yyy;

let path = '/accounts/balance';
let query = '';
let auth_payload = {
  "path": '/accounts/balance',
  "nonce": Date.now().toString(),
  "token_id": token_id
};

jwt.encode(user_secret, auth_payload, function (err, token) {
  if (err) {
    console.error(err.name, err.message);
  } else {
    signature = token;
  }
});

let options = {
  url: 'https://api.liquid.com' + path,
  method: 'GET',
  headers: {
    'X-Quoine-API-Version': '2',
    'X-Quoine-Auth': signature
  }
};

request(options, function (err, response, payload) {
  let body = JSON.parse(payload);
  let jpy = body[1].balance;
  let btc = body[3].balance;
  console.log(jpy, btc)
});

発注可能チェック

2019/4/16追記
これまでは契約書面の更新通知がかなり急なスケジュール(当日中とか)で来ていたんですが、最近は事前に来るようになりました。
そのため以下のようなチェックロジック実装の優先度はやや下がっています。

Liquid by Quoineで一番やっかいなのが、不定期で急に契約書面の更新に同意が必要な場合があることです。

契約書面の更新に同意していないと「契約書面の同意が必要です」のエラーが発生しAPIが使えなくなります。

アービトラージで片側だけ発注できなくなると悲惨なことになるので、発注直前に注文チェックを行う必要があります。

以下は意図的にエラーとなる注文を送信して、任意のエラーコードが返ってくることを確認します。

自分の保有しているBTCを大きく超える数量の売りを入れると"not_enough_free_balance"が返却されるので、not_enough_free_balance以外のメッセージが返ってきた場合は注文が発注できていないと判断して以降の処理を中断します。

~~~省略~~~
//optionsに保有量を上回るBTCを指定して売り注文を発注
request(options, function (err, response, payload) {
  let res = JSON.parse(payload);
  let stopFlg = "";
  //エラーメッセージがnot_enough_free_balanceでなかった場合にstopFlg = "1"を設定
  if(res.errors.user[0]!=="not_enough_free_balance"){
    stopFlg = "1";
  }
  //stopFlgを呼び出し元に戻して処理を続行/中止させる
  callback(stopFlg)

www.kennejs.com

www.kennejs.com