MQL5でスマホに通知を送る|SendNotification

MQL5でスマホにプッシュ通知を送るには、SendNotification("送りたい文")を呼びます。ただし、送れるのは255文字まで、呼べる回数は1秒に2回・1分に10回までで、ストラテジーテスターの中では送られません。

送れない時は、まずMT5の「オプション」で通知が有効になっていて、MetaQuotes IDが入っているかを確認します。GetLastError() のエラー番号を見れば、設定の問題か、送りすぎかを見分けられます。

(確認環境:MetaTrader 5 / Windows 11。関数の仕様は MQL5 公式リファレンス、画面の表記は MT5 本体に含まれる文字列、コードは MetaEditor でコンパイルできることを確認しています)

先に必要な設定

SendNotification は、MT5に登録したスマホへ通知を送る関数です。コードを書く前に、次の2つを済ませます。

  1. スマホのMT5アプリで、自分のMetaQuotes IDを確認する
  2. パソコンの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で代わりに確かめる