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


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

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

検証

認証情報が必要なAPI:ZaifPrivateApiを動かしてみます。
今回は情報取得(get_info())と取引(trade())を検証しました。

0.準備

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

 0. zaifへ新規ユーザ登録を行い、ログインする
 1. 右上のアカウントを選択
 

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

 3. get Verification Codeを選択
 

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

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

 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を購入します。

必要情報を入力して購入。
無事買えました!ヾ(o´∀`o)ノ

・・・ん?

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

最低金額での購入だから、きっと相対的に手数料が高いんだよね・・・
気を取り直して取引(trade)の検証へ(`・ω・´)

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

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

きちんと順番をあわせ、各値をセットする。
保有しているBitcoin(0.0076btc)をすべて売りに。
売却金額は現在のBitcoin金額の¥121,800を指定します。

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

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

コンソールのエラーを確認すると、1つしか入らないのに、5個渡していると言われています。
(ドキュメントに4つのパラメータは必須って書いてあるやん。渡してるの4つだし。。。)

 
ぐぐると先人の方が解決してくださってました。(ありがとうございます。とても助かりました。)
どうやらパラメータの指定の仕方が悪かったみたいです。

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と呼べるものが出来上がるのでは・・・!!と期待しています。

お疲れ様でした!!