備忘がてら。そのうち自動売買botを組みたい。
Pythonのバージョンは3。
ZAIFから取る場合
たぶんいちばん楽。価格を取ってくるだけならAPIキー等は不要。
zaifapiというリポジトリが用意されているのでpipで取って来てそのまま使うだけ。
1 |
pip3 install zaifapi |
1 2 3 4 5 6 7 8 9 10 11 |
from zaifapi import ZaifPublicApi; from pprint import pprint; if __name__ == '__main__': zaif = ZaifPublicApi(); #単に最新価格が知りたい場合 print(zaif.last_price("btc_jpy")); #bidとかaskとかも知りたい場合 pprint(zaif.ticker("btc_jpy")); |
pprintってのを使うとjsonを綺麗に出力できるらしいので採用している。
出力結果。2017年10月16日現在の値段は63万前後。
1 2 3 4 5 6 7 8 |
{'last_price': 634080.0} {'ask': 634215.0, 'bid': 634085.0, 'high': 648165.0, 'last': 634080.0, 'low': 604770.0, 'volume': 9095.6835, 'vwap': 626960.8406} |
bitFlylerから取る場合
最近武井咲がCMしてたので一般的な知名度と信頼はここが一番高い気がする。※1ビットコインは我々が作りました!みたいな顔して宣伝するのもなんか変な気がするけど実際に売買する取引所から取得してこないと意味が無いのであんまし関係のない話。
例によってライブラリがあるのでpip
1 |
pip3 install pybitflyer |
コードもだいたい一緒
1 2 3 4 5 6 7 8 9 |
from pprint import pprint; import pybitflyer; if __name__ == '__main__': bitflyer = pybitflyer.API(); pprint(bitflyer.ticker(product_code="btc_jpy")) |
結果。返ってくる内容がZaifと微妙に違う
1 2 3 4 5 6 7 8 9 10 11 12 |
{'best_ask': 625899.0, 'best_ask_size': 0.69711018, 'best_bid': 625771.0, 'best_bid_size': 0.01, 'ltp': 625899.0, 'product_code': 'BTC_JPY', 'tick_id': 19250196, 'timestamp': '2017-10-16T09:33:19.29', 'total_ask_depth': 1749.32450048, 'total_bid_depth': 4823.66063808, 'volume': 219313.75932789, 'volume_by_product': 23457.53000082} |
これまで挙げた2つのAPIの深刻な欠点として、過去チャートの取得が出来ないことが挙げられる。でもって色々探してはいるものの今のところ暗号通貨のクロス円チャートを提供しているAPIが見当たらず。
BTC/USDのチャートであればPoloniexのAPIが提供しているので、円ドルの為替リスクを無視してもいいという前提でなら使えるかもしれないと思ったのでトライ&メモ。
Poloniexから取る場合
またしてもpipで拾ってくる
1 |
pip3 install https://github.com/s4w3d0ff/python-poloniex/archive/v0.4.6.zip |
で、こう
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from poloniex import Poloniex; import time; if __name__ == '__main__': polo = Poloniex(); #足の長さ(300なら5分足) _period = 300; #取得する期間の指定 _end = time.time(); _start = _end - _period * 50; btcusd = polo.returnChartData('USDT_BTC', period=_period, start=_start, end=_end); pprint(btcusd); |
periodに指定できる数は決まっているらしく、とりあえず5分足(300),15分足(900),4時間足(14400),日足(polo.DAY)は使えるようだ。何故か1時間足(3600)は使えないっぽい。
出力結果の一例。上記コードのロウソク足50本分の出力結果を貼り付けるのはいくらなんでも長すぎるので、出力数を3に書き換えてある。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
[{'close': '5657.99999994', 'date': 1508133300, 'high': '5660.21247742', 'low': '5640.99999976', 'open': '5640.99999976', 'quoteVolume': '16.27374549', 'volume': '91984.52130166', 'weightedAverage': '5652.32640255'}, {'close': '5660.00000003', 'date': 1508133600, 'high': '5674.67129443', 'low': '5653.21438914', 'open': '5659.61675401', 'quoteVolume': '20.2168366', 'volume': '114497.35709489', 'weightedAverage': '5663.46552431'}, {'close': '5658.00000003', 'date': 1508133900, 'high': '5670.08', 'low': 5658, 'open': '5660.00000012', 'quoteVolume': '7.95301271', 'volume': '45058.28271058', 'weightedAverage': '5665.56151154'}] |
おわりに
過去チャートを取得する術が乏しいというのが痛すぎるので自動売買botの作成計画がなかなか先に進まない。
スキャルピングをさせるのであれば過去チャートなしでもどうにかなるかもしれないが、そうすると今度はスプレッドが重しになってくる。難しい。
注釈
1. | ↑ | ビットコインは我々が作りました!みたいな顔して宣伝するのもなんか変な気がするけど |