仮想通貨×想い

仮想通貨、プログラミングのこと、最近気になることなど。。。

仮想通貨取引所 Zaif API サンプルプログラム(python編)

1 はじめに

 仮想通貨取引所ZaifAPIを利用するための、サンプルプログラムを書いてみます。

2 APIとは

 APIとはApplication Programming Interfaceの略で、アプリケーションを作成(プログラム)するために用意されたインターフェースのことです。

3 Zaif APIとは

 Zaifが用意する大きく4つのAPIで、現物公開API現物取引API先物公開APIレバレッジ取引APIがあります。これらのAPIを使用すると、取引所の公開情報の取得やトレードを外部のプログラムから行うことができます。
 詳しくは「Zaif API ドキュメント」を見てください。

4 プログラミング条件

 OS Windows10(shift-jis)
 開発言語 Python 3.6.3
 エディタ サクラエディタVer. 2.3.2.0
 事例とした通貨 xemネム
 あくまでサンプルですので、ご利用の際はよく確認してくださいね。

5 現物公開API

 Zaifで、実際に公開されている情報を取得するためのAPIです。

5-1通貨情報(currencies)

 指定した通貨が、主要通貨かトークンかを取得し表示するプログラムコードです。


# coding: shift-jis
import requests
import json

response = requests.get('https://api.zaif.jp/api/1/currencies/xem')
if response.status_code != 200:
 raise Exception('return status code is {}'.format(response.status_code))
dic = json.loads(response.text)

name = dic[0]["name"]
is_token = dic[0]["is_token"]

if is_token == 0:
 coin = "主要通貨です"
if is_token == 1:
 coin = "トークンです"

print("通貨",name,"は",coin,)

 実行結果は次のとおりです。

D:\python>python xem_currencies.py
通貨 xem は 主要通貨です

5-2通貨ペア情報(currency_pairs)

 通貨ペアの情報を取得し表示するプログラムコードです。


# coding: shift-jis
import requests
import json

response = requests.get('https://api.zaif.jp/api/1/currency_pairs/xem_jpy')
if response.status_code != 200:
 raise Exception('return status code is {}'.format(response.status_code))
dic = json.loads(response.text)

name = dic[0]["name"]
print("通貨ペア=",name)
description = dic[0]["description"]
print("通貨ペアの詳細=",description)
is_token = dic[0]["is_token"]
print("トークン=",is_token)
event_number = dic[0]["event_number"]
print("イベントトークン=",event_number)
seq = dic[0]["seq"]
print("通貨シークエンス=",seq)
item_unit_min = dic[0]["item_unit_min"]
print("アイテム通貨最小値=",item_unit_min)
item_unit_step = dic[0]["item_unit_step"]
print("アイテム通貨入力単位=",item_unit_step)
item_japanese = dic[0]["item_japanese"]
print("アイテム通貨日本語表記=",item_japanese)
aux_unit_min = dic[0]["aux_unit_min"]
print("相手通貨最小値=",aux_unit_min)
aux_unit_step = dic[0]["aux_unit_step"]
print("相手通貨入力単位=",aux_unit_step)
aux_unit_point = dic[0]["aux_unit_point"]
print("相手通貨小数点=",aux_unit_point)
aux_japanese = dic[0]["aux_japanese"]
print("相手通貨日本語表記=",aux_japanese)

 実行結果は次のとおりです。

D:\python>python xem_currency_pair.py
通貨ペア= XEM/JPY
通貨ペアの詳細= XEM・日本円の取引を行うことができます
トークン= False
イベントトークン= 0
通貨シークエンス= 1
アイテム通貨最小値= 0.1
アイテム通貨入力単位= 0.1
アイテム通貨日本語表記= XEM
相手通貨最小値= 0.0001
相手通貨入力単位= 0.0001
相手通貨小数点= 4
相手通貨日本語表記= 日本円

5-3現在の終値(last_price)

 現在の終値を取得し表示するプログラムコードです。


#coding: shift-jis
import requests
import json

response = requests.get('https://api.zaif.jp/api/1/last_price/xem_jpy')
if response.status_code != 200:
 raise Exception('return status code is {}'.format(response.status_code))
dic = json.loads(response.text)
prc = dic["last_price"]
print("終値=",prc,"円")

 実行結果は次のとおりです。

D:\python>python xem_last_price.py
終値= 46.05 円

5-4ティッカー(ticker)

 過去24時間の相場情報(ティッカー)を取得し表示するプログラムコードです。


# coding: shift-jis
import requests
import json

response = requests.get('https://api.zaif.jp/api/1/ticker/xem_jpy')
if response.status_code != 200:
 raise Exception('return status code is {}'.format(response.status_code))
dic = json.loads(response.text)

last = dic["last"]
print("終値=",last,"円")
high = dic["high"]
print("過去24時間の高値=",high,"円")
low = dic["low"]
print("過去24時間の安値=",low,"円")
vwap = dic["vwap"]
print("過去24時間の加重平均=",vwap,"円")
volume = dic["volume"]
print("過去24時間の出来高=",volume,"円")
bid = dic["bid"]
print("買気配値=",bid,"円")
ask = dic["ask"]
print("売気配値=",ask,"円")

 実行結果は次のとおりです。

D:\python>python xem_ticker.py
終値= 46.002 円
過去24時間の高値= 48.5 円
過去24時間の安値= 44.4 円
過去24時間の加重平均= 46.0138 円
過去24時間の出来高= 15106826.1 円
買気配値= 46.002 円
売気配値= 46.04 円

5-5全ての取引履歴(trades)

 取引履歴を取得し、直近2件の取引を表示するプログラムコードです。


# coding: shift-jis
import requests
import json
from datetime import datetime

response = requests.get('https://api.zaif.jp/api/1/trades/xem_jpy')
if response.status_code != 200:
 raise Exception('return status code is {}'.format(response.status_code))
dic = json.loads(response.text)

num = 0
while num < 2:   #直近2件の取引を表示する

 date = dic[num]["date"]
 price = dic[num]["price"]
 amount = dic[num]["amount"]
 tid = dic[num]["tid"]
 currency_pair = dic[num]["currency_pair"]
 trade_type = dic[num]["trade_type"]

 loc = datetime.fromtimestamp(date)

 if trade_type == "bid":
  bidask = "買い"
 if trade_type == "ask":
  bidask = "売り"

 print()
 print("取引日時=",loc)
 print("取引価格=",price,"円")
 print("取引量=",amount,"xem")
 print("取引ID=",tid)
 print("通貨ペア=",currency_pair)
 print("取引種別=",bidask)

 num += 1

print()
print(num,"件の直近取引を表示しました")

 実行結果は次のとおりです。

D:\python>python xem_trades.py

取引日時= 2018-02-24 23:50:28
取引価格= 44.1995 円
取引量= 68.0 xem
取引ID= 102897005
通貨ペア= xem_jpy
取引種別= 買い

取引日時= 2018-02-24 23:50:15
取引価格= 44.1994 円
取引量= 7398.7 xem
取引ID= 102896977
通貨ペア= xem_jpy
取引種別= 売り

2 件の直近取引を表示しました

5-6板情報(depth)

 売り板買い板情報を取得し、5件ずつ板情報を表示するプログラムコードです。


# coding: shift-jis
import requests
import json

response = requests.get('https://api.zaif.jp/api/1/depth/xem_jpy')
if response.status_code != 200:
 raise Exception('return status code is {}'.format(response.status_code))
dic = json.loads(response.text)

num0 = 0
num1 = 0

print()
while num0 < 5:   #5件の売り板情報を表示する
 asks = dic["asks"][num0]
 print("売り板",asks[0],"円",asks[1],"xem")
 num0 += 1

print()
while num1 < 5:   #5件の買い板情報を表示する
 bids = dic["bids"][num1]
 print("買い板",bids[0],"円",bids[1],"xem")
 num1 += 1

print()
print(num0,"件ずつ板情報を表示しました")

 実行結果は次のとおりです。

D:\python>python xem_depth.py

売り板 44.2601 円 6245.2 xem
売り板 44.3 円 585.0 xem
売り板 44.3998 円 300.0 xem
売り板 44.3999 円 300.0 xem
売り板 44.4 円 457.0 xem

買い板 44.2002 円 1348.0 xem
買い板 44.2001 円 3383.0 xem
買い板 44.2 円 3620.5 xem
買い板 44.16 円 3.9 xem
買い板 44.12 円 3.9 xem

5 件ずつ板情報を表示しました