ゼロから作る自動売買bot開発 ~ 第3回:API Documentを読んでPrivate APIを呼んでみる ~

2018.10.10

furusake-s

こんにちは、BCHNews編集長のfurusake-sです。
連載記事 ゼロから作る自動売買bot開発 ~ 第3回:API Documentを読んでPrivate APIを呼んでみる ~ をお届けします。

前回:ゼロから作る自動売買bot開発 ~ 第2回:API Documentを読んでPublic APIを呼んでみる ~

タヌキの人からの反響が途絶えました。BCHの要求を断ったからでしょうか・・・。残念でなりませんが、好きな時に好きなことをするのが現代ですからね、前回の投稿を読んでいない可能性も残されていますが、おそらく面倒になったのだと思います。残念です。反論がなければ私の勝ちです。

(追記)
・・・と思っていたら、タヌキの人から反響が来ました!
下書き時点では反響がありませんでしたので上記のように諦めていたところです。
けして反響を待っていたわけではありませんよ(またヨロシクオネガイシマス)

FUD!!! FUD!!!(いいぞもっとやれ)
褒貶入り混じるタイプのFUDですね、これはタヌキの人にしか出来ない芸当・・・相当なテクニックです。
ハッシュタグは #寝ているだけで朝起きたらお金が増えている でお願いします!
今後ともBCHNewsをヨロシクオネガイシマス。

引き続きAPIを呼んでいきましょう

前回の記事では、サンプルコードを提供し、bitFlyerで用意されている全てのPublic APIを呼ぶための準備が整いました。
自動売買bot(以下bot)を作るためには、Private APIも呼ぶ必要があります。今回はその準備をしましょう。
APIを駆使してbotを動かすにはもう少し準備が必要です。よろしくお付き合いください。

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の構成とレスポンスが確認できます。

サンプルコードを更新する

今回のために、GitHubのリポジトリを更新しました。
前回 git clone した bchn-bot-develop配下で

git pull

してみてください。
git checkout bot-develop-02 していた人は、git checkout master してから git pull してみてください。
以下のフォルダ及びファイルが追加されています。

lib/bitFlyer/private.js
config/bitFlyer.json_org
sample/bot-develop-03.js

tagは bot-develop-03 としました。

公開リポジトリはこちら

作業前の注意点

前回までは開発環境のセキュリティ面について言及していませんでした。
今回はPrivate APIを呼ぶために必要なAPI Keyを作成して、config/bitFlyer.jsonに保存することになります。
開発環境を構築しているサーバーへアクセスできる人数が限定されていることを確認して下さい。
可能であれば自分以外がアクセスできない独立した開発環境でテストすることをオススメします。
API Keyの取り扱いについては https://lightning.bitflyer.com/developer# に記載されている内容を必ず読んでからにして下さい。
今回は config/bitFlyer.json にAPI Secretを平文で保存するので、決してそのままの状態で運用することのないようお願いします。(じゃあどうすればいいの?っていう疑問にはbitFlyerも答えていないので、ここでもお答えしないことにします。お許しくださいm(__)m)

子供だましでも、ないよりはマシだと言う考え方もあります。
暗号化および復号に関する記事をご紹介しますので、平文のままAPI Secretを config/bitFlyer.json に保存したくない場合に検討して下さい。
Nodejsで暗号化と復号化する
サンプルプログラムには該当する記述はありませんので、ご自身の責任で改変して頂ければと思います。

Private APIを呼ぶために必要な作業

今回のサンプルプログラムでPrivate APIを呼ぶには、API Keyを取得して、config/bitFlyer.jsonを作り、API Keyを設定しておく必要があります。

API Keyの取得

bitFlyerへログインして https://lightning.bitflyer.com/developer へアクセスしてみて下さい。
APIの作り方は割愛します。

config/bitFlyer.jsonの作成と編集

cp config/bitFlyer.json_org config/bitFlyer.json

した後に、config/bitFlyer.jsonの内容を以下の通りに編集します。

こうなっている内容を

{
  "account": {
    "key": "",
    "secret": ""
  },
  "trade": {
    "key": "",
    "secret": ""
  }
}

このように編集します

{
  "all": {
    "key": "ここにAPI Keyを設定",
    "secret": "ここにAPI Secretを設定"
  }
}

1つのAPI Keyで全てのPrivate APIをテストするにはAPI Key毎に設定するActionをすべて許可しておく必要があります。

sample/bot-develop-03.jsの解説

sample/bot-develop-03.js が今回のサンプルプログラムですが、このプログラムは config/bitFlyer.json へアクセスすることを前提に作られています。

// bitFlyerのHTTP Private APIを試してみる
var pri = require('/home/ubuntu/bchn-bot-develop/lib/bitFlyer/private.js');

// API Keyの読み込み
var fs = require('fs');
var config = JSON.parse(fs.readFileSync('/home/ubuntu/bchn-bot-develop/config/bitFlyer.json'));

この部分で var config へ config/bitFlyer.jsonの内容を読み込ませています。
/home/ubuntu/bchn-bot-develop の部分はご自身の開発環境に合わせて変更して下さい。

動作の確認

API Keyの取得とconfig/bitFlyer.jsonの作成、編集が完了したらsample/bot-develop-03.jsを編集してPrivate APIを呼んでみましょう。

GET /v1/me/getpermissions を呼んでみる

このAPIはAPI Keyの権限を取得するもので、この API Keyで呼出可能な HTTP Private API の一覧を取得できます。
sample/bot-develop-03.js の以下の部分のコメントアウトを外して node bot-develop-03.js してみてください。

//pri.getPermissions(config.all, apiDebug);

このようなレスポンスが返ってくれば成功です。

statusCode: 200
payload: [ '/v1/getmarkets',
  '/v1/markets',
  '/v1/getmarkets/usa',
  '/v1/markets/usa',
  '/v1/getmarkets/eu',
  '/v1/markets/eu',
  '/v1/getboard',
  '/v1/board',
  '/v1/getticker',
  '/v1/ticker',
  '/v1/getexecutions',
  '/v1/executions',
  '/v1/getchats',
  '/v1/getchats/usa',
  '/v1/getchats/eu',
  '/v1/gethealth',
  '/v1/getboardstate',
  '/v1/me/getpermissions',
  '/v1/me/getbalance',
  '/v1/me/getcollateral',
  '/v1/me/getcollateralaccounts',
  '/v1/me/sendchildorder',
  '/v1/me/sendparentorder',
  '/v1/me/cancelchildorder',
  '/v1/me/cancelparentorder',
  '/v1/me/cancelallchildorders',
  '/v1/me/getchildorders',
  '/v1/me/getparentorders',
  '/v1/me/getparentorder',
  '/v1/me/getexecutions',
  '/v1/me/getpositions',
  '/v1/me/getcollateralhistory',
  '/v1/me/gettradingcommission',
  '/v1/me/getaddresses',
  '/v1/me/getcoinins',
  '/v1/me/getcoinouts',
  '/v1/me/getdeposits',
  '/v1/me/getwithdrawals',
  '/v1/me/getbankaccounts',
  '/v1/me/withdraw' ]

失敗してしまった人は

  • config/bitFlyer.json を記事のとおりに作成しているか?
  • sample/bot-develop-03.js の /home/ubuntu/bchn-bot-develop 部分が自身の環境にあっているか?

などを確認して下さい。

もし、サンプルプログラムが実行できない、自力で解決できないけど、助けを借りてでも実行させたい。
という方がいましたら、Twitterで 白井ななと( @7bunnies_bot )へ問い合わせをお願いします。
お時間は頂くことになると思いますが、可能な限り対応させて頂きます。

もう少しPrivate APIを呼んで見る

GET /v1/me/getpermissions が成功したのであれば、以下のAPIも呼べるはずです。
以下のAPIのうち、呼びたいAPIのコメントアウトを外して node bot-develop-03.js してみてください。

//pri.getBalance(config.all, apiDebug);
//pri.getCollateral(config.all, apiDebug);
//pri.getCollateralAccounts(config.all, apiDebug);
//pri.getAddresses(config.all, apiDebug);

いかがでしょうか?
レスポンスきましたでしょうか?

bitFlyerのAPI Documentを読む

サンプルプログラムが実行できれば、API Documentを読むのも楽しくなるはず。
bitFlyerのAPI Documentは公式ページのフッターにリンクがあります。

API Document:https://lightning.bitflyer.com/docs?lang=ja

記事中に登場したPrivate APIは query や body といった利用者がパラメータを指定する必要のないAPIばかりです。
sample/bot-develop-03.js でコメントアウトされているAPIのなかで、query1 とか body1 とか使用されているAPIはプログラム中で必要なパラメータを指定してやる必要があります。API Documentに記載がありますので、Documentを読みながらサンプルプログラムを試してもらえれば幸いです。

サンプルプログラムを動作させる際の注意点としては、発注に関係するAPIを呼ぶ場合、実際に注文が執行されてしまうので price や size など発注に関係するパラメータは注意して設定するようお願いします。

priceは市場の値段から5%近く離れた値を設定して下さい。(逆に50%以上離れるとエラーになる可能性があります。)
sizeは最低発注数量(0.01BTC)を設定しておくべきでしょう。
child_order_typeは’LIMIT’で試しましょう。’MARKET’にすると即約定します。
minute_to_expireを5に指定しておくと、5分経つと注文自体が失効するので、キャンセルし忘れても大丈夫です。
sideで指定する’BUY’と’SELL’を間違えると、上記の値を気をつけていても即約定してしまいます。(一度はやってしまうかも・・・)

ParentOrder( POST /v1/me/sendparentorder )は条件がとりわけ複雑なので、まずはChildOrder( POST /v1/me/sendchildorder )のみを使って慣れていただくと良いかと思います。ChildOrder及びParentOrderに関する解説は次回以降に行いたいと思います。

(注意: GET /v1/me/getbankaccounts 記事執筆@2018/10/10時点でエラーが返ってきました。)

err: { Error: getaddrinfo ENOTFOUND api.bitflyer.jpv1 api.bitflyer.jpv1:443
    at errnoException (dns.js:50:10)
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:92:26)
  code: 'ENOTFOUND',
  errno: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'api.bitflyer.jpv1',
  host: 'api.bitflyer.jpv1',
  port: 443 }

今回のサンプルプログラムで試せる内容が非常に多いので、API Documentを読みながら動作を確認してみて下さい。

次回予告

Realtime APIに関する記事を書く予定です。
Public APIやPrivate APIに関する解説も予定していますが、まずはRealtime APIのサンプルプログラムを公開したいと思っております。ヨロシクオネガイシマス。

さいごに

記事を読み切って頂いたついでにもう少し下にスクロールして頂けますでしょうか?
『記事をシェア』という文字の下にSNS投稿用のボタンが4つほど配置されているのがわかりますでしょうか・・・。
どれでも構いませんので、ポチッ。ポチッ。っとクリックして頂けると弊社エンジニアが喜びます。
実装したけど使われない機能ってとても悲しいですからね。。お願いします。。m(__)m

最新情報はこちら

BCHNewsでは公式のTwitterアカウント(@bchnews_jp)を開設しました。
更新情報を配信しておりますので、よろしければフォローしていただけると嬉しいです。

furusake-s

BCHNews編集長
セブンバニーズ株式会社 代表取締役
1982年生まれ、大阪府出身、B型
趣味はロードバイク、三国志大戦、イカを釣ること

関連記事

ゼロから作る自動売買bot開発 ~ 第0回:開発を始める前に ~

2018.09.28

by furusake-s

ゼロから作る自動売買bot開発 ~ 第1回:bot開発は取引所選びから ~

2018.10.01

by furusake-s

ゼロから作る自動売買bot開発 ~ 第2回:API Documentを読んでPublic APIを呼んでみる ~

2018.10.03

by furusake-s

ゼロから作る自動売買bot開発 ~ 第4回:API Documentを読んでRealtime APIを呼んでみる ~

2018.10.17

by furusake-s