この記事でわかること
- Pine ScriptのアラートをDiscordに自動通知する仕組みと全体像
alert()でDiscord用JSONを組み立てる実装コード- TradingView側のWebhook設定手順と、LINEに送りたい場合の方法
「シグナルが出た瞬間にスマホへ通知してほしい。できればいつも見ているDiscordに飛ばしたい」。自作インジケーターを実戦投入する段階になると、必ず出てくる要望です。
TradingViewのWebhook機能を使えば、Pine Scriptが出したシグナルをDiscordのチャンネルへ自動で流せます。この記事では、alert()関数でDiscord用のJSONメッセージを組み立てるコードと、設定手順を解説します。
📊 この記事はTradingViewユーザー向けです
TradingViewをまだ使っていない方は、まず無料アカウントを作成してみましょう。登録は30秒、クレジットカード不要です。
無料でTradingViewを始める →通知が届くまでの全体像
Pine ScriptからDiscordに通知が届くまでは、3つの部品が連携します。
| 部品 | 役割 |
|---|---|
| Pine Script | alert()で「送る中身(JSON)」を組み立てる |
| TradingViewのアラート | 条件成立時に、その中身をWebhook URLへPOSTする |
| Discord Webhook | 受け取ったJSONをチャンネルに投稿する |
ポイントは、Pine Script側でDiscordが理解できる形(JSON)の文字列を作っておくことです。TradingViewはアラートのメッセージ本文をそのままPOSTのボディとして送るだけなので、中身をDiscordの仕様に合わせておく必要があります。
前提:Webhook通知は有料プランが必要
最初に重要な注意点です。TradingViewのWebhook通知はEssential以上の有料プランでのみ利用できます。無料プランのアラートにはWebhookの送信先を設定する項目がありません。
自作インジケーターの通知を自動化したい人にとっては、有料プランに切り替える主要な動機のひとつになります。プランごとの違いは有料プランの選び方で詳しく比較しています。
ステップ1:DiscordでWebhook URLを発行する
通知を受け取りたいDiscordチャンネルで、Webhook URLを取得します。
- チャンネルの「編集(歯車アイコン)」→「連携サービス」を開く
- 「ウェブフックを作成」をクリックし、名前を付ける
- 「ウェブフックURLをコピー」で URL を控える
このURLはパスワードと同じくらい重要です。第三者に知られると誰でもそのチャンネルに投稿できてしまうため、記事やスクリーンショットに載せないよう注意してください。
ステップ2:Pine ScriptでDiscord用JSONを組み立てる
ここが記事の核心です。alert()関数のメッセージ引数に、Discordが要求する{"content": "..."}形式のJSON文字列を渡します。
//@version=5
indicator("Webhook通知付きRSIシグナル", overlay=true)
rsiLen = input.int(14, "RSI期間", minval=2)
obLv = input.int(70, "買われすぎライン")
osLv = input.int(30, "売られすぎライン")
r = ta.rsi(close, rsiLen)
// 売られすぎから回復=買い、買われすぎから下落=売り
buySignal = ta.crossover(r, osLv)
sellSignal = ta.crossunder(r, obLv)
// Discordの content 形式に合わせてJSON文字列を組み立てる
if buySignal
msg = '{"content": "🟢 ' + syminfo.ticker +
' 買いシグナル|RSI=' + str.tostring(r, "#.##") +
'|価格=' + str.tostring(close, format.mintick) + '"}'
alert(msg, alert.freq_once_per_bar_close)
if sellSignal
msg = '{"content": "🔴 ' + syminfo.ticker +
' 売りシグナル|RSI=' + str.tostring(r, "#.##") +
'|価格=' + str.tostring(close, format.mintick) + '"}'
alert(msg, alert.freq_once_per_bar_close)
plot(r, "RSI", color=color.purple)
hline(obLv)
hline(osLv)
解説すべき点が3つあります。
alert()の第2引数alert.freq_once_per_bar_close:足が確定したタイミングで1回だけ通知します。これを付けないと、形成中の足で何度も通知が飛びます- JSONは文字列連結で作る:
syminfo.tickerやstr.tostring(r)を+でつなぎ、Discordのcontentキーに収めます - ダブルクォートに注意:JSONの
"を含めるため、Pine側の文字列はシングルクォート'で囲みます
TradingViewで実際に試してみよう
この記事の内容はTradingViewで今すぐ実践できます。無料プランでも十分対応できます。
▶ TradingViewを無料で開くクレジットカード不要・いつでも解約OK
ステップ3:TradingViewでアラートを作成しWebhookを設定する
コードをチャートに追加したら、アラートを作成します。
- チャート右側の時計アイコン(アラート)から「アラート作成」を開く
- 条件で、追加したインジケーター名と「alert() function calls only(関数呼び出しのみ)」を選ぶ
- 「通知」タブで「Webhook URL」にチェックを入れ、ステップ1のDiscord URLを貼り付ける
- 作成を押して完了
条件で「alert() function calls only」を選ぶのがポイントです。これによって、コード内のalert()が呼ばれたときだけ、その中で組み立てたJSONがWebhookに送信されます。アラート機能の基本操作はアラート機能の設定方法と活用術もあわせてご確認ください。
LINEに通知を送りたい場合
DiscordはWebhookをそのまま受け取れますが、LINEに直接送るのは現状ひと手間かかります。かつて使われていたLINE Notifyがサービス終了したため、今はMakeやZapierなどの中継サービスを挟むのが現実的です。
流れは「TradingView →(Webhook)→ 中継サービス →(LINE Messaging API)→ LINE」となります。中継サービス側でTradingViewからのWebhookを受け取り、LINEへ転送する設定を作ります。この場合、Pine Script側で組み立てるJSONは中継サービスが受け取りやすい形(例:{"message": "..."})に変えると扱いやすくなります。
こんな場合はWebhook通知は不要
- 無料プランで手軽に始めたい場合:Webhookは有料プラン限定です。まずはTradingViewアプリのプッシュ通知で十分なこともあります
- チャートを常に見ている場合:画面上のシグナル表示だけで足りるなら、通知連携まで作り込む必要はありません
- 売買を自動発注までつなげたい場合:通知ではなく発注APIとの連携が必要で、Webhookの送信先も証券会社側の仕様に合わせる別の設計になります
まとめ
- Pine Scriptの
alert()でDiscord用のJSON({"content": "..."})を組み立てるのが要点 - TradingView側は「alert() function calls only」+Webhook URLでDiscordに送信できる
- Webhookは有料プラン限定。LINE送信はMake等の中継サービスを挟む
通知させるシグナルのロジックを増やしたい場合は、ダイバージェンス検出やSMCインジケーターのコードにこのalert()を組み込むと、実戦的な通知ボットになります。Webhookを活用するなら、まずは有料プランの機能を確認しておきましょう。
TradingViewを始めるなら、まずは無料プランで試してみましょう。有料プランへのアップグレードで、Webhook通知などさらに高度な機能が使えます。
