【Google Apps ScriptでbitFlyer API】新規注文(指値注文)を出す

やりたいこと

GASからbitFlyer API を使い、ビットコインの新規注文を出す

bitFlyer API の注文方法は2種類

単純な指値注文 (LIMIT), 成り行き注文 (MARKET) 以外の、ロジックを含んだ注文を発注することができます。 このような注文は、親注文 (parent order) として扱われます。 特殊注文を利用することで、マーケットの状況に応じて注文を出したり、複数の注文を関連付けたりすることが可能です。

bitFlyer APIの注文には単純な注文(child order)と特殊な注文(parent order)があります。
今回はシンプルな注文(child order)で作成します。

bodyをpayloadで送る

ほぼ公式ガイドのサンプルどおりで問題ありません。
が、bodyoptions に入れる際、
body: body,
のままでは送信されないので、Google Apps Script のお作法どおり、payload に入れる必要があります。

  var options = {
      method: method,
      payload: body, // ← GASの場合、payloadで送る
      headers: {
        'ACCESS-KEY': key,
        'ACCESS-TIMESTAMP': timestamp,
        'ACCESS-SIGN': sign,
        'Content-Type': 'application/json'
      }
  };

Google Apps Script サンプルコード(指値注文を出す)

指値で買い注文するサンプルをつくりました。

成功すると、child_order_acceptance_idが返ってきます。

child_order_acceptance_idは、注文受付 ID です。後で注文情報を取得する時などに指定すると、ピンポイントで取得できます。

// APIkeyを設定
var key = '********************';
var secret = '*********************************';
 
function sendOrder(){
 
  var timestamp = Date.now().toString();
  var method = 'POST';
  var path = '/v1/me/sendchildorder';
  var body = JSON.stringify({
    product_code: "BTC_JPY",
    child_order_type: "LIMIT",
    side: 'BUY',
    price: 290000,
    size: 0.01
  });
  
  var text = timestamp + method + path + body;
  var signature = Utilities.computeHmacSha256Signature(text, secret);
  var sign = signature.reduce(function(str,chr){
    chr = (chr < 0 ? chr + 256 : chr).toString(16);
    return str + (chr.length==1?'0':'') + chr;
  },'');
  
  var url = 'https://api.bitflyer.jp' + path;
  var options = {
      method: method,
      payload: body, // ← GASの場合、payloadで送る
      headers: {
        'ACCESS-KEY': key,
        'ACCESS-TIMESTAMP': timestamp,
        'ACCESS-SIGN': sign,
        'Content-Type': 'application/json'
      }
  };

  //送信してレスポンス取得
  var response = UrlFetchApp.fetch(url, options);

  if( response != null ){
    var obj = JSON.parse(response.getContentText());
    Logger.log("child_order_acceptance_id(APIの受付ID): "+ obj.child_order_acceptance_id);
  }
}

実行結果

bitFlyer Lightning で確認。実際に注文できました。

GAS側のログには、child_order_acceptance_id を出力しています。

まとめ

今回は注文を出して、その注文が受付されたことを確認するところまでできました。
次の記事では、注文した結果(約定したかどうかなど)をAPIで取得してみましょう。

bitFlyer ビットコインを始めるなら安心・安全な取引所で