Edited at

初心者が一攫千金を目指してBitcoin自動取引botを作るよ! その2【APIで取引】

More than 1 year has passed since last update.

初心者が一攫千金を目指してBitcoin自動取引botを作るよ! その1の続きになります。

今回は認証情報が必要なAPIを動かして、実際に取引したいと思います✧+(0゚・∀・) + wktk✧

早速動きを検証していきます。


検証

認証情報が必要なAPI:ZaifPrivateApiを動かしてみます。

今回は情報取得(get_info())と取引(trade())を検証しました。


0.準備

このAPIはkeyとsecretという2つのキーが必要なので、zaifにて作成します。

 0. zaifへ新規ユーザ登録を行い、ログインする

 1. 右上のアカウントを選択

 キャプチャ.PNG

 2. 開発者向けAPIのAPI KEYを選択

 キャプチャ5.PNG

 3. get Verification Codeを選択

 キャプチャ2.PNG

 4. 登録したメールアドレスに6桁のコードが送られてくるので、それを入力する

 キャプチャ3.PNG

 5.Keyの名前を入力し、キーに紐付ける権限を選択する(info,tradeを紐付けます)

 キャプチャ4.PNG

 6. createを押し、キーを生成する

 7. KeysのKey,secretをそれぞれコピーし、控えておく


1.情報取得

0.準備で作成したKey,secretを使用して取引の情報を取得します。


main.py

# -*- coding: utf-8 -*-


from zaifapi import ZaifPrivateApi # Zaifが公開している認証情報が必要なAPIを実行するクラス
from pprint import pprint # 表示用(jsonをきれいに表示してくれる)

if __name__ == '__main__':
key = '【準備で作成したKey】'
secret = '【準備で作成したsecret】'

zaif = ZaifPrivateApi(key, secret)
pprint(zaif.get_info())


■実行結果

{u'deposit': {u'btc': 0.0, u'jpy': 0.0, u'mona': 0.0, u'xem': 0.0},

u'funds': {u'btc': 0.0, u'jpy': 0.0, u'mona': 0.0, u'xem': 0.0},
u'open_orders': 0,
u'rights': {u'info': 1, u'personal_info': 0, u'trade': 0, u'withdraw': 0},
u'server_time': 1491068366,
u'trade_count': 0}

保証金(deposit)、資金(funds)、注文数(open_orders)、権限情報(rights)、トレード回数(trade_count)が取得できました。

トレード回数を取得しない軽量版のget_info2()も用意されているようです。


2.取引(trade)

さて、ウォーミングアップが終わったところで、本日のメインディッシュ「取引」です。

取引テスト用に¥1,000ほど入れてみます。

「日本円入出金」メニューにはクレジットカード決済がなかったので、

クレジットカードでビットコインを購入から直接Bitcoinを購入します。

キャプチャ6.PNG

必要情報を入力して購入。

無事買えました!ヾ(o´∀`o)ノ

キャプチャ7.PNG

・・・ん?

キャプチャ8.PNG

手数料で7.6%ほど取られたもよう…(´・ω・`)

最低金額での購入だから、きっと相対的に手数料が高いんだよね・・・

気を取り直して取引(trade)の検証へ(`・ω・´)


2-1.取引(trade:Bitcoinの売却)

ドキュメントさん曰く、currency_pair、action、price、amountを渡してやればいいっぽい。

キャプチャ10.PNG

きちんと順番をあわせ、各値をセットする。

保有しているBitcoin(0.0076btc)をすべて売りに。

売却金額は現在のBitcoin金額の¥121,800を指定します。

キャプチャ9.PNG

・・・何やら怒られている。引数がおかしいと。

TypeError: trade() takes exactly 1 argument (5 given)

コンソールのエラーを確認すると、1つしか入らないのに、5個渡していると言われています。

(ドキュメントに4つのパラメータは必須って書いてあるやん。渡してるの4つだし。。。)

 

ぐぐると先人の方が解決してくださってました。(ありがとうございます。とても助かりました。)

どうやらパラメータの指定の仕方が悪かったみたいです。

キャプチャ11.PNG


main.py

# -*- coding: utf-8 -*-


from zaifapi import ZaifPrivateApi # Zaifが公開している認証情報が必要なAPIを実行するクラス
from pprint import pprint # 表示用(jsonをきれいに表示してくれる)

if __name__ == '__main__':
key = '【準備で作成したKey】'
secret = '【準備で作成したsecret】'

zaif = ZaifPrivateApi(key, secret)
# Bitcoinを売る
pprint(zaif.trade(currency_pair="btc_jpy", action="ask", price=121800, amount=0.0076))


■実行結果

{u'funds': {u'btc': 0.0, u'jpy': 925.946, u'mona': 0.0, u'xem': 0.0},

u'order_id': 0,
u'received': 925.946,
u'remains': 0.0}

動いた~ヾ(゚ω゚*)ノ

btcが0になって、jpyが増えているので、成功です。


2-2.取引(trade:Bitcoinの買付)

Bitcoinの売却ができたので、同じようにBitcoinの買付もやってみます。

保有している日本円(¥925.946)で買えるだけBitcoinを買います。

買い付け量は所持金(¥925)÷ 現在の1bitcoinの価格(¥122,210)で求めます。


main.py

# -*- coding: utf-8 -*-


from zaifapi import ZaifPrivateApi # Zaifが公開している認証情報が必要なAPIを実行するクラス
from pprint import pprint # 表示用(jsonをきれいに表示してくれる)

if __name__ == '__main__':
key = '【準備で作成したKey】'
secret = '【準備で作成したsecret】'

zaif = ZaifPrivateApi(key, secret)

# 現在の1Bitcoinの価格
price = 122210

# APIが小数点以下4桁までの対応なのでround()
# 小数点第5位が繰り上げの場合、資産不足になるため(- 0.0001)
amount = round(925.0/price, 4) - 0.0001

# Bitcoinを買う
pprint(zaif.trade(currency_pair="btc_jpy", action="bid", price=price, amount=amount))


■実行結果

{u'funds': {u'btc': 0.0075, u'jpy': 9.4085, u'mona': 0.0, u'xem': 0.0},

u'order_id': 0,
u'received': 0.0075,
u'remains': 0.0}

Bitcoinを0.0075買い付けましたヾ(゚ω゚*)ノ

日本円が¥9.4085残ってしまいましたが、最小単位の0.0001Bitcoin分(¥12.221)以下は仕様上仕方がないみたいです。


2-3.ZaifPrivateApiのその他メソッドについて

今回、検証したget_info(),get_info2(),trade()以外にも以下のメソッドが用意されています。[詳細]

 - get_personal_info : チャットに使用されるニックネームや画像URLを取得する

- get_id_info : ユーザーIDやメールアドレスといった個人情報を取得する
- trade_history : 取引履歴を取得する
- active_orders : 現在有効な注文一覧を取得する
- cancel_order : 注文を取り消す
- withdraw : 暗号通貨の出金リクエストを行う
- deposit_history : 入金履歴を取得する
- withdraw_history : 出金履歴を取得する


おわりに

今回は取引情報の取得取引を行うことができました!ヽ(´∀`)八(´∀`)ノ

途中つまづきましたが、無事動いて良かったです。

情報の取得と取引の検証が完了したので、

次回は今回検証した内容を組み合わせて「情報の取得▶売る/買う▶最初に戻る」を繰り返して、

勝手に取引してくれるものを作成したいと思います。

ついにBotと呼べるものが出来上がるのでは・・・!!と期待しています。

お疲れ様でした!!