スクリーンショット_2019-02-06_2_27_34

GASでBinanceの新規通貨ペアの上場を監視するBOTを作る。もちろん【無料】で!

前置き

こんにちは。たんさん(@5mancrypto)です。
先日のnote、かなり反響がよく驚いています…有名な方にも紹介やコメントしていただき、需要って分からないものだな、と。
味を占めて、今回は少しマニアックな内容のスクリプトを作りましたので公開させていただきます。

取引所APIの使用やデータベース代わりのスプレッドシート利用など、発展させられる部分が多分に含まれていると思いますので、ご自分のニーズに合ったBOT制作の踏み台にでもして頂ければと思います!

今回のnoteも もちろん最後まで無料で読めますが、投げ銭用に有料設定にしています。

↓先日のnote↓

↓いただいた反応↓

アイディアの提供とnote公開を許可していただいた あやさん(@aya_piano_crypt)にはこの場をお借りして再度お礼申し上げます。ありがとうございました!!


そして今回は、お邪魔させていただいているZ502クローズドコミュニティサロン「VIP502」#bot&インジケーター開発部屋で話題に上がったBOTをGASで制作してみました。
各チャンネルの講師の皆様、ビッグネームすぎてビビっているのですが、スクリプトを公開することで諸先輩方にツッコミを入れていただければなと思って恐る恐る公開していますw
(Z502の関係者様方から掲載許可はいただいています)

↓VIP502はこんな感じ↓

↓こんな感じの話題でした↓


おそらく、APIで通貨ペアの変化を監視する場合、新しい通貨ペアが加わってすぐに取引ができる訳ではないと思います。(知らんけど)
そこで、今回は簡単のため新しい通貨ペアが追加された際にDiscordに通知が来るBOTを作成することとしました。



スプレッドシートを作成

さて、早速導入方法の解説に入ります。
細かいところは先日のnoteを参考にしてください。今回は前回とは異なる部分をメインに解説していきます。

ご存知の方がほとんどだと思いますが、Google スプレッドシートは一定時間間隔で自動保存されますので保存作業などは特に必要ありません。念のため。

今回はこのスプレッドシートに自動でBinanceの通貨ペアを取得、記入していきデータベースとして利用していますが、逆にスプレッドシートに入力することでスクリプトを動かすといったことも可能です。

まずはスプレッドシートの作成が必要なのでGoogle Driveの
「+ 新規」>「Google スプレッドシート」をクリック。


適当な名前をつけます。(画像の「Get Binance Pair」)
今回は使用する文字にも特に制限がないため、自分の分かりやすい名前をつけてあげてください。


「ツール」>「スクリプトエディタ」をクリック。


Google Apps Scriptの編集画面が開きます。



Google Apps Scriptを編集

今回のスクリプトはスプレッドシートの一部として保存されますので、Googleドライブを見ても下記の画像のようなスプレッドシートのデータしかありません。
Googleドライブから再度スクリプトを編集したい場合は、上述の手順と同じようにスプレッドシートを開き、「ツール」>「スクリプトエディタ」と開く必要がありますので覚えておいていただければと。

↓Googleドライブのデータ↓

↓Google Suite Developer Hubのデータ↓


スクリプトもまずは適当に名前をつけてください。
とりあえず、プロジェクト名は「GetBinancePairScript」、スクリプトファイル名は「main」としました。

ここに以下のコードを貼り付けます。

function getPair(){
  //BinanceのAPIにアクセス
  var method = 'GET';
  var url = 'https://api.binance.com/api/v1/exchangeInfo';
  var options = {
    method: method,
    headers: {
      'Content-Type': 'application/json'
    }
  };
  //送信してレスポンス取得
  var response = UrlFetchApp.fetch(url, options);
  if( response != null ){
    var obj = JSON.parse(response.getContentText());
    var sheet = SpreadsheetApp.getActiveSheet(); 
    //初回動作 スプレッドシートにペアを記録
    if(!sheet.getRange(1, 1).getValue()){ 
      Logger.log("初回動作です。")
      for(i = 1; i < obj.symbols.length; i++){
        sheet.getRange(i, 1).setValue(obj.symbols[i].symbol);
      }
    //2回目以降の動作 スプレッドシートのデータと新しく取得したデータの比較
    }else{
      Logger.log("2回目以降の動作です。")
      //スプレッドシートのデータを比較しやすいように配列化
      var data = []
      for(i = 1; i < obj.symbols.length; i++){
        data.push(sheet.getRange(i, 1).getValue())
      }
      Logger.log(obj.symbols.length);
      for(i = 1; i < obj.symbols.length; i++){
        if (data.indexOf(obj.symbols[i].symbol) == -1){
          Logger.log(obj.symbols[i].symbol + "は新しい通貨ペアです");
          //Discordに送るメッセージを作成
          var mess = "@everyone" + "\n" + "新しい通貨ペア " + obj.symbols[i].symbol + " がBinanceに追加されました"     
          discord(mess)
          //sheet.getRange(obj.symbols.length, 1).setValue(obj.symbols[i].symbol);
        } else if (data.indexOf(obj.symbols[i].symbol) != -1){
          Logger.log(obj.symbols[i].symbol + "はすでに存在します");
        }
      }
      for(i = 1; i < obj.symbols.length; i++){
        sheet.getRange(i, 1).setValue(obj.symbols[i].symbol);
      }
      Logger.log("スプレッドシートを更新しました。");
    }
  }      
}

//Discordに投稿
function discord(message) {  
  var discordUrl = 'ここにDiscord WebhookのURLを貼付';
  var payload = JSON.stringify({content: message});
  var params = {
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    method: "POST",
    payload: payload,
    muteHttpExceptions: true
  };
  var response = UrlFetchApp.fetch(discordUrl, params);
  Logger.log(response.getContentText());
}

ここについては前回の記事を参照して頂ければと思います。
一応、この記事でも簡単に触れます。

var discordUrl = 'ここにDiscord WebhookのURLを貼付';

貼り付けたらこんな感じですね。
変更後は「ファイル」>「保存」より、保存をお忘れなく。



DiscordのWebhook URLを取得

先日のnoteに詳細は書いてありますが、自分に管理者権限のあるサーバのWebhook URLを取得しましょう。

「⚙ チャンネルの編集」をクリック。

「Webhook」>「Webhookを作成」をクリック。

「名前」に任意の名前を入力し、「チャンネル」が導入先のチャンネルになっているか確認し、右下部の「Copy」をクリックしてください。

コピーしたWebhook URLは、先ほどのスクリプト部の以下の部分(ここにDiscord WebhookのURLを貼付)に貼り付けてください。

var discordUrl = 'ここにDiscord WebhookのURLを貼付';

スクリプトを変更したため、「ファイル」>「保存」をお忘れなく。




スクリプトの実行権限を取得

先日の記事と同様、ブラウザのポップアップブロックを解除して、スクリプトの実行権限を取得する必要があります。

試しにスクリプトを実行してみましょう。
下記画像の右側の赤枠内「関数を選択」をクリックし「getPair」を選択します。その後に左側の赤枠の「▶︎」をクリック。

認証についてのポップアップが出るため「許可を確認」をクリック。

アカウントの選択で問題なければ赤枠部分をクリック。

「詳細」をクリック。

「GetBinancePairScript(安全ではないページ)に移動」をクリック。

問題なければ「許可」をクリック。



スクリプトを実行(1回目)

実行権限を取得できたら、スクリプトを実行できます。

1回目の動作でスプレッドシートにBinanceの全ての通貨ペアを取得してきてくれるので、先ほどのスプレッドシートが以下の画像のようになっていると思います。

2回目以降は一見動作しているか確認しづらいですが、2回目の動作は「▶︎」を押した際に「表示」>「ログ」をクリックすれば動作が確認できます。

2回目以降の動作は以下のようになっています。



トリガーを設定

「▶︎」ボタンで動作確認できました。
次は下図の「時計マーク」をクリックしてトリガーを設定していきましょう。

下記画像右下部の「+ トリガーを追加」をクリック。

設定内容は基本的には先日のnoteと同じ内容ですが、赤枠部分だけ異なります。
右側のエラーについてはご自由に決めていただいて構いません。
イベントソースを「時間操作型」にして頂ければ、時間の間隔はご自分で決めていただいて構いません。
「保存」をクリックすればトリガー設定完了です。

以下の画像のようになっていれば設定完了です。



動作確認

トリガーの設定が完了したら、最後にスクリプトが問題なく実行されているか確認しましょう。

このスクリプトは、初めに通貨ペア一覧をスプレッドシートに保存し、その後トリガーで指定した時間間隔ごとに取引所にアクセスし最新の通貨ペア一覧を取得していきます。
スプレッドシート内に無い新たな通貨ペアが現れるとDiscordに通知を送り、スプレッドシートに最新の通貨ペア一覧を保存します。

以上のようなスクリプトなので、スプレッドシート内の通貨ペアを1つ試しに削除してみましょう。

問題なく動作していれば、以下の画像のように通貨ペアが追加され、Discordに通知が来るはずです。

Discordにはこんな感じで通知が来ます。

以上で設定と動作確認は完了です。


解説もこれで全てです。先日のnoteに引き続きGoogle Apps Scriptを使用したBOTを制作しましたが、今回はスプレッドシートとの連携でした。いかがでしたでしょうか?

コード自体は初心者の横好きで書いたものですので、詳しい方からすると「もっとうまい方法があるぞ」って言われるかもしれませんw

このnoteでGoogle Apps Scriptに興味を持たれた方、ぜひ自分のBOTを作成して頂ければと思います!

以下は有料部分になりますが、投げ銭用の有料設定なので中身は無いです!

この記事が有用だったよ!という方は購入やサポートして頂ければ幸いです。

それでは、最後までありがとうございました。


ここから先は

82字

¥ 500

期間限定 PayPay支払いすると抽選でお得に!

サポートしていただいたお金は全てがん闘病生活の資金に充てさせて頂きます。 BTC: 3679CqD4SnZtTgeMTVPjCefCMkrHu3nmjb