初心者が一攫千金を目指してBitcoin自動取引botを作るよ! その1【情報取得】


働き初めて、はや二年・・・
「思ったより増えないお金!!」
「募る老後への不安!!!」
そんな中見つけました!!
zaifというBitcoin取引ができるサイトを。

読んでみると、なんと・・・

  • 取引手数料がマイナス
  • API公開(zaif API)

  と書いています!!!

これは、、、
Bitcoinとかよくわからないけど、
手数料マイナスだし、
Botを作ってひたすら細かく利益を出すトレードをすれば何もしなくても儲かるのでは…!?

…という浅はかな考えのもと、Bot作りを開始したいと思います☆―(ノ゚Д゚)八(゚Д゚ )ノイエ―イ

準備

環境構築とAPIのインストールを行います。
OSはWindows 7 Home premiumを使ってます。

1.環境構築

まず、使用する言語を決めます。
zaifのサイトを見ると、

  • Java
  • JavaScript(node.js)
  • Ruby
  • PHP
  • Golang
  • Python

 が言語として使えるらしい。

今回は触ったことのあるpythonで作っていきます。

■入れるもの:

  • python2.7 AWS Lambdaに載せたいので3ではなく2を選択
  • pycharm pythonの開発環境はこれがいいと聞いたので

 以上。少ない・・・

※pythonインストール時の注意点
 ・「Customize python」でpathを通すを選択する(デフォルトではオフになっている)[参考]
 

2.APIインストール

zaifのサイトのpythonコーナーをみると、
zaif APIを簡単に使えるようなライブラリ(非公式)を提供してくれている神がいらっしゃいました!!∑d(゚∀゚d)!!
ありがたく使用させて頂きます。

READMEに従い、インストールします。
作業フォルダにインストールしたいので、以下の手順で。
 1. 作業フォルダを作成(私はzaifという名前で作成しました)
 2. コマンドプロンプトを開く
 3. cdコマンドで1.で作成したフォルダへ移動
 4. コマンドpip install zaifapi -t .を実行

検証

zaif APIを使って動きを確認します。
 1. pycharmを開く
 2. 「open」から先程作成した作業フォルダを開く
 3. 左に表示されているフォルダ一覧から作業フォルダを右クリックし、pythonファイルを作成(私はmainという名前で作成しました)

 4.作成したファイル(main.py)にコードを書いていきます。

情報取得(公開情報API)

まず、シンプルに動かしてみます。
何事も最初の1歩が大切ですよね。
現在のBitcoinの値段(日本円換算)を取得してみます。
(下記をコピペして実行する(shift+F10)だけでok)

main.py
# -*- coding: utf-8 -*-

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

if __name__ == '__main__':
    zaif = ZaifPublicApi()
    pprint(zaif.last_price('btc_jpy'))

う、動いた・・・!ヾ(゚ω゚*)ノやったぜ

■実行結果

{u'last_price': 118365.0}

Process finished with exit code 0

現在の価格は1bitcoin=¥118,365みたいですね。

ちなみに、今回使用したZaifPublicApiには下記メソッドも用意されているみたいです。[詳細]

  • last_price : 終値
  • ticker : ティッカー(集計情報取得)
  • trades : 全ての取引履歴
  • depth : 板情報
  • currency_pairs : trade_history等で利用可能な通貨ペア情報
  • currencies : deposit_history等で利用可能な通貨情報

とりあえず、全部動かしてみます。

main.py
# -*- coding: utf-8 -*-

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

if __name__ == '__main__':
    zaif = ZaifPublicApi()

    print('---last_price : 終値--')
    pprint(zaif.last_price('btc_jpy'))

    print('---ticker : ティッカー(集計情報取得)--')
    pprint(zaif.ticker('btc_jpy'))

    print('---trades : 全ての取引履歴--')
    print('取得件数:' + str(len(zaif.trades('btc_jpy'))))
    pprint(zaif.trades('btc_jpy'))

    print('---depth : 板情報--')
    print('取得件数[買い]:' + str(len(zaif.depth('btc_jpy')['asks'])))
    print('取得件数[売り]:' + str(len(zaif.depth('btc_jpy')['bids'])))
    pprint(zaif.depth('btc_jpy'))

    print('---currency_pairs : trade_history等で利用可能な通貨ペア情報--')
    pprint(zaif.currency_pairs('btc_jpy'))

    print('---currencies : deposit_history等で利用可能な通貨情報--')
    pprint(zaif.currencies('all'))

■実行結果

---last_price : 終値--
{u'last_price': 118400.0}
---ticker : ティッカー(集計情報取得)--
{u'ask': 118455.0,
 u'bid': 118435.0,
 u'high': 118995.0,
 u'last': 118455.0,
 u'low': 114895.0,
 u'volume': 11032.3017,
 u'vwap': 116852.519}
---trades : 全ての取引履歴--
取得件数:150
[{u'amount': 0.001,
  u'currency_pair': u'btc_jpy',
  u'date': 1490952581,
  u'price': 118455.0,
  u'tid': 41153900,
  u'trade_type': u'ask'},...<略>
---depth : 板情報--
取得件数[買い]:150
取得件数[売り]:150
{u'asks': [[118455.0, 0.0209],...<略>
 u'bids': [[118450.0, 1.7704],...<略>
---currency_pairs : trade_history等で利用可能な通貨ペア情報--
[{u'aux_unit_min': 5.0,
  u'aux_unit_step': 5.0,
  u'currency_pair': u'btc_jpy',
  u'description': u'\u30d3\u30c3\u30c8\u30b3\u30a4\u30f3\u30fb\u65e5\u672c\u5186\u306e\u53d6\u5f15\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059',
  u'event_number': 0,
  u'is_token': False,
  u'item_unit_min': 0.0001,
  u'item_unit_step': 0.0001,
  u'name': u'BTC/JPY',
  u'title': u'BTC/JPY'}]
---currencies : deposit_history等で利用可能な通貨情報--
取得件数:126
[{u'is_token': True, u'name': u'MAGATAMARDFR'},...<略>

おわりに

なるほど、いろいろ取れるんですね。
簡単に作れると思ってたけど、Botづくりって意外と難しいのでは、、、
今回はここまでにして、次回は認証情報が必要なAPIを動かしてみます。
ちらっと見た感じ、「注文」とか書いてたのでBotっぽい動きができるのではないかとワクワクしてます。
+   +
  ∧_∧  +
 (0゚・∀・)
 (0゚∪ ∪ +
  と__) +

お疲れ様でした!!!

更新情報

・2017/4/4:※pythonインストール時の注意点 追記
・2017/4/27:MarkDown記法間違い修正(altさんご指摘ありがとうございます。)