エンベロープ(Envelopes)は移動平均線の上下に一定割合のバンドを描くインジケーターです。価格がバンドを超えたときの反転狙い、またはバンドを突破したときのトレンドフォローなど、さまざまな手法で活用されます。
MQL4では iEnvelopes() 関数を使ってエンベロープの値を取得できます。
iEnvelopes() の構文
double iEnvelopes(
string symbol, // 通貨ペア(NULLで現在のチャート)
int timeframe, // 時間足(0で現在の時間足)
int ma_period, // 移動平均の期間
int ma_method, // 移動平均の種類
int ma_shift, // 移動平均のシフト
int applied_price,// 適用価格
double deviation, // 偏差(%)
int mode, // バンドの種類(上・下)
int shift // 何本前のバーか(0=現在)
);
引数の詳細
| 引数 | 説明 | よく使う値 |
|---|---|---|
| symbol | 通貨ペア | NULL(現在のチャート) |
| timeframe | 時間足 | 0(現在の時間足) |
| ma_period | 移動平均の期間 | 20〜50 |
| ma_method | 移動平均の種類 | MODE_SMA / MODE_EMA |
| ma_shift | MAのシフト | 0(通常) |
| applied_price | 適用価格 | PRICE_CLOSE |
| deviation | バンドの偏差(%) | 0.1〜0.5 |
| mode | 上下バンドの指定 | MODE_UPPER / MODE_LOWER |
| shift | 何本前のバーか | 0(現在)/ 1(1本前) |
mode の値
| 定数 | 値 | 説明 |
|---|---|---|
| MODE_UPPER | 1 | 上バンド(移動平均 + 偏差%) |
| MODE_LOWER | 2 | 下バンド(移動平均 – 偏差%) |
基本的な使い方
// 20期間SMA、偏差0.2%のエンベロープを取得する
double upperBand = iEnvelopes(NULL, 0, 20, MODE_SMA, 0, PRICE_CLOSE, 0.2, MODE_UPPER, 0);
double lowerBand = iEnvelopes(NULL, 0, 20, MODE_SMA, 0, PRICE_CLOSE, 0.2, MODE_LOWER, 0);
Print("上バンド: ", upperBand);
Print("下バンド: ", lowerBand);
実践例1:エンベロープのブレイクアウトでエントリー
価格が上バンドを上抜けたら買い、下バンドを下抜けたら売りのシグナルとして使う例です。
extern int MagicNumber = 11001;
extern double Lots = 0.1;
extern int MA_Period = 20;
extern double Deviation = 0.2; // バンド幅(%)
//+------------------------------------------------------------------+
//| エンベロープ ブレイクアウトEA |
//+------------------------------------------------------------------+
void OnTick()
{
// すでにポジションがある場合はスキップ
if(OrdersTotal() > 0) return;
double upperBand = iEnvelopes(NULL, 0, MA_Period, MODE_SMA, 0, PRICE_CLOSE, Deviation, MODE_UPPER, 1);
double lowerBand = iEnvelopes(NULL, 0, MA_Period, MODE_SMA, 0, PRICE_CLOSE, Deviation, MODE_LOWER, 1);
double prevClose = iClose(NULL, 0, 2); // 2本前の終値
double lastClose = iClose(NULL, 0, 1); // 1本前の終値
// 上バンドを上抜け → 買いエントリー
if(prevClose < upperBand && lastClose > upperBand)
{
OrderSend(Symbol(), OP_BUY, Lots, Ask, 20, 0, 0,
"Envelope Breakout", MagicNumber, 0, clrBlue);
}
// 下バンドを下抜け → 売りエントリー
if(prevClose > lowerBand && lastClose < lowerBand)
{
OrderSend(Symbol(), OP_SELL, Lots, Bid, 20, 0, 0,
"Envelope Breakout", MagicNumber, 0, clrRed);
}
}
実践例2:エンベロープをトレンドフィルターとして使う
価格が上バンドより上にある=上昇トレンドと判断し、他のシグナルと組み合わせるフィルターとして活用する例です。
// トレンドフィルター関数
// 戻り値: 1=上昇トレンド / -1=下降トレンド / 0=レンジ
int GetTrend()
{
double upperBand = iEnvelopes(NULL, 0, 20, MODE_SMA, 0, PRICE_CLOSE, 0.2, MODE_UPPER, 1);
double lowerBand = iEnvelopes(NULL, 0, 20, MODE_SMA, 0, PRICE_CLOSE, 0.2, MODE_LOWER, 1);
double lastClose = iClose(NULL, 0, 1);
if(lastClose > upperBand) return 1; // 上昇トレンド
if(lastClose < lowerBand) return -1; // 下降トレンド
return 0; // レンジ(バンド内)
}
void OnTick()
{
int trend = GetTrend();
if(trend == 1)
Comment("トレンド: 上昇(買いシグナルのみ有効)");
else if(trend == -1)
Comment("トレンド: 下降(売りシグナルのみ有効)");
else
Comment("トレンド: レンジ(様子見)");
}
実践例3:反転狙い(逆張り)
価格がバンドに触れたら反転を狙う逆張り戦略です。
extern int MagicNumber = 11002;
extern double Lots = 0.1;
extern int MA_Period = 30;
extern double Deviation = 0.3;
void OnTick()
{
if(OrdersTotal() > 0) return;
double upperBand = iEnvelopes(NULL, 0, MA_Period, MODE_EMA, 0, PRICE_CLOSE, Deviation, MODE_UPPER, 1);
double lowerBand = iEnvelopes(NULL, 0, MA_Period, MODE_EMA, 0, PRICE_CLOSE, Deviation, MODE_LOWER, 1);
double high1 = iHigh(NULL, 0, 1);
double low1 = iLow(NULL, 0, 1);
// 上バンドに高値が触れた → 売り(反転狙い)
if(high1 >= upperBand)
{
OrderSend(Symbol(), OP_SELL, Lots, Bid, 20, 0, 0,
"Envelope Mean Reversion", MagicNumber, 0, clrRed);
}
// 下バンドに安値が触れた → 買い(反転狙い)
if(low1 <= lowerBand)
{
OrderSend(Symbol(), OP_BUY, Lots, Ask, 20, 0, 0,
"Envelope Mean Reversion", MagicNumber, 0, clrBlue);
}
}
偏差(deviation)の目安
| 通貨ペア | 推奨偏差 | 補足 |
|---|---|---|
| USDJPY | 0.1〜0.3% | ボラティリティが低め |
| EURUSD | 0.1〜0.2% | 標準的な設定 |
| GBPJPY | 0.3〜0.5% | ボラティリティが高め |
偏差が小さすぎるとノイズが多くなり、大きすぎるとシグナルが少なくなります。バックテストで最適な値を見つけましょう。
まとめ
iEnvelopes()は移動平均の上下にバンドを描くインジケーター関数- MODE_UPPER で上バンド、MODE_LOWER で下バンドの値を取得
- ブレイクアウト(トレンドフォロー)と反転狙い(逆張り)の両方に応用できる
deviationパラメーターはバックテストで通貨ペアに合わせて調整する

