MQL4MQL5 EA(エキスパートアドバイザー) 売買サイン・相場の判定
陽線・陰線や連続陽線を判定したい
結論:終値と始値を比べ、終値 > 始値なら陽線、終値 < 始値なら陰線です。連続は確定足を順に調べます。
考え方
ローソク足の形は、始値・高値・安値・終値から計算できます。陽線・陰線は終値と始値の大小、実体の大きさは |終値 − 始値|、上ヒゲは 高値 − max(始値, 終値) です。ここでは「確定足が N 本連続で陽線(陰線)になったら知らせる」EA を例にしています。
- 確定した足(1本前)から順に、終値と始値を比べる
- 陽線が続く本数・陰線が続く本数を数える
- 指定した本数に達したら知らせる
そのまま使えるコード
MetaEditor の「新規作成」で「エキスパートアドバイザ(テンプレート)」を選び、できたファイルの中身をすべてこのコードに置き換えてコンパイル(F7)します。ファイルは Experts フォルダに保存され、ナビゲーターからチャートにドラッグして使います。
MQL4・MQL5 共通
#property strict
// 確定足が N 本連続で陽線・陰線になったらアラートを出す EA
input int InpCount = 3; // 連続する本数
datetime lastBar = 0;
// 1本前から数えて、同じ向きの足が何本続いているか(+ は陽線、- は陰線)
int CountStreak()
{
int n = 0;
for(int i = 1; i <= 50; i++)
{
double o = iOpen(_Symbol, PERIOD_CURRENT, i);
double c = iClose(_Symbol, PERIOD_CURRENT, i);
int dir = (c > o) ? 1 : (c < o ? -1 : 0);
if(dir == 0) break;
if(n == 0) n = dir;
else if((n > 0) == (dir > 0)) n += dir;
else break;
}
return n;
}
int OnInit()
{
return INIT_SUCCEEDED;
}
void OnTick()
{
datetime t = iTime(_Symbol, PERIOD_CURRENT, 0);
if(t == lastBar) return;
lastBar = t;
int streak = CountStreak();
if(streak == InpCount) Alert(_Symbol, " 陽線が ", InpCount, " 本連続しました");
if(streak == -InpCount) Alert(_Symbol, " 陰線が ", InpCount, " 本連続しました");
}MT4 版・MT5 版とも MetaEditor でコンパイル(エラー・警告なし)を確認済みです。実際の口座で使う前に、デモ口座やストラテジーテスターで動作を確かめてください。
カスタマイズのポイント
- 実体の大きさで絞り込みたいときは、MathAbs(c - o) が一定以上かどうかの条件を足します。
- 包み足・ピンバーなどの形も、4本値の大小関係を組み合わせて判定できます。












