既刊の記事群では、SendMail()でメールを送る方法や、

WebRequest()を使ってLINE NotifyへHTTPリクエストを、

直接送る通知EAの作り方を解説しました。

この記事では、Pine Scriptのalert()/alertcondition()が、

同じ「通知」をどう実現するのか、MQL4版との違いを対比します。

この記事で分かること
・既刊SendMail/LINE通知のおさらい
・alert()/alertcondition()のシグネチャ
・コードは「トリガー」だけ、配信先はUIダイアログで決める設計
・Pine Scriptで動くサンプルコード

既刊SendMail/LINE通知のおさらい

まず、MQL4側の2つの通知方法を振り返ります。

SendMail()での通知

SendMail()は、MT4端末側に設定したSMTPサーバーを使い、

件名と本文を指定してメールを送る関数でした。

WebRequest()でLINE Notifyへ送る設計

既刊line-ea.mdでは、WebRequest()を使い、

LINE NotifyのAPIへ直接HTTPのPOSTリクエストを、

EAのコードの中から組み立てて送信していました。

どちらも配信先の実装がコードの中にある

補足
・SendMail()もWebRequest()も、送信先の設定や組み立てをコードが担う
・MT4側でSMTP設定やURLの許可リスト登録が必要
・通知の「内容」と「届け方」が1つのコードに混ざっている

alert()とalertcondition()のシグネチャ

次に、Pine Script側の2つの関数を確認します。

alertcondition(condition, title, message)

alertcondition(condition, title, message)

conditionがtrueになった瞬間、

titleとmessageを使ったアラートを発生させます。

alert(message, freq)

alert(message, freq)

messageは固定文字列ではなく、

series string(計算中の値を含む文字列)を渡せます。

freq引数の3つの値

補足
・alert.freq_all: 条件を満たすたびに毎回発生
・alert.freq_once_per_bar: 1本のバーで最初の1回だけ
・alert.freq_once_per_bar_close: バーが確定した時だけ

最大の違い: コードは「トリガー」だけ

MQL4ユーザーが驚くポイント
・コードが作るのは「いつ・何を通知するか」のトリガーだけ
・配信先(メール・Webhook等)は、TradingViewのUI側で設定する
・MQLのWebRequestのような送信コードは一切書かなくてよい

配信先はUIダイアログで決める

TradingViewの「アラートを作成」ダイアログで、

ポップアップ・メール・Webhook URL等の配信先を選びます。

Webhook URLでLINE Notify等にも飛ばせる

ダイアログのWebhook URL欄に、LINE Notify等の、

中継先のURLを設定すれば、コード側は何も変えずに届け先を増やせます。

コードと配信先が分離している利点

既刊line-ea.mdのように、配信先を変えるたびにコードを直す必要がなく、

ダイアログの設定を変えるだけで配信先を切り替えられます。

alertcondition()とalert()の使い分け

2つの関数は、使える場面と柔軟さが違います。

alertconditionはインジケーター専用

alertcondition()は、strategyスクリプトでは使えず、

indicatorスクリプトでのみ使える関数です。

alertはstrategyでも使える

alert()は、indicator・strategyの両方で使え、

messageに計算中の値を埋め込める分、柔軟性が高くなります。

迷ったらalert()を使う

alertcondition()は列の先頭(条件分岐の外)に書く必要があるなど、

書き方の制約もあるため、迷った場合はalert()を使う方が扱いやすいです。

MQLとPine Scriptのコード比較

「価格が一定値を超えたら通知する」という同じ目的のコードを比較します。

MQL4版: WebRequestで直接送る

if(Bid > 150.0 && !alreadySent)
  {
   string url = "https://notify-api.line.me/api/notify";
   string headers = "Authorization: Bearer " + LineToken;
   // WebRequest()でPOSTを組み立てて送信する処理が続く
   alreadySent = true;
  }

Pine Script版: トリガーだけ作る

alertcondition(close > 150.0, title = "価格アラート",
     message = "価格が150.0を超えました")

送信先のURLやヘッダーをコードに書く必要はありません。

実際に動くPine Scriptのサンプルコード

終値が移動平均を上抜けたら、動的メッセージで通知するサンプルです。

//@version=6
indicator("Alert Sample", overlay = true)

maLength = input.int(20, title = "移動平均期間")
ma = ta.sma(close, maLength)

crossUp = ta.crossover(close, ma)

plot(ma, title = "MA", color = color.blue)

if crossUp
    alert("終値がMA(" + str.tostring(maLength) + ")を上抜け。価格: "
         + str.tostring(close), alert.freq_once_per_bar_close)

alert()のmessageにmaLengthやcloseの値を埋め込んでいる点が、

静的メッセージしか使えないalertcondition()との違いです。

TradingViewでアラートを作成する手順

  1. チャートに追加したスクリプトを選び、右クリックで「アラートを追加」を開く
  2. 条件にスクリプト名を選び、通知方法(ポップアップ・メール・Webhook URL等)を選ぶ
  3. Webhook URLにLINE Notify等の中継先を設定する場合はここに入力する
  4. 「作成」をクリックし、条件を満たした時に通知が届くことを確認する

よくあるエラーと注意点

実装でつまずきやすいポイントをまとめます。

alertcondition()をif文の中に書く

注意
・alertcondition()は、列の先頭で無条件に1回だけ呼ぶ必要がある
・if文の中に入れるとコンパイルエラーになる
・条件分岐はconditionの引数の中に書く

alert()のfreqを指定し忘れる

freqを省略すると、デフォルトのalert.freq_once_per_barになり、

想定より通知が多く届くことがあります。

アラートを作成しないと何も届かない

alert()/alertcondition()はトリガーを作るだけで、

TradingView側で「アラートを作成」しないと、通知自体は発生しません。

よくある質問

alert()/alertcondition()について、よく検索される疑問に回答します。

実践アドバイス
・動的な数値を通知文に入れたい場合は、必ずalert()を使う
・LINEへ飛ばす場合も、コード側の変更は不要でダイアログ側だけで済む
・既刊SendMail/line-eaのコードはPine Script移行時は不要になる

既刊SendMail()相当のメール通知はできますか?

できます。

アラート作成ダイアログの通知方法で「メール」を選ぶだけで、

既刊SendMail()のようなSMTP設定をコードに書く必要はありません。

既刊LINE Notify相当の通知はできますか?

できます。

Webhook URLの欄に、

LINE Notify(または中継サービス)のURLを設定すれば、

既刊WebRequest()のようなコードなしで同じ通知を実現できます。

strategyスクリプトでもalertconditionは使えますか?

使えません。

alertcondition()はindicatorスクリプト専用の関数のため、

strategyスクリプトでは代わりにalert()を使います。

【Pine Script入門】alert()/alertcondition()の使い方をMQLユーザー向けに解説してみた(SendMail/LINE通知との比較):まとめ

Pine Scriptのalert()/alertcondition()は、

既刊SendMail()・WebRequest()とは違い、

コードが作るのは通知の「トリガー」だけです。

配信先(メール・Webhook等)は、

TradingViewのUIダイアログ側で設定するため、

MQL4のようにメール送信やHTTPリクエストの組み立てを、

コードの中に書く必要がありません。

関連記事