Liquid by Quoine APIの使い方(Python3)

やり方

Liquid by Quoine APIのPython3での基本的な使い方を解説します。

『認証が不要なPublic API』および『認証が必要なAuthenticated API』のサンプルコードを記載しているので、やりたいことはできるようになると思います。

初めてAPIを接続したいけど上手くできなくて苦戦している方向けの記事です。

Python3でのLiquid APIでハマりやすいポイントはLiquid by Quoine APIでエラーが発生するを参照ください。

APIでシステムトレードを実装するならさくらのVPS などの外部VPSが便利です。

【Liquid by Quoine】Public APIの使い方

Public APIの利用方法の概要

Public APIに分類される機能は認証が不要なので、登録なしで使用できます。

Get a ProductのAPIドキュメントの右側にGet /products/:idとあるので「Get」メソッドでURL「/products/:id」に接続します。

Get method

コロン付きの:idは可変項目ですので必要な値を用意します。今回は「5」(BTCJPY)を利用します。

Public APIのサンプルコード

import requests
import json
path = '/products/5';
query = '';
url = 'https://api.liquid.com' + path + query;
res = requests.get(url)
data = json.loads(res.text)
print(data)

Public APIのサンプルコード解説

Liquid by QuoineへのGetメソッドはPythonのrequestsモジュールを使用します。

requests.get()の形式で使用します。postの場合はrequests.post()となります。

requests.get()の引数にはLiquid by Quoineのエンドポイント(https://api.liquid.com)に機能のパス(path)をつなげます。

リクエスト時に必須項目でパラメータを付ける必要がある際は?xxx=1&yyy=2の形式でquery部分に設定します。

今回はjson形式でデータを処理していますので、res(レスポンス)はjson.loads()でjsonに変換しています。

【Liquid by Quoine】Authenticated APIの使い方

Authenticated APIの利用方法の概要

Liquid by Quoine APIドキュメント(https://developers.liquid.com/)より、Create an Order(https://developers.liquid.com/#create-an-order)の機能を使います。

Authenticated APIに分類される機能は認証が必要なので、事前にAPIトークンの作成が必要となります。

APIトークンの作成方法は事前準備を参照ください。

APIドキュメントの右側にPOST /orders/とあるので「Post」メソッドでURL「/orders/」に接続します。
(後ろにスラッシュ(/)が必要です)

Authenticated APIのサンプルコード

import requests
import json
import jwt
token = "xxxx"
secret = "yyyy"
path = '/orders/';
query = '';
url = 'https://api.liquid.com' + path + query;
timestamp = datetime.now().timestamp()
payload = {
  "path": '/orders/',
  "nonce": timestamp,
  "token_id": token
}
signature = jwt.encode(payload, secret, algorithm='HS256')
headers = {
  'X-Quoine-API-Version': '2',
  'X-Quoine-Auth': signature,
  'Content-Type' : 'application/json'
}
data = {
  "order":{
    "order_type":"limit",
    "margin_type":"cross",
    "product_id":5,
    "side":"buy",
    "quantity":0.1,
    "price":1000000,
    "leverage_level":2,
    "funding_currency":'JPY',
    "order_direction":"one_direction"
  }
}
json_data = json.dumps(data)
res = requests.post(url, headers=headers, data=json_data)
datas = json.loads(res.text)
print(datas)

Authenticated APIのサンプルコード解説

Liquid by QuoineではJWT(Json Web Token)という認証を利用しますが、上記のサンプルコードではPyJWTというライブラリを利用しています。

pip install PyJWTでインストールします。(pip install jwtではないので注意)

token = “xxxx”、secret = “yyyy”部分には発行したAPIトークンおよびシークレットキーを設定します。

認証部分はAPIドキュメント(https://developers.liquid.com/#authentication)の仕様に沿って設定します。

payloadにpath、nonce(UNIX TIME形式のタイムスタンプが一般的)、token_idを設定します。

jwt.encode()でpayloadをシークレットキー(secret)を利用して、HMAC-SHA256(HS256)でエンコードします。

encodeしたsignatureをheadersのX-Quoine-Authに設定して、requests.post()の引数に設定します。

注文データはdataに設定した上で、json.dumps()でJSON形式に変換し、requests.post()の引数に設定します。

APIドキュメントのParametersでOptional?(任意)にTrueがついていないものは必須項目なので、忘れずに値を設定します。

まとめ

Liquid by QuoineのAPI(特に認証部分)はサンプルコードもなく、慣れていない人には難しいと思います。

APIでシステムトレードを実装するならさくらのVPS などの外部VPSを利用すると24時間稼働できて便利です。

価格で選ぶならさくらのVPS 、使いやすさ、安定性で選ぶならConoHa VPS がいいですよ。

自作アービトラージbotの動かし方も参照ください。

2 件のコメント

  • こんにちは。
    コードを参考にさせていただいています。
    python3.8.2を使っているのですが、jwtが認識してくれないです。
    vscodeでimport jwtと書いているのですが、jwtが波線になっています。
    pipはサイトに書いてあるようにpip install PyJWTを実行しています。
    何か情報等ありましたら教えてもらえないでしょうか。

    • 申し訳ありません、回答が遅くなりました。

      解決済みかもしれませんが、以下試してみてください。

      VSCodeは使ったことがないのですが、コマンドラインで実行するとエラーメッセージを確認できるので調べやすくなります。

      AttributeError: module 'jwt' has no attribute 'encode'

      の場合は、PyJWTが読み込めていない、またはjwtが悪さをしていると思われます。

      • python -Vでpython2になる場合、pipをpip3で実行する。
      • pip listでPyJWTとjwt両方がインストールされているなら、jwtをアンインストールする。

      で解決できるかもしれません。

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です