Node.jsで暗号資産アービトラージ

ビットコイントレード中心にNode.jsで実際に作るためのレシピ

【Node.js】Liquid by quoine APIの使い方(APIで注文する方法)

これからLiquid by Quoine APIを使いたい方向けにAPIを使った注文機能の実装例を解説します。

事前にログインしてAPIトークンID、APIシークレットコードを取得する必要があります。

取得方法は以下の記事を参照してください。
Liquid by Quoine APIの使い方と注意したいポイント - Node.jsで暗号資産アービトラージ

注文のコーディング

解説用に小出しでコードを記載していきます。記事の全コードをコピペすれば動作しますので、手っ取り早く実装したい人は試してみてください。

ライブラリの定義

Node.jsのライブラリrequest(httpで注文を送信する)とjwt(認証する)を利用しますので定義します。

事前にnpmを利用してライブラリをインストールしておいてください。

インストールするコマンドはnpm install requestとnpm install json-web-tokenです。

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

APIトークンとAPIシークレットコードの定義

事前に取得しておいたAPIトークンとAPIシークレットコードを記載します。

APIトークンIDをxxxxxxに、APIシークレットコードをabcdefghijk1234567890に当てはめてください。

const key = "xxxxxx";
const secret = "abcdefghijk1234567890";

関数の定義

APIドキュメント(注文機能)を参考に注文ロジックをコーディングします。

以下から注文を発注する関数を定義します。引数にside("buy"または"sell")、quantity(注文数量)、price(注文したい指値の価格)を設定します。

sendOrder = function(side, quantity, price){

実際の注文リクエストはrequestの箇所で実行しますが、requestの引数となる変数を定義していきます。

ここでは認証情報、注文情報、リクエスト情報に分けて説明します。

API注文で使う認証情報の定義

APIはbase URL(https://api.liquid.com)に各機能のpathをつけて実行していきます。

注文で使うpathは/orders/とAPIドキュメントに記載されているので、pathに/orders/を定義しておきます。

次に一意になるランダムな値をnonceという変数に毎回セットする必要があります。一般的にはtimestamp(日付+時刻)を設定します。

payloadという変数を定義して、path, nonce, token_id(APIトークンID)を以下のサンプルのようなjson形式で定義してください。

json-web-token(以下ではjwt.encode()の部分)にsecret(APIシークレットコード)、payload、コールバック関数(function (err, token))を定義して実行し、署名したキー情報を取得します。

署名したキー情報は変数signatureに入れておきます。

let path = '/orders/';
let timestamp = Date.now().toString();
let payload = {
  "path": path,
  "nonce": timestamp,
  "token_id": key
};
let signature = "";
jwt.encode(secret, payload, function (err, res) {
  if (err) {
    console.error(err.name, err.message);
  } else {
    signature = res;
  }
});

API注文で使う注文情報の定義

続いて注文情報を定義します。orderInfoという変数をJSON形式で定義します。

orderに入れる項目(例:order_type)はAPIドキュメントに定義されているので、全く同じ名前を使用してください。limitは指値注文、marketは成行注文となります。

product_idの設定値がわかりづらいのですが、BTC/JPYの場合、product_idは5を設定します。

product_idは別に取得できるAPIの機能があるので、BTC/JPY以外を使いたい場合はその機能(Get Products)を利用して確認してください。(ここでは割愛します)

sideは"buy"または"sell"でこの例では関数の引数として設定します。quantity、priceも同様。

let orderInfo = JSON.stringify({
  "order": {
    "order_type": "limit",
    "product_id": 5,
    "side": side,
    "quantity": quantity,
    "price": price
  }
})

API注文で使うリクエスト情報の定義

リクエストに設定するオプション情報を定義します。

urlにはベースURL('https://api.liquid.com')に各機能のpathを追加したURLを設定します。

methodはAPIドキュメントより"POST"または"GET"を設定します。(ここでは"POST")

bodyには注文情報として定義したorderInfoを設定します。

headersには決まり文句で'X-Quoine-API-Version': '2'(固定で必須です)、'X-Quoine-Auth': signature(上記で署名したキー情報)、'Content-Type' : 'application/json'(固定で必須)を設定します。

url、method等の変数名はサンプルと同一の記載をしてください。

let options = {
  url: 'https://api.liquid.com' + path,
  method: 'POST',
  body: orderInfo,
  headers: {
    'X-Quoine-API-Version': '2',
    'X-Quoine-Auth': signature,
    'Content-Type' : 'application/json'
  }
};

API注文で使うrequestのコーディング

ここまでで定義してきた変数を使って実際にrequestを実行します。
戻り値のコールバック関数(function (err, response, payload))の"payload"にLiquid by Quoineからの結果が設定されます。

JSON.parseでJSON形式に変更することで、res.id(Liquid by QuoineのOrder ID)、res.filled_quantity(約定した数量)、res.status(注文の状態)の形式で戻り値を参照できます。

request(options, function (err, response, payload) {
  if(err){
    systemLogger.info(err)
  }
  let res = JSON.parse(payload);
  console.log(`Order ID:${res.id} Filled Quantity: ${res.filled_quantity} Status:${res.status}`)
})
}

関数を呼び出すコード

BTCをJPY建で100000万円の指値で0.01買い注文するコードです。

sendOrderTest("buy",100000,0.01)

始めはなかなかとっつきづらいかもしれませんが、応用は効くしトレードの幅が確実に広がるのでぜひ試してみてください。

www.kennejs.com

www.kennejs.com