MQL4MQL5 EA(エキスパートアドバイザー) 通知・表示
メールを送りたい
結論:SendMail(件名, 本文) を使います。事前に MT4・MT5 の「オプション」→「メール」の設定が必要です。
考え方
SendMail() を呼ぶと、ターミナルに設定した SMTP サーバーからメールが送られます。ここでは「新しい日足ができたら、前日の4本値をメールで送る」EA を例にしています。毎ティック送らないよう、日付が変わったときだけ送ります。
- MT4・MT5 の「ツール」→「オプション」→「メール」で、SMTP サーバー・ログイン・パスワード・送信先を設定し「有効にする」にチェックを入れる
- コードでは、送るタイミング(ここでは日足が変わったとき)を判定する
- SendMail(件名, 本文) を呼び、false が返ったら GetLastError() で理由をログに出す
そのまま使えるコード
MetaEditor の「新規作成」で「エキスパートアドバイザ(テンプレート)」を選び、できたファイルの中身をすべてこのコードに置き換えてコンパイル(F7)します。ファイルは Experts フォルダに保存され、ナビゲーターからチャートにドラッグして使います。
MQL4・MQL5 共通
#property strict
// 新しい日足ができたら、前日の4本値をメールで送る EA
datetime lastDay = 0;
int OnInit()
{
lastDay = iTime(_Symbol, PERIOD_D1, 0); // 起動直後は送らない
return INIT_SUCCEEDED;
}
void OnTick()
{
datetime today = iTime(_Symbol, PERIOD_D1, 0);
if(today == 0 || today == lastDay)
return;
lastDay = today;
string subject = _Symbol + " 前日のレート";
string body = "始値:" + DoubleToString(iOpen(_Symbol, PERIOD_D1, 1), _Digits) + "\r\n"
+ "高値:" + DoubleToString(iHigh(_Symbol, PERIOD_D1, 1), _Digits) + "\r\n"
+ "安値:" + DoubleToString(iLow(_Symbol, PERIOD_D1, 1), _Digits) + "\r\n"
+ "終値:" + DoubleToString(iClose(_Symbol, PERIOD_D1, 1), _Digits);
if(!SendMail(subject, body))
Print("メールを送れませんでした error=", GetLastError(), "(オプションのメール設定を確認してください)");
}MT4 版・MT5 版とも MetaEditor でコンパイル(エラー・警告なし)を確認済みです。実際の口座で使う前に、デモ口座やストラテジーテスターで動作を確かめてください。
カスタマイズのポイント
- 本文の改行は "\r\n" で入れます。
- Gmail を使う場合は、Google アカウントで「アプリ パスワード」を作り、それを SMTP のパスワード欄に入れる必要があります。
注意点
- メール設定が有効になっていないと送信できません(MT4 はエラー4061)。
- ストラテジーテスターではメールは送られません。
- 短時間に大量に送ると、メールサーバー側で止められることがあります。












