QUOINEXのAPIから現在値とかポジションとか取得する Pythonコード

8/23の12時、QUOINEXは『建玉時のポジション料を無くす』ルール変更を行います。

QUOINEXはレバレッジ25倍で両建て取引が可能なので、BitFlyerFX(以下、BF)から多くのユーザーが流れるかもしれないと、ツイッターでは騒がれています。私自身も眠っていたアカウントを起動し準備を始めました。

さて、QUOINEXもBF同様にAPIを提供してくれているので、botでのトレード作成が可能です。『QUOINEX API』で検索しても、公式APIサイトくらいだけだったので、個人的な備忘録としてまとめときました。

(参考:https://www.quoine.com/api/?lang=ja

QUINEX API コード 最終約定価格とBestAsk BestBid

import json
import requests
import datetime
import time

def get_product():
  while True:
    try:
      response = requests.get('https://api.quoine.com/products/5/')
      res = response.json()

      best_ask = res["market_ask"]
      best_bid = res["market_bid"]
      ltp = res["last_traded_price"]

      loc = datetime.datetime.fromtimestamp(time.time())

      print("{} ltp:{} best_ask:{} best_bid{}".format(loc,ltp,best_ask,best_bid))
      break

    except:
      print("QuoinexのAPIでエラー発生")
      print("注文の通信が失敗しました。3秒後に再トライします")
      time.sleep(3)

if __name__ == '__main__':
  while True:
    get_product()
    time.sleep(1)
    # 終わらせるのは ctrl + C

結果はこんな感じで返ってきます。

2018-08-22 22:14:01.128426 ltp:734765.14045 best_ask:734781.0 best_bid734589.13
2018-08-22 22:14:02.256791 ltp:734765.14045 best_ask:734765.14045 best_bid734620.23
2018-08-22 22:14:03.440142 ltp:734765.14045 best_ask:734763.12045 best_bid734616.0
2018-08-22 22:14:04.552483 ltp:734763.12045 best_ask:734765.14045 best_bid734763.72
2018-08-22 22:14:05.694827 ltp:734763.12045 best_ask:734765.14045 best_bid734732.25
2018-08-22 22:14:06.836205 ltp:734763.12045 best_ask:734765.14045 best_bid734727.48
2018-08-22 22:14:09.827471 ltp:734765.0 best_ask:734765.14045 best_bid734763.42
https://api.quoine.com/products/5/

数字が通貨ペアを表しており、1ならBTCUSD、5ならBTCJPYです。

板情報

response = requests.get('https://api.quoine.com/products/5/price_levels')

数字が通貨ペアを表しており、1ならBTCUSD、5ならBTCJPYです

{'buy_price_levels': 
    [
    ['735542.00005', '0.21012625'], 
    ['735486.66000', '0.29760000'], 
    ['735484.68330', '0.00415459'], 
    ['735483.74400', '0.04000346'], 
    ['735446.20630', '0.02000000'], 
    ['735384.40870', '0.04001255'], 
    ['735349.66000', '0.50690000'], 
    ['735349.64500', '0.02000000'], 
    ['735333.00000', '0.01000000'], 
    ['735315.37000', '0.00500000'], 
    ['735154.00000', '1.71200000'], 
    ['735153.16000', '0.01000000'], 
    ['735123.15261', '0.11796504'], 
    ['735112.41090', '0.04001917'], 
    ['735086.64880', '0.35700000'], 
    ['735084.25500', '0.01100000'], 
    ['735043.65711', '0.13000100'], 
    ['735042.03000', '0.01000000'], 
    ['735012.04000', '0.12500000'], 
    ['735012.03000', '0.04001028'], 
    ['735010.03000', '0.00510344']
    ], 
'sell_price_levels': 
    [
    ['735547.37500', '0.04000000'], 
    ['735549.37500', '0.02000000'], 
    ['735596.00000', '0.04000000'], 
    ['735598.00000', '0.01000000'], 
    ['735610.00000', '0.01000000'], 
    ['735611.09000', '0.02000000'], 
    ['735625.29000', '0.02000295'], 
    ['735654.42000', '0.09650000'], 
    ['735701.00000', '0.01000000'], 
    ['735716.00000', '0.61000039'], 
    ['735716.74000', '0.04000000'], 
    ['735717.05000', '0.00500000'], 
    ['735731.27000', '0.02699223'], 
    ['735733.27000', '0.02000360'], 
    ['735764.00000', '1.00000013'], 
    ['735764.51500', '0.02000000'], 
    ['735807.00000', '0.05000000'], 
    ['735829.15890', '0.02000299'], 
    ['735842.71000', '0.04000000'], 
    ['735845.00000', '0.01000000'], 
    ['735869.29890', '0.02000725']
]}

まとめて過去データ取得

import json
import datetime
import time
import requests
from pprint import pprint

def get_product():
  while True:
    try:
      response = requests.get('https://api.quoine.com/executions?product_id=5&limit=100')
      res = response.json()
      pprint(res, width=40)
      break

    except:
      pprint("QuoinexのAPIでエラー発生")
      pprint("注文の通信が失敗しました。3秒後に再トライします")
      time.sleep(3)

if __name__ == '__main__':
  get_product()

product_idが通貨ペア名。5番がBTCJPY。

limitは取得数。最大は1000。デフォルトは20。

{'current_page': 1,
 'models': [{'created_at': 1534946754,
             'id': 50753420,
             'price': 735080.31,
             'quantity': 0.076,
             'taker_side': 'buy'},
            {'created_at': 1534946752,
             'id': 50753419,
             'price': 735080.31,
             'quantity': 0.04,
             'taker_side': 'buy'},・・・・

これで歩み値を取得できる。created_atがtimestampなので、datetime使って時間表示にすれば、独自のOHLCを作成することも出来る。

ポジション情報の取得

まずはAPIトークンを手に入れる。

パソコン画面の右上の『三』マークを開く。

下から二つ目のトークン開く。

APIトークンを新規作成する。

取引口座の書き込みは、API乗っ取られたときに怖いのでチェックせず。

ccxtを使う

PythonからBFにオーダーを出す場合、pybitflyerってモジュールのほかにccxtってモジュールがあります。このccxtはBF以外にもQUOINEXにも対応している便利な奴です。

私は好き好んで使っています。

pip install ccxt

で、とりあえずインストールします。

import ccxt
from pprint import pprint

quoinex = ccxt.quoinex()

pprint(quoinex.has)

このコードを実行すると、ccxtを使ってできることが一覧で表示されます。

{'CORS': False,
 'cancelOrder': True,
 'cancelOrders': False,
 'createDepositAddress': False,
 'createLimitOrder': True,
 'createMarketOrder': True,
 'createOrder': True,
 'deposit': False,
 'editOrder': 'emulated',
 'fetchBalance': True,
 'fetchClosedOrders': True,
 'fetchCurrencies': False,
 'fetchDepositAddress': False,
 'fetchFundingFees': False,
 'fetchL2OrderBook': True,
 'fetchMarkets': True,
 'fetchMyTrades': True,
 'fetchOHLCV': 'emulated',
 'fetchOpenOrders': True,
 'fetchOrder': True,
 'fetchOrderBook': True,
 'fetchOrderBooks': False,
 'fetchOrders': True,
 'fetchTicker': True,
 'fetchTickers': True,
 'fetchTrades': True,
 'fetchTradingFees': False,
 'fetchTradingLimits': False,
 'privateAPI': True,
 'publicAPI': True,
 'withdraw': False}

主な内容

出来ること:キャンセルオーダー、リミットオーダー、成行オーダー、有効残高、クローズオーダー、注文情報取得、ティッカー情報取得などなど

from pprint import pprint
import config_quoine
import ccxt

quoinex = ccxt.quoinex()
quoinex.apiKey = config_quoine.QUOINE_KEY
quoinex.secret = config_quoine.QUOINE_SECRET

pprint(quoinex.fetch_ticker("BTC/JPY"))

config_quoineにはトークンIDとトークンキーを入れて保存しておく。

# config_quoine.pyとして保存しておく
QUOINE_KEY = '******'
QUOINE_SECRET = '*********'

上記のfetch部分をいろいろ変えることで、情報が得られる。

{'ask': 733455.0,
 'askVolume': None,
 'average': 721222.3400000001,
 'baseVolume': 24800.87016288,
 'bid': 733281.48,
 'bidVolume': None,
 'change': 24459.31999999995,
 'close': 733452.0,
 'datetime': '2018-08-22T15:04:43.867Z',
 'high': 762631.31259,
 'info': {'base_currency': 'BTC',
          'btc_minimum_withdraw': None,
          'code': 'CASH',
          'currency': 'JPY',
          'currency_pair_code': 'BTCJPY',
          'disabled': False,
          'exchange_rate': '0.009055899982664689122784223',
          'fiat_minimum_withdraw': None,
          'high_market_ask': '762631.31259',
          'id': '5',
          'indicator': 1,
          'last_price_24h': '708992.68',
          'last_traded_price': '733452.0',
          'last_traded_quantity': '0.15008295',
          'low_market_bid': '704000.0',
          'maker_fee': '0.0',
          'market_ask': '733455.0',
          'market_bid': '733281.48',
          'name': ' CASH Trading',
          'product_type': 'CurrencyPair',
          'pusher_channel': 'product_cash_btcjpy_5',
          'quoted_currency': 'JPY',
          'symbol': '¥',
          'taker_fee': '0.0',
          'volume_24h': '24800.870162879999999928'},
 'last': 733452.0,
 'low': 704000.0,
 'open': 708992.68,
 'percentage': 3.449869186237571,
 'previousClose': None,
 'quoteVolume': None,
 'symbol': 'BTC/JPY',
 'timestamp': 1534950283867,
 'vwap': None}

上記のコードを叩いた結果はこんな感じ。

createorderすれば、注文も可能。

自動注文のコードはまた書いて紹介します。


追記:ポジション情報取得コード

from pprint import pprint
import config_quoine
import ccxt

quoinex = ccxt.quoinex()
quoinex.apiKey = config_quoine.QUOINE_KEY
quoinex.secret = config_quoine.QUOINE_SECRET

pprint(quoinex.fetch_orders())

注文中情報の取得コード

from pprint import pprint
import config_quoine
import ccxt

quoinex = ccxt.quoinex()
quoinex.apiKey = config_quoine.QUOINE_KEY
quoinex.secret = config_quoine.QUOINE_SECRET

pprint(quoinex.fetch_open_orders())

いいなと思ったら応援しよう!