MQL4MQL5 EA(エキスパートアドバイザー) 通知・表示
スマホにプッシュ通知を送りたい
結論:SendNotification(文字列) を使います。MetaQuotes ID をターミナルに設定しておく必要があります。
考え方
SendNotification() を呼ぶと、スマホの MT4・MT5 アプリに通知が届きます。外出中にサインや約定を知りたいときに便利です。ここでは「ポジション数が変わったら(約定・決済したら)通知する」EA を例にしています。
- スマホの MT4・MT5 アプリの「設定」→「メッセージ」で MetaQuotes ID を確認する
- パソコンの MT4・MT5 の「ツール」→「オプション」→「通知機能」で、その ID を入力して有効にする(「テスト」ボタンで届くか確認できる)
- コードでは、知らせたいことが起きたときに SendNotification() を呼ぶ
そのまま使えるコード
MetaEditor の「新規作成」で「エキスパートアドバイザ(テンプレート)」を選び、できたファイルの中身をすべてこのコードに置き換えてコンパイル(F7)します。ファイルは Experts フォルダに保存され、ナビゲーターからチャートにドラッグして使います。
MQL4(MT4)
#property strict
// ポジション数が変わったらスマホに通知する EA(MT4)
int lastCount = -1;
int CountPositions()
{
int n = 0;
for(int i = OrdersTotal() - 1; i >= 0; i--)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderType() <= OP_SELL)
n++;
return n;
}
int OnInit()
{
lastCount = CountPositions();
return INIT_SUCCEEDED;
}
void OnTick()
{
int now = CountPositions();
if(now != lastCount)
{
string msg = StringFormat("%s ポジション数 %d → %d 有効証拠金 %.0f", _Symbol, lastCount, now, AccountEquity());
if(!SendNotification(msg))
Print("通知を送れません error=", GetLastError());
lastCount = now;
}
}MQL5(MT5)
// ポジション数が変わったらスマホに通知する EA(MT5)
int lastCount = -1;
int OnInit()
{
lastCount = PositionsTotal();
return INIT_SUCCEEDED;
}
void OnTick()
{
int now = PositionsTotal();
if(now != lastCount)
{
string msg = StringFormat("%s ポジション数 %d → %d 有効証拠金 %.0f", _Symbol, lastCount, now, AccountInfoDouble(ACCOUNT_EQUITY));
if(!SendNotification(msg))
Print("通知を送れません error=", GetLastError());
lastCount = now;
}
}MT4 版・MT5 版とも MetaEditor でコンパイル(エラー・警告なし)を確認済みです。実際の口座で使う前に、デモ口座やストラテジーテスターで動作を確かめてください。
カスタマイズのポイント
- 通知の文字は 255 文字までです。
- MT5 では OnTradeTransaction() を使うと、約定の瞬間をもっと正確にとらえられます。
注意点
- 送信回数には制限があり、短時間に何度も送ると送れなくなります(MT4 はエラー4250 など)。
- ストラテジーテスターでは通知は送られません。












