#仮想通貨自動売買①# bitbank公式のAPIから価格情報を定期的に取得するコード

 最近ずっとこのテーマについて記述をしてました。やっと完成・・・。コピペと改変を繰り返したものですが、書きあげた時は感動しました。とりあえずUPしておきます。

bitbankのAPIから定期的にbtcの価格情報を取得するコードです

 

 

 

1 作成の経緯

 

 pythonを勉強するにあたって、仮想通貨の自動売買BOTが作成できるという話をきき、お金は好きだけど人とコミュニケーションをとりたくないヒキコモリとしては、これはよいお小遣い稼ぎになるのではないかと思い、取り組み始めました。

 作成するにあたっては、まずは以下のサイトを参考にしました。

opuktr.hatenablog.com

 

 

ryota-trade.com

 

 両方とも何度も読み返しさせていただきました。特に後者の方はボリューム満載で未だ学習の途上にあります。

 しかし、作成の途中で気づいてしまったのですが、後者のサイトで使用しているbitFlyerが未だに新規会員の募集を停止しているんですよね。

仮想通貨ビットコイン(Bitcoin)の購入/販売所/取引所【bitFlyer(ビットフライヤー)】

 

当社は 2018 年 6 月 22 日、金融庁より業務改善命令を受けました。
経営陣以下社員一同は、いただいたご指摘を厳粛に受け止め、真摯に対応をしていく所存でございます。
適正なサービス運営態勢の構築およびご指摘事項の改善に全力を尽くすため、現在新規のお客様によるアカウント作成を自主的に一時停止しております。

 

 

 もう一年くらい経つんですが、未だに新規会員募集を停止しています。

 そこで、会員登録が可能でAPIの利用が可能だったbitbankの方で口座開設を行い、取引を始めることにしました。

 

 

2 致命的なやらかし

 

 紹介させていただいたサイトを元に、bitbankのAPIから、買い売り指値、成行注文を行うこともできるようになり、簡単なロジックルールにそって売買を行うBOTを完成させることができたので、レンタルサーバーを借りて実際にBOTを動かしてみることにしました。ここで、今まで気がつかなかった致命的なヤラカシに気づきます。

 あれ、BOTが取得している売買価格情報と取引所(bitbank)の売買価格情報がちがうぞ!

 本当に早く気づけよという感じなのですが、文系でもわかる!BitcoinのBOT自動売買トレードの始め方の方で紹介されている取引所の価格情報取得方法はbitFlyerの価格情報を取得するやり方なんですよね。

これは、実は、Bitflyerの2018年1月1日以降のビットコインの日足の価格データを取得するAPIです。
cryptowatchというサイトが用意してくれているAPIです。

このCryptowatchというサイトには、世界各国の取引所の多くの仮想通貨(BTC/ETH/XRP…)の価格データが蓄積されています。さらにサイト側がAPIを用意してくれているので、あなたは上記のURLを入力するだけで、cryptowatchのサーバーから、ありがたく価格データを引っ張ってくることができます。

 しかし、cryptowatchのAPIを利用して価格情報を取得しているのであれば、これを経由してbitbankの価格情報を入手すればいいだけですので、「いやー嫌な汗かいたわー」と最初は思っていました。ところが・・・

Cryptowatch - live Bitcoin price charts

 

 対応していないんですよね(笑)

 

 

3 bitbankのAPIから価格情報を直接取り込む

 となると、私に残された選択肢はbitbankのAPIから直接価格情報を継続的に取り込むコードを書くしかありません。そこで、id:opuktrさんのサイトを参考にさせていただき、上記のコードを書いた次第です。記述する上で面倒だったのが、bitbankのAPIの仕様です。

docs.bitbank.cc

 取得する日付を埋め込まないとデータを取得することができない仕様になっています。なので9〜13行目の汚いコードが必要になってきます。

 

# ロウソク足データを取得
today = datetime.today()
list_yyyymmdd = str(today).split(" ")
list2_yyyymmdd = str(list_yyyymmdd[0]).split("-")
yyyymmdd = ( str(list2_yyyymmdd[0]) + str(list2_yyyymmdd[1]) + str(list2_yyyymmdd[2]))
value = pub.get_candlestick( 'btc_jpy', '1min', yyyymmdd )

 datetime.today()で表示される時刻を加工し、最終的に本日のyyyymmddという文字列になるようにしています。この関数を逐一表示させてみると、次のような文字列が表示されます。

 

today: 2019-03-20 14:05:06.882544

list_yyyymmdd: ['2019-03-20', '14:05:06.882544']

list2_yyyymmdd: ['2019', '03', '20']

yyyymmdd: 20190320

 

 splitして、上澄みのyyyymmddだけ取り出した感じですね。これを利用して今日の日付のyyyymmdd形式を取り出し、定期的に更新し続けるコードが完成しました。

 

4 感想

 日付情報の指定といういらないものがあるせいでいらない苦労をさせられました。というか、BitFlyer早く復活してください。

 

 

 

追記(2019/03/20)

 時差の関係で日本時間0時から9時までエラーを吐くこともわかりましたので、その点についても今日中に修正したいです 修正しました。