30分で作るTradingViewのアラートで自動的に発注する仕組み

2018年9月17日 訂正

TwitterDMでのご指摘により、下記コードの末尾にセミコロンが足りないことに気が付きました。ご指摘ありがとうございます。

var sellCondition = 'subject:(【SELL_FXBTCJPY】)';

以上。


こんばんは、でめきん(@demekinnomimi)です。今日はTradingViewのアラートに反応して自動的にBitflyerで発注する方法を書きます。ちなみに今日もPythonは一切使いません。

必要なもの
・Googleアカウント
・TradingView無料アカウント(登録情報のEメールをGmailに設定済み)

本日のインスパイア元はこちら → https://life89.jp/gas_bitflyer_sendchildorder/

昨日のnoteの内容も使っています。

30分の制限時間に追われているので、GoogleScriptの細かい点は、昨日のインスパイア元( https://asatte.biz/gmail-line/#GmailLINE)を見てください。

早速、Google Scriptのソースコードを貼ります。

// APIkeyを設定
var key = 'API_KEY';
var secret = 'API_SECRET';

var buyCondition = 'subject:(【BUY_FXBTCJPY】)';
var sellCondition = 'subject:(【SELL_FXBTCJPY】)';
function getMail(){
  //指定した件名のスレッドを検索して取得 
  var myThreadsBuy = GmailApp.search(buyCondition, 0, 10); 
  var myThreadsSell = GmailApp.search(sellCondition, 0, 10); 
  //スレッドからメールを取得し二次元配列に格納
  var myMessagesBuy = GmailApp.getMessagesForThreads(myThreadsBuy);
  var myMessagesSell = GmailApp.getMessagesForThreads(myThreadsSell);
  
 
  for(var i in myMessagesBuy){
    for(var j in myMessagesBuy[i]){
      //スターがないメッセージのみ処理   
      if(!myMessagesBuy[i][j].isStarred()){ 
        sendOrder('BUY',0.01);
        //処理済みのメッセージをスターをつける
        myMessagesBuy[i][j].star(); 
      }
    }
  }
  for(var i in myMessagesSell){
    for(var j in myMessagesSell[i]){
      //スターがないメッセージのみ処理   
      if(!myMessagesSell[i][j].isStarred()){ 
        sendOrder('SELL',0.01);
        //処理済みのメッセージをスターをつける
        myMessagesSell[i][j].star(); 
      }
    }
  }
}

function sendOrder(side, size){
 
  var timestamp = Date.now().toString();
  var method = 'POST';
  var path = '/v1/me/sendchildorder';
  var body = JSON.stringify({
    product_code: "FX_BTC_JPY",
    child_order_type: "MARKET",
    side: side,
    size: size
  });
  
  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);
  }
}

上記のコードを昨日と同じように、API_KEYとAPI_SECRETをご自身のものに書き加えてやって、Google Scriptに貼り付けて保存して、実行すると、

こんな感じで承認が必要ですって出て、

こんな許可を求められるので、許可してあげてください。

動くのだけは確認しました。これを昨日と同様に「現在のプロジェクトのトリガー」で設定してやって、TradingViewのアラートのメッセージに買いたい場合【BUY_FXBTCJPY】を、売りたい場合【SELL_FXBTCJPY】)を設定すれば、TradingViewのアラートにしたがって自動売買するBotの完成です。

動作確認してたら、30分過ぎてしまったので今日はここまで。


いいなと思ったら応援しよう!