ゼロから作る自動売買bot開発 ~ 第2回:API Documentを読んでPublic APIを呼んでみる ~
2018.10.03
furusake-s
こんにちは、BCHNews編集長のfurusake-sです。
連載記事 ゼロから作る自動売買bot開発 ~ 第2回:API Documentを読んでPublic APIを呼んでみる ~ をお届けします。
前回:ゼロから作る自動売買bot開発 ~ 第1回:bot開発は取引所選びから ~
前回の投稿に暗号通貨界隈ガチ勢から反響がありました。
内容ゼロ。
連載にして数を稼いで最後は搾取するウサギの陰謀。
カチカチ山で嵌め込んだウサギなのでしたたかなのは間違いなく全員ウサギに背中焼かれて泥舟で沈められるのま間違いない https://t.co/PHLLtxWu39— 狂タヌ尊 (@MadTanuXT) 2018年10月1日
内容ゼロとは手厳しい評価です。圧倒的なFUDに戦慄しつつも、反響を頂いてる点において感謝の意を示したいと思います。反響を頂かないと書いていても手応えがありませんからね。。読者のみなさまも出来ればSNS等でFUD・・ではなくコメントをしてもらえると嬉しいです。
本日も内容ゼロから作る自動売買bot開発をお届けします。よろしくお願いします。
いよいよAPIを呼びます
第2回にしてようやくAPIを呼ぶことができそうです。前回の取引所選びは非常に大事な選択であると考えており、GOXによって資産を失ってしまった人もいることから、常に自分がなぜこの取引所で取引をしているのか?という自問は常に頭の片隅に残しておいて頂ければ幸いです。
開発環境情報
環境構築手順は省略して概要だけ書きます。
- Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-1021-aws x86_64)
- Node.js
売買を自動化したいので、AmazonWebServiceでUbuntuのmicroインスタンスを建てました。
作成したインスタンスにはElastic IPsを使ってグローバルIPを割り当てておくことをオススメします。
取引所によってはWhiteList方式で、予め登録しておいたIPアドレスからしかAPIを呼び出せないところがあるためです。
本連載のプログラムはNode.jsを使います。
sshしてログインした後、apt-getでnpmをインストールしましょう。
sudo apt-get install npm
インストール後にはnodeが使えるようになっているはずです。
ubuntu@bot-develop:~$ node -v v8.10.0
本連載用に、公開リポジトリを作成しました。
https://github.com/furusake-s/bchn-bot-develop
git clone https://github.com/furusake-s/bchn-bot-develop cd bchn-bot-develop
とコマンドして下さい。
下図のようなファイル構成になっていると思います。
sample/ には実行可能なサンプルプログラム、lib/ にはAPIを呼ぶためのプログラムを取引所ごとに追加していく予定です。
masterが連載当時の状況とかけ離れている場合、
git checkout bot-develop-02
とコマンドして当時の状況を再現して下さい。
サンプルプログラムが更新されてるタイミングでTagを付けておくようにしますので、 https://github.com/furusake-s/bchn-bot-develop/tags で連載当時の状況を再現できます。
次に、 .gitignoreファイルを解説します。
bot開発の過程で動作確認、デバッグ目的で各種ログを出力することになると思います。
今回は、ログの出力先をlog/配下にする予定です。また、開発過程で吐き捨てられた.logに重要な情報が入っていることもあるので、*.logを加えておきました。
Private APIを呼ぶ時に使うAPI Keyをconfig/配下にjsonファイルとして持つ予定です。
git操作時に誤ってアップロードされては困るファイルですので除外対象としています。
node_modules/配下のファイルがないと動作しなくなりますが、ここはpackage.jsonで管理されているので除外します。
bchn-bot-develop配下で
npm install
とコマンドすることでnode_modules配下のファイルはインストールできます。(※今回はまだnode_modulesを利用していないので、そのままでも動作します。)
.npmもgit管理対象として不適当なので除外します。
サンプルプログラムの動作確認
(※ /home/ubuntu/の部分は自身の環境に置き換えて下さい。)
/home/ubuntu/bchn-bot-develop/sample/bot-develop-02.js
このファイルの中身が確認できますでしょうか?
// bitFlyerのHTTP Public APIを試してみる var pub = require('/home/ubuntu/bchn-bot-develop/lib/bitFlyer/public.js'); // デバッグ用のcallback関数を用意する function apiDebug(err, res, payload) { if (err) { console.log(err); return; } var data = JSON.parse(payload); console.log(data); }; // product_codeを設定する var product_code = 'BTC_JPY'; // queryを設定する var query = { product_code : product_code, count : 3 }; // aliasを設定する var alias = 'BTCJPY_MAT3M'; // from_dateを設定する var from_date = '2018-10-1'; //pub.getMarkets(apiDebug); //pub.getBoard(product_code,apiDebug); //pub.getTicker(product_code,apiDebug); //pub.getExecutions(query,apiDebug); //pub.getBoardState(product_code,apiDebug); //pub.getHealth(product_code,apiDebug); //pub.getChats(from_date,apiDebug);
短いソースコードなので、全文を掲載します。
//pub.getMarkets(apiDebug); //pub.getBoard(product_code,apiDebug); //pub.getTicker(product_code,apiDebug); //pub.getExecutions(query,apiDebug); //pub.getBoardState(product_code,apiDebug); //pub.getHealth(product_code,apiDebug); //pub.getChats(from_date,apiDebug);
この部分のコメントを外すことで、それぞれAPIを呼ぶことが出来ます。
いくつか試してみて下さい。
例えば、pub.getMarkets(apiDebug);の行をコメントアウトした場合、
[ { product_code: 'BTC_JPY' }, { product_code: 'FX_BTC_JPY' }, { product_code: 'ETH_BTC' }, { product_code: 'BCH_BTC' }, { product_code: 'BTCJPY28DEC2018', alias: 'BTCJPY_MAT3M' }, { product_code: 'BTCJPY05OCT2018', alias: 'BTCJPY_MAT1WK' }, { product_code: 'BTCJPY12OCT2018', alias: 'BTCJPY_MAT2WK' } ]
のように返ってくれば成功です。
もし、サンプルプログラムが実行できない、自力で解決できないけど助けを借りてでも実行させたい。
という方がいましたら、Twitterで 白井ななと( @7bunnies_bot )へ問い合わせをお願いします。
お時間は頂くことになると思いますが、可能な限り対応させて頂きます。
bitFlyerのAPI Documentを読む
サンプルプログラムが実行できれば、API Documentを読むのも楽しくなるはず。
bitFlyerのAPI Documentは公式ページのフッターにリンクがあります。
API Document:https://lightning.bitflyer.com/docs?lang=ja
bitFlyerのAPIはHTTP APIとRealtime APIの2つに大別され、HTTP APIはさらにAPI キーによる認証が不要なHTTP Public APIと認証が必要なHTTP Private APIに分けられます。今回のサンプルプログラムが呼んでいるのはHTTP Public APIですね。
HTTP Public API
- GET /v1/getmarkets
- GET /v1/getboard
- GET /v1/getticker
- GET /v1/getexecutions
- GET /v1/getboardstate
- GET /v1/gethealth
HTTP Private API
- GET /v1/me/getpermissions
- GET /v1/me/getbalance
- GET /v1/me/getcollateral
- GET /v1/me/getcollateralaccounts
- GET /v1/me/getaddresses
- GET /v1/me/getcoinins
- GET /v1/me/getcoinouts
- GET /v1/me/getbankaccounts
- GET /v1/me/getdeposits
- POST /v1/me/withdraw
- GET /v1/me/getwithdrawals
- POST /v1/me/sendchildorder
- POST /v1/me/cancelchildorder
- POST /v1/me/sendparentorder
- POST /v1/me/cancelparentorder
- POST /v1/me/cancelallchildorders
- GET /v1/me/getchildorders
- GET /v1/me/getparentorders
- GET /v1/me/getparentorder
- GET /v1/me/getexecutions
- GET /v1/me/getpositions
- GET /v1/me/getcollateralhistory
- GET /v1/me/gettradingcommission
Realtime API
次回以降に解説しますが、API Documentに Realtime API Playground が用意されているので、APIの構成とレスポンスが確認できます。
どうでしょうか・・・?
API Documentを一読して頂いた、、、として、いかがでしょうか?
APIの数が多いと感じるか少ないと感じるかは人それぞれだと思いますが、自動売買botでは通常使用しないものもあるので、数が多いと感じた方は心配無用です。
APIには内容がわかりやすいような名前がつけられているのがわかると思います。
クエリパラメータ、bodyパラメータと書かれている部分が、APIを呼ぶ時に使用者側が設定する項目です。必須なものとオプショナルなものがあるので、違いを意識してプログラムを書くことになります。各種パラメータの設定とAPI毎のレスポンス、エラーレスポンスは可能な限りテストして結果をまとめておくことをオススメします。特にエラーレスポンスについてはAPI Documentに記載がないので注意が必要です。botが意図しない動作をしないよう、例外処理は必須と言えるでしょう。
取引所選びのときも言及しましたが、過負荷時の挙動にも注意が必要です。時価が古い、注文が通らない、キャンセルできない、残高がおかしい、約定返ってこない、などなど・・・、これらの異常をどのように検知するか、そして対応するか、工夫が求められます。
Public APIとPrivate APIだけでbotを作ることも可能ですが、時価情報と約定情報についてはRealtime APIを使うことがあります。取引手法によりますが、高頻度に取引するタイプのbotではRealtime APIを採用することになると思います。
次回予告
次回は、HTTP Private APIを解説する予定です。そうしようと思っていますが、どうでしょうか?
bitFlyerの新規口座開設がストップしているのでそもそもPrivate APIが試せないかも・・・という懸念があるのですが、続けても構いませんかね?
どうでしょうか・・・。
さいごに
記事を読み切って頂いたついでにもう少し下にスクロールして頂けますでしょうか?
『記事をシェア』という文字の下にSNS投稿用のボタンが4つほど配置されているのがわかりますでしょうか・・・。
どれでも構いませんので、ポチッ。ポチッ。っとクリックして頂けると弊社エンジニアが喜びます。
実装したけど使われない機能ってとても悲しいですからね。。お願いします。。m(__)m
最新情報はこちら
BCHNewsでは公式のTwitterアカウント(@bchnews_jp)を開設しました。
更新情報を配信しておりますので、よろしければフォローしていただけると嬉しいです。
この記事のカテゴリ
この記事のタグ
furusake-s
BCHNews編集長
セブンバニーズ株式会社 代表取締役
1982年生まれ、大阪府出身、B型
趣味はロードバイク、三国志大戦、イカを釣ること