「移動平均線の上向き・下向きを MT4のEAでどう判定すればいいのか分からない」 そんな悩みを持ったことはありませんか?
本記事では、MT4の iMA() 関数で取得できる移動平均線“値” を使い、 移動平均線の上向き・下向きを 数値として判定する方法 を 初心者にも分かる形で解説します。
本記事は、移動平均線EAにおける 「上向き・下向き(傾きの基礎)」 に特化した解説記事です。
移動平均線を使ったEAロジック全体像(上抜け・傾き・クロス判定)については、
以下の記事で体系的に整理しています。
▶ 移動平均線を使ったEA作成方法|上抜け・傾き・クロス判定の実装を解説
MT4で移動平均線の値を取得する方法(iMA関数)
iMA()
【使用例】 double dMA_atai = iMA(NULL, 0, 21, 0, MODE_SMA, PRICE_CLOSE, 1);
まず絶対に必要となる関数ですが、移動平均線の値を取得するiMA()関数を使います。
iMA()の引数の意味
引数の内容は以下の通りです。
- 引数1・・・通貨ペアです(NULLでチャートの通貨になります)
- 引数2・・・時間軸です(0でチャートの時間軸になります)
- 引数3・・・期間です(20で20移動平均線、25で25移動平均線になります)
- 引数4・・・表示移動です
- 引数5・・・移動平均の種別です(MODE_SMAで単純移動平均線)
- 引数6・・・適用価格です(PRICE_CLOSEでクローズ値)
- 引数7・・・バーシフトです(0で現在の値、1で1つ前ーのバーの時の値です)
基本的に、3,5,7ぐらいしか触らなさそうな設定です。
3:期間、5:移動平均線の種別はMT4の移動平均線設定画面上で見るとイメージしやすいです。

期間は、何日(20日)移動平均線とかのあの数値です。
移動平均線の種別は、以下4種類です。
- 単純移動平均線:MODE_SMA
- 指数移動平均線:MODE_EMA
- 平滑移動平均線:MODE_SMMA
- 線形加重移動平均線:MODE_LWMA
7:バーシフトは過去の移動平均線値をとりたい場合変更します
バーシフトとは何か?
バーシフトが0の場合は最新のローソク足上の移動平均線値を取得します。バーシフトが1の場合は1つ前のローソク足上、バーシフトが2の場合は2つ前のローソク足上という感じです。

移動平均線値はローソク足が確定した時点で同時に確定するので、バーシフトが0の最新の移動平均線値は値動きがある度に上下することになります。
したがって、今回はバーシフト1と2の移動平均線値を使って移動平均線の上向き下向きを判定します。
そもそも、移動平均線の「値」とは何か?
そもそも移動平均線値って何かわかりますか?iMA()関数で取得できる値ですがどんな値が取得できるのかを理解しているとプログラムを作って行くうえでとても便利です。
MT4上で確認できる移動平均線の値
まず下のイメージを見てください。

MT4上の移動平均線の上にマウスカーソルを合わせると右下の四角(Moving Aberage(21)・・・)が出てきます。
※普通四角の部分は1つしか出ませんが、わかりやすいように2つ並びに編集しています
これのValueの箇所を見てほしいんですが、2のところは130.045となっており1の方は103.049となっています。この値が移動平均線の値となります。このように移動平均線値はローソク足単位で計算されており、この値を線で結んでいく事で私たちがよく見ている移動平均線になるという感じです。
では、この移動平均線値を見て行けば移動平均線の上向きと下向きを判定できそうですよね。実際にプログラムでどうやって書けば移動平均線値を取得する事ができるのでしょうか?
そう、先ほど説明したiMA()関数を使えば取得できます。実際に書くとこんな感じです。
130.045 = iMA(NULL, 0, 21, 0, MODE_SMA, PRICE_CLOSE, 2);
130.049 = iMA(NULL, 0, 21, 0, MODE_SMA, PRICE_CLOSE, 1);
最後のバーシフトを2と1にするのがポイントです。
移動平均線値で上向き、下向きを判断する
上記の内容から、移動平均線値で上向き、下向きを判断していきます。
上向きと判断する条件
先ほどの例でいくとこの状態であれば移動平均線は上向きであることがわかります。

130.045 = iMA(NULL, 0, 21, 0, MODE_SMA, PRICE_CLOSE, 2);
130.049 = iMA(NULL, 0, 21, 0, MODE_SMA, PRICE_CLOSE, 1);
イメージ図のように2つ前の移動平均線値より、1つ前の移動平均線値が高い場合は上向きとなります。
下向きと判断する条件
次は移動平均線が下向きの例です。

130.007 = iMA(NULL, 0, 21, 0, MODE_SMA, PRICE_CLOSE, 2);
129.985 = iMA(NULL, 0, 21, 0, MODE_SMA, PRICE_CLOSE, 1);
2つ前の移動平均線値より、1つ前の移動平均線値が低い場合は下向きとなります。
この内容がわかれば、あとはソースコードで移動平均線の上下判定をするのは容易になってきます。
移動平均線の上向き・下向きを判定するEAサンプルコード
double MA_ATAI_2 = iMA(NULL, 0, 21, 0, MODE_SMA, PRICE_CLOSE, 2); //移動平均線で2つ前の値を取得
double MA_ATAI_1 = iMA(NULL, 0, 21, 0, MODE_SMA, PRICE_CLOSE, 1); //移動平均線で1つ前の値を取得
//移動平均線の傾きが上向きの場合
if(MA_ATAI_2 < MA_ATAI_1){
//上向きの処理を書く
}
else if(MA_ATAI_2 > MA_ATAI_1){
//下向きの処理を書く
}まず、iMA()関数でバーシフト2とバーシフト1の値をMA_ATAI変数にセットしています。その後は、if文でセットした値の大きさを比較しているだけとなります。
上記の説明を全てまとめた『移動平均線値で上向き、下向きを判断する』という内容はこのソースコードで網羅できます。
文章で書くと長いですが、プログラムで書くとあっさりですね(*’▽’)
さいごに
以上が、『移動平均線の上向き、下向きを判定してEAに組み込みたい』の内容となります。
漠然と頭でイメージすると、私もどうやって実現するのか?って分からない事がよくあるんですが数値として(移動平均線を)しっかりイメージできるとどうやれば実現できるかというのが見えてきやすくなります。
今回解説した「上向き・下向き判定」は、 移動平均線EAロジックの中でも 最も基本となる考え方 です。
この考え方をベースに、 ・上抜け判定 ・クロス判定 ・傾き(角度)の数値化 まで含めた全体設計を整理したい方は、以下の記事も参考にしてください。
▶ 移動平均線を使ったEA作成方法|上抜け・傾き・クロス判定の実装を解説
✅ 今回のロジックをベースにしたEAサンプルも多数公開中
今回紹介したようなEAの売買ロジック・考え方をベースに、
当サイトではさまざまなFX自動売買EAのサンプルコードを公開しています。
ロジックの違いや設計の考え方を比較しながら、
自分に合ったEA構成を探したい方はぜひチェックしてみてください。
📊 EA運用・検証フェーズに進みたい方へ
今回のような仕組みを理解したうえで、
「実際にどのEAが安定しているのか」、「検証データではどんな差が出ているのか」
を確認したい方は、以下の記事も参考になります。
EA開発初心者向けに、今後も実践的に使えるMQL4関数や実装例を紹介していきます。
気になる機能やロジックがあれば、用途別に整理した関連記事もぜひあわせてご覧ください。









コメント