スクリーンショット_2019-02-04_22_11_25

GASを使ってTradingViewアラートを【無料で】Discordに投稿するBOTを作る

前置き

こんにちは。たんさん(@tansancrypto)です。

先日あやさん(@aya_piano_crypt)に、TradingViewのアラートをDiscordで受け取りたいと相談を受けました。

何かいい方法は無いかと考えていたところ、Gmail経由でGoogle Apps ScriptとDiscord Webhookを使用すれば無料でBOT化できるなと気付き、それっぽい記事はないか探したところ見当たらなかったため作ってみました。

今回のスクリプトはすごくシンプルなのですが、API経由でbitflyerやBitMEXに注文を出せばスキャボット化もできるし、今後の拡張性もあることを考えると、導入方法の説明記事があってもいいなと思い今回noteにまとめました。

今回のスクリプトは、独自のインジケーターをTradingViewで作成していて、そのアラートだけをDiscordグループで共有したいサーバ主さんなんかにお勧めです。
(TradingView プレミアム会員の方は無限にアラート設定可能なので…おっっとこれ以上はやめておきます)

例のごとく、このnoteも最後まで無料で読めます。
有料部は何も書いていない投げ銭用なので「有用だったよ!」って方だけ購入して頂ければと思います。


準備するもの

・新しいGoogleアカウント(推奨)
・OS標準搭載のブラウザもしくはGoogle Chrome

↓TradingViewの有料登録はこちらから(アフィリエイトリンクです)



TradingViewの登録メールアドレスを今回使用するGmaiのアドレスにする

以下の画像のEメールの箇所に今回使用するGmailアドレスを記入してください。

(Eメールの他にもSMS欄を使用することも可能ですが、アラートが少し不便になります ※詳しくは後述)



今回使用するGoogleアカウントのGoogle Driveを表示

左端の「+ 新規」>「その他」>「Google Apps Script」をクリック。

Google Apps Scriptの表示がない場合は「+ 新規」>「その他」>「+ アプリの追加」をクリック。

Google Apps Script を検索しEnterキーを押すと候補に出てくるため「+ 接続」をクリック。



GASの編集画面を表示しスクリプトを記入

Google Apps Script編集画面↓

以下のコードを貼り付けて「ファイル」>「保存」でプロジェクト名を保存 してください。(今回の場合は下の画像の左上部の「ava」。なんでもOKです)

//メールの件名に「TradingViewアラート」が含まれているものを検索
var FindSubject = 'subject:(TradingViewアラート) ';
function getMail(){
 var myThreads = GmailApp.search(FindSubject, 0, 10); 
 var myMessages = GmailApp.getMessagesForThreads(myThreads);
 for(var i in myMessages){
   for(var j in myMessages[i]){
     if(!myMessages[i][j].isStarred()){ 
       var strMessage = myMessages[i][j].getPlainBody().slice(0,200);
       //Discordに接続
       discord(strMessage);
       //使用済のアラートを再度拾ってこないように処理
       myMessages[i][j].star();
       myMessages[i][j].moveToTrash();
     }
   }
 }
}

//Discordの処理
function discord(message) {  
  var discordUrl = 'ここにDiscordのWebhookを記入';
  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());
}

この部分

//メールの件名に「TradingViewアラート」が含まれているものを検索
var FindSubject = 'subject:(TradingViewアラート) ';

と、この部分については後述します。

var discordUrl = 'ここにDiscordのWebhookを記入';


下の画像の左側「コード.gs(画像ではmain.gs)」の右にある「▼」をクリックして適当な名前に変更(画像では「main」としています)。
(※コード上部のタブに赤色アスタリスクが表示されていると(画像では「* main.gs」)、編集したコードが保存されていない状態なので注意)



入力したスクリプトの実行時間間隔を設定

先ほど保存したスクリプトはそのままでは動きません。
これを動かすためにトリガーの設定を行う必要があります。

時計マークをクリック。

左下の「+ トリガーを追加」をクリック。

以下のように設定してください。これにより、先ほどのスクリプトを1分間隔で実行します。
(右側のエラー通知設定は好きなものに変更してOKです)

「保存」をクリックすると、ポップアップが表示されます。

ポップアップはブラウザの設定によっては表示されず先に進めない場合があるため、「保存」ボタンを押して何も反応がない場合は他のブラウザに変えて再度試すことをお勧めします
私の場合、VivaldiというChromeベースのブラウザで試しましたがダメでした。その後Safariで試したところ問題なく先に進めました。(画像はSafariのものです。上部赤丸をクリックするとポップアップが表示されます)

それでもポップアップが表示されなかった方はポップアップブロックの設定を変更した方がいいので、「お使いのブラウザ名 ポップアップブロック」でググってください。
Safariの場合だとこんなページがあります。



トリガーの使用を許可する

画像のようなポップアップが表示されたら、黒塗り部に現在のGoogleアカウントが表示されるため、TradingViewに設定しているEメールアドレスと同じアカウントであればクリック。

次のページが表示されたら、左下の「詳細」をクリック。

プルダウンが表示されるので、「無題のプロジェクト (安全ではないページ)に移動」をクリック。

次のページが開くので下部の「許可」をクリック。

このように表示されたら認証(許可)の完了です。ポップアップを消していただいて構いません。

ページを再読み込みして以下の画像のようになっていればOKです。



DiscordのWebhook URLを取得

自分に管理者権限のあるDiscordサーバにて、BOTを稼働させたいチャンネルの「⚙ (チャンネルの編集)」をクリック。

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

任意の名前を入力。チャンネルが目的のチャンネルになっているかを確認し、「WEBHOOK URL」の「Copy」をクリック。
(ここでコピーしたURLをGoogle Apps Scriptに貼り付けます)
問題なければ「保存」をクリック。



GoogleAppsScriptにDiscordWebhookURLを貼り付け

Google Apps Scriptに戻り、以下のコードの「ここにDiscordのWebhookを記入」に先ほどコピーしたWebhook URLを貼り付けると上記画像のようになります。忘れずに「ファイル」>「保存」より変更を保存してください。

var discordUrl = ‘ここにDiscordのWebhookを記入';

下の画像のようになればOKです。


以上で設定は全て終わりです。
最後に注意事項なのですが、「 ‘ 」(アポストロフィ)はシステム上色々とややこしくなるため、Pineスクリプトのアラートではなるべく使用は控えてください。

以下に、TradingView側のアラート例を記載します。

//@version=3
study(title="MA Cross", overlay=true)
short   = sma(close, 9)
long    = sma(close, 21)
plot(short, color = red)
plot(long,  color = green)
plot(cross(short, long) ? short : na, style = cross, linewidth = 4)
alertcondition(cross(short, long), title="MA Cross Signal", message="My TradingView Signal")

最後の行のalertconditionがポイントで、特にmessage=""に今回の場合は先に挙げた「My TradingView Signal」を記入する必要があります。

今回作成したGoogle Apps Scriptは、事前に設定した件名と一致するメールに対して動作します。

TradingViewでアラートを設定する際の「メッセージ」部分がGmailに送られるメールの件名になります。

上記のmessageは基本的にはなんでもいいのですが、Pineスクリプトのalertconditionを事前に該当の件名にしておけば、アラートを設定する度にメッセージ部分にmessageの内容が記載されるため、メッセージを毎度書き換える必要がないわけです。



動作確認

下記画像の中央上部のアラート追加マーク、もしくは右側のアラートマークをクリック後「+」をクリックすればアラートを追加できます。

(銘柄は何でもいいですが)以下のようにアラートを設定し、動作確認します。
「保存」をクリックするとすぐアラートが発動します。
数秒後にGmailにメールが届き、1分以内にGoogle Apps Scriptが作動し、該当メールにスターをつけ削除しますので、メールがゴミ箱に該当メールが入っていればGoogle Apps Scriptは問題なく作動していることになります。

Discordの該当チャンネルに以下のようなアラートが届いていればOKです。
本説明の最上部に記載している画像(TradingViewの設定)の「Eメール」部分に今回設定したGmailアカウントを使用する場合は銘柄も記載されます。

一方で、TradingViewはEメールの他にSMSも設定できますが、こちらに今回設定したGmailアカウントを使用する場合は以下のようなアラートになります。
SMSを使用する場合はアラートを設定する際に「EメールをSMSに変換するサービスを利用」にチェックを入れてください。


Discordでの動作が確認できたら、あとは自分の望むアラートを設定すればOKです。
その際、アラートの設定は「バーの終値毎に一回」(もしくは「バーにつき一回」)に設定することをお勧めします。
「Eメールを送付」にチェックを入れることと、メッセージに該当文字列を含んでいることを忘れず確認してください。

先程挙げたPineスクリプトの場合は以下のような設定になります。



動作しない場合

・Gmailにメールがこない場合

[アラート設定]もしくは[TradingViewアカウントの設定]に問題があります

・Gmailに届いたメールが数分待ってもゴミ箱行きになっていない場合

[トリガーの追加]に問題がある可能性があるため、トリガーを削除し、時計マークより再度設定を行ってください。
[Google Apps Script]の問題の可能性もあるため、(アポストロフィなど)コードに不備がない確認してください。

・ゴミ箱行きまで確認できたが数分待ってもDiscordにメッセージが届かない場合

一度、メールボックス内にそれまでのエラーで溜まった該当メールが多数ある場合は該当メールを全て削除後ゴミ箱を空にし、
トリガーも一度削除した上で再度時計マークよりトリガーの設定を行ってください。
[Discord Webhook]に不備がないか確認してください。


以上です。

もし有用でしたら投げ銭として購入して頂ければとても嬉しいです!


ここから先は

82字

¥ 500

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