MQL5でスマホに通知を送る|SendNotification
MQL5でスマホにプッシュ通知を送るには、SendNotification("送りたい文")を呼びます。ただし、送れるのは255文字まで、呼べる回数は1秒に2回・1分に10回までで、ストラテジーテスターの中では送られません。
送れない時は、まずMT5の「オプション」で通知が有効になっていて、MetaQuotes IDが入っているかを確認します。GetLastError() のエラー番号を見れば、設定の問題か、送りすぎかを見分けられます。
(確認環境:MetaTrader 5 / Windows 11。関数の仕様は MQL5 公式リファレンス、画面の表記は MT5 本体に含まれる文字列、コードは MetaEditor でコンパイルできることを確認しています)
先に必要な設定
SendNotification は、MT5に登録したスマホへ通知を送る関数です。コードを書く前に、次の2つを済ませます。
- スマホのMT5アプリで、自分のMetaQuotes IDを確認する
- パソコンのMT5で「ツール」→「オプション」→「通知」タブを開き、「プッシュ通知機能を有効にする」にチェックを入れ、MetaQuotes IDを入れる
手順の詳細はMT5のアラートとスマホ通知の設定にあります。オプションの画面で「テスト」を押して通知が届けば、設定は合っています。
最小のコード
void NotifyOnce(const string text)
{
// 255文字を超えると送れないため、先に切り詰める
string msg = StringSubstr(text, 0, 255);
ResetLastError();
if(!SendNotification(msg))
Print("通知を送れませんでした。エラー: ", GetLastError());
}
戻り値が true なら、MT5から送信できています。false なら、次の章のエラー番号を見ます。
送れない時のエラー番号
| 番号 | 名前 | 主な原因 |
|---|---|---|
| 4515 | ERR_NOTIFICATION_SEND_FAILED | 送信に失敗した(通信など) |
| 4516 | ERR_NOTIFICATION_WRONG_PARAMETER | 文が正しくない(空・長すぎる) |
| 4517 | ERR_NOTIFICATION_WRONG_SETTINGS | オプションで通知が無効、またはMetaQuotes IDが無い |
| 4518 | ERR_NOTIFICATION_TOO_FREQUENT | 呼ぶ回数が多すぎる |
(番号と名前は MQL5 公式リファレンスの SendNotification のページより)
回数の制限:1秒に2回・1分に10回
公式リファレンスには「呼び出しは毎秒2以下と毎分10以下に限られています」とあり、使い方は動的に監視されていて、違反すると機能が無効になることがあると書かれています。
よくある失敗は、OnTick の中で条件を満たしている間ずっと SendNotification を呼んでしまうことです。ティックは1秒に何回も来るので、すぐ制限を超えます。1つの出来事につき1回だけ送るように、送った時刻や送った足を覚えておきます。
datetime g_lastBar = 0; // 最後に通知した足の時刻
void OnTick()
{
datetime bar = iTime(_Symbol, PERIOD_CURRENT, 0);
if(bar == g_lastBar)
return; // この足ではもう通知した
if(SignalOccurred()) // 通知したい条件(自分で作る)
{
NotifyOnce(_Symbol + " で条件が成立しました");
g_lastBar = bar;
}
}
一定時間ごとに状態を確かめて通知するなら、OnTick ではなくタイマー(OnTimer)を使う方法もあります。MQL5で一定時間ごとに処理する方法で説明しています。
テスターでは送られない
公式リファレンスには、SendNotification はストラテジーテスター内では使用できないとあります。Alert・SendMail なども同じです。テスターで通知の部分を確かめたい時は、Print で同じ文を出しておき、操作ログで確認します。ログの場所はMQL5のPrintとログの保存場所にあります。
テスターで動かした結果と本番の動きの違いはMT5ストラテジーテスターのモデルの選び方でもまとめています。
Alert・SendMail との使い分け
| 関数 | 届く場所 | 向いている使い方 |
|---|---|---|
| Alert | MT5の画面(音とウインドウ) | パソコンの前にいる時 |
| SendNotification | スマホのMT5アプリ | 離れている時に、短い文で知らせる |
| SendMail | メール(オプションのメール設定が必要) | 長い文や記録を残したい時 |
通知は「気づける時」にしか役に立ちません。寝ている間や仕事中に届いても対応できないので、通知の代わりに、決めた条件で自動的に決済させる方が確実な場面もあります。当サイトのTimerClose_EA(¥1,500)は、手動のポジションを指定した秒数で決済するEAです。
まとめ
- オプションの「プッシュ通知機能を有効にする」とMetaQuotes IDを先に設定する
- 文は255文字まで。1秒に2回・1分に10回を超えると、機能が無効になることがある
- OnTickで呼び続けない。1つの出来事につき1回だけ送る
- テスターでは送られない。Printで代わりに確かめる


