4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【GAS】bitbank(ビットバンク)のAPIをGoogle Apps Scriptで利用する ~ビットコインを注文(売買)してみる~

Last updated at Posted at 2021-02-05

##前提として
:white_check_mark: bitbankに登録(口座開設)済、かつ口座に日本円が入金済 ※売る場合は該当通貨も保有済であること(当たり前)
https://app.bitbank.cc

:white_check_mark: 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

:white_check_mark: Googleアカウント取得済である
https://www.google.com/intl/ja/account/about/

:white_check_mark: Google Apps Scriptを利用したことがある
https://script.google.com/home

:relaxed: 前回までの記事は読んだ
【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します。
完成したプログラムはこちらです。

spotOrderCoin.gas
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サービスでいろいろできますのでぜひ試してみてください。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?