35
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

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

初心者が一攫千金を目指して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と呼べるものが出来上がるのでは・・・!!と期待しています。

お疲れ様でした!!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
35
Help us understand the problem. What are the problem?