MQL4MQL5 EA(エキスパートアドバイザー) 売買サイン・相場の判定
前日の高値・安値ブレイクを判定したい
結論:iHigh(_Symbol, PERIOD_D1, 1)・iLow(_Symbol, PERIOD_D1, 1) で前日の高値・安値を取得し、現在値と比べます。
考え方
日足の shift=1 を指定すると、どの時間足のチャートからでも前日の高値・安値を取得できます。ここでは、価格が前日高値を上抜けた・前日安値を下抜けた瞬間に1日1回だけアラートを出す EA を例にしています。
- 前日の高値・安値を日足から取得する
- 前回の価格と今回の価格が、高値(安値)をまたいだかを判定する
- 同じ日に何度も知らせないよう、知らせた日付を覚えておく
そのまま使えるコード
MetaEditor の「新規作成」で「エキスパートアドバイザ(テンプレート)」を選び、できたファイルの中身をすべてこのコードに置き換えてコンパイル(F7)します。ファイルは Experts フォルダに保存され、ナビゲーターからチャートにドラッグして使います。
MQL4・MQL5 共通
#property strict
// 前日高値の上抜け・前日安値の下抜けでアラートを出す EA(1日1回ずつ)
double lastBid = 0;
datetime upDay = 0, downDay = 0; // それぞれ最後に知らせた日
int OnInit()
{
return INIT_SUCCEEDED;
}
void OnTick()
{
double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
double pHigh = iHigh(_Symbol, PERIOD_D1, 1);
double pLow = iLow(_Symbol, PERIOD_D1, 1);
datetime today = iTime(_Symbol, PERIOD_D1, 0);
if(pHigh == 0 || pLow == 0 || lastBid == 0)
{
lastBid = bid;
return;
}
if(lastBid <= pHigh && bid > pHigh && upDay != today)
{
Alert(_Symbol, " 前日高値 ", DoubleToString(pHigh, _Digits), " を上抜け");
upDay = today;
}
if(lastBid >= pLow && bid < pLow && downDay != today)
{
Alert(_Symbol, " 前日安値 ", DoubleToString(pLow, _Digits), " を下抜け");
downDay = today;
}
lastBid = bid;
}MT4 版・MT5 版とも MetaEditor でコンパイル(エラー・警告なし)を確認済みです。実際の口座で使う前に、デモ口座やストラテジーテスターで動作を確かめてください。
カスタマイズのポイント
- 週足の高値・安値にしたいときは PERIOD_D1 を PERIOD_W1 にします。
- 直近 N 本の高値・安値のブレイクにしたいときは、「直近 N 本の最高値・最安値」レシピの iHighest() を使います。
注意点
- 日足の区切りはサーバー時刻で決まります。日本時間の 0 時ではありません。












