##前提として
bitbankに登録(口座開設)済、かつ口座に日本円が入金済 ※売る場合は該当通貨も保有済であること(当たり前)
https://app.bitbank.cc
bitbankのAPIアクセスキーとアクセスシークレットを発行済である
https://support.bitbank.cc/hc/ja/articles/360036234574-API%E3%82%AD%E3%83%BC%E3%81%AE%E7%99%BA%E8%A1%8C%E3%81%A8API%E4%BB%95%E6%A7%98%E3%81%AE%E7%A2%BA%E8%AA%8D%E6%96%B9%E6%B3%95
Googleアカウント取得済である
https://www.google.com/intl/ja/account/about/
Google Apps Scriptを利用したことがある
https://script.google.com/home
前回までの記事は読んだ
【GAS】bitbank(ビットバンク)のAPIをGoogle Apps Scriptで利用する ~ビットコインの最新取引価格を取得してみる~
【GAS】bitbank(ビットバンク)のAPIをGoogle Apps Scriptで利用する ~自分の資産情報を取得してみる~
ビットコインを注文してみる
プライベートAPI公式ドキュメント(日本語)
https://github.com/bitbankinc/bitbank-api-docs/blob/master/rest-api_JP.md
このドキュメント中の
新規注文を行うの項目を利用します。
前回の記事で認証のくだりはクリアしているので、
今回の注意点はGET
ではなくPOST
であるという点です。
##POSTの場合の変更点
- パラメータをJson文字列にしてリクエストボディに含める
- 署名作成用の連結文字列は「ACCESS-NONCE、リクエストボディのJson文字列」 を連結させる
一つずつ見ていきましょう。
パラメータをJson文字列にしてリクエストボディに含める
パラメータとは、以下のように、注文する内容の各項目をセットしたものです。
const body = {
"pair": "btc_jpy", // 買いたい銘柄(ビットコイン)
"price": "4000000", // 買いたい価格(円)
"amount": "0.0001", // 買いたい量
"side": "buy", // buy(買) or sell(売)
"type": "limit" // limit(指値) or market(成行)
};
これを、json文字列に変換します。
const payload = JSON.stringify(body);
// payloadとは、一般的にhttpリクエストのhttpヘッダーを除いたボディ部分、つまり送信内容そのものです
署名作成用の連結文字列は「ACCESS-NONCE、リクエストボディのJson文字列」 を連結させる
nonceと、先ほどのpayloadを組み合わせて連結文字列とします。
const concatenated_string = `${nonce}${payload}`;
いざ、注文
あとは、これらをoptionに含めて、注文APIにPOSTします。
完成したプログラムはこちらです。
function spotOrderCoin(){
// プライベートAPI
const PRIVATE_URL = "https://api.bitbank.cc/v1";
// APIアクセスキーとアクセスシークレット
const ACCESS_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXX", // ご自分のアクセスキーを入れてください
ACCESS_SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; // ご自分のアクセスシークレットを入れてください
// UNIXタイムスタンプからナンスを作成
const date = new Date();
const nonce = Math.floor( (date.getTime() / 1000) ).toString();
// パラメータをリクエストボディに設定
const body = {
"pair": "btc_jpy", // ビットコインの場合です。他の通貨を希望する場合は変更してください
"price": "4000000", // 例です。ご自分が希望する価格を入れてください
"amount": "0.0001", // 例です。ご自分が希望する量を入れてください
"side": "buy", // 買い注文
"type": "limit" // 指値
};
// bodyの内容をJSON文字列に変換
const payload = JSON.stringify(body);
// 連結文字列を作成
const concatenated_string = `${nonce}${payload}`;
// 著名を作成
const signature_base = Utilities.computeHmacSha256Signature(concatenated_string, ACCESS_SECRET);
const signature = signature_base.reduce( function(str, chr) {
chr = (chr < 0 ? chr + 256 : chr).toString(16);
return str + (chr.length == 1 ? '0' : '') + chr;
}, '');
// ヘッダー情報を設定
const headers = {
"Content-Type": "application/json",
"ACCESS-KEY": ACCESS_KEY,
"ACCESS-NONCE": nonce,
"ACCESS-SIGNATURE": signature
};
// payloadをoptionsに設定
const options = {
"method": "POST",
"headers": headers,
"payload": payload
};
// ビットコインを買い注文
const response = JSON.parse( UrlFetchApp.fetch(PRIVATE_URL + '/user/spot/order', options) );
console.log(response);
}
結果例
{ success: 1,
data:
{ order_id: 12345678901,
pair: 'btc_jpy',
side: 'buy',
type: 'limit',
start_amount: '0.0001',
remaining_amount: '0.0001',
executed_amount: '0.0000',
price: '4000000',
average_price: '0',
ordered_at: 1612514297428,
status: 'UNFILLED' } }
こんな感じのレスポンスが返ってきたら成功です。
売り注文の場合
買い注文と同じことです。パラメータの"side"
の値をbuy
からsell
に変えるだけです。
APIで何かやってる実感
おそらくこの売り買い注文のあたりから、
APIでいろいろやってる実感が出てくるのではないでしょうか。
あとは例えば、
- 資産の推移をスプレッドシートに記録しグラフ化する
- タイマーで自動実行する
- ある値段になったら自動で買う、売る
- 毎日、毎月決まった額だけ積み立て注文する
などなど、
このあたりのこともGoogleサービスでいろいろできますのでぜひ試してみてください。