iMA関数の引数の意味を1つずつ覚えても、実際に自分のインジケーターやEAでどう組み合わせて使えばいいのか分からない——という人向けの記事です。この記事では、iMA関数の書式の解説に加えて、実際にMetaEditorでコンパイルして確認できるサンプルコードを紹介します。
iMA関数
移動平均線とは、ある一定の期間の価格から平均値を計算して折れ線グラフで表にしたものです。
過去何日間かの価格を毎日計算するので、平均値が移動していくことから移動平均と呼ばれます。
移動平均線は、テクニカル指標の中でも代表的なもので、
価格の傾向やトレンドの流れなど方向性の手がかりになります。
iMA関数は、移動平均線の値を取得するために使用します。
移動平均線の計算式
移動平均線の計算の仕方は、当日を含めた過去の平均を出すのが一般的です。
例えば、5日移動平均線の場合は、
- 当日終値100円
- 前日終値110円
- 2日終値90円
- 3日終値70円
- 4日終値120円
であれば、98円(100円+110円+90円+70円+120円の5分の1)になります。
iMA関数の書式

iMA関数の書式について説明します。
double iMA( string symbol,// 通貨ペアを指定 int timeframe, // 時間軸を指定する(定数) int ma_period,// MAの平均期間(ローソク足の数)を指定 int ma_shift,// MAシフト(ローソク足何本分を右にずらすか指定) int ma_method,// MAの平均化メソッド(平均線の種類を指定) int applied_price,// 適用価格(終値や始値などを指定)(定数) int shift // シフト(過去の値を参照できる、ローソク足数で指定) );
iMA関数の引数の説明
iMA関数の引数の説明です。
| 型 | 項目名 | 説明 |
|---|---|---|
| string | symbol | シンボル名 |
| int | timeframe | 時間枠 |
| int | ma_period | 移動平均線の期間 |
| int | ma_shift | 移動平均線を基準からずらす期間 |
| int | ma_method | 移動平均線の計算方法 |
| int | applied_price | 適用価格(どの価格を元に計算するか) |
| int | shift | いくつ前の値を取得するか |
string symbol
symbolは移動平均線の値を計算する通貨ペア名を指定します。
通貨ペア名を指定せず、チャートの通貨ペアの移動平均線の値を取得したい場合はNULLにします。
int timeframe
timeframeは移動平均線の値を計算する時間軸を指定します。
| 種類 | 定数 | 説明 |
|---|---|---|
| PERIOD_CURRENT | 0 | 現在の時間足 |
| PERIOD_M1 | 1 | 1分足 |
| PERIOD_M5 | 5 | 5分足 |
| PERIOD_M15 | 15 | 15分足 |
| PERIOD_M30 | 30 | 30分足 |
| PERIOD_H1 | 60 | 1時間足 |
| PERIOD_H4 | 240 | 4時間足 |
| PERIOD_D1 | 1440 | 日足 |
| PERIOD_W1 | 10080 | 週足 |
| PERIOD_MN1 | 43200 | 月足 |
int ma_period
ma_periodは移動平均線の値を計算する期間を指定します。
int ma_shift
ma_shiftは移動平均線の表示を右方向にシフト(ずらす)するバーの個数を指定します。
int ma_method
ma_methodは計算する移動平均線の種類を指定します。
| 種類 | 定数 | 説明 |
|---|---|---|
| MODE_SMA | 0 | 単純移動平均線 |
| MODE_EMA | 1 | 指数移動平均線 |
| MODE_SMMA | 2 | 平滑移動平均線 |
| MODE_LWMA | 3 | 線形加重移動平均線 |
int applied_price
applied_priceは移動平均線の値の計算に使用する価格データを指定します。
| 種類 | 定数 | 説明 |
|---|---|---|
| PRICE_CLOSE | 0 | 終値 |
| PRICE_OPEN | 1 | 始値 |
| PRICE_HIGH | 2 | 高値 |
| PRICE_LOW | 3 | 安値 |
| PRICE_MEDIAN | 4 | 中央値(高値+安値)÷2 |
| PRICE_TYPICAL | 5 | 代表値(高値+安値+終値)÷3 |
| PRICE_WEIGHTED | 6 | 加重終値(高値+安値+終値+終値)÷4 |
int shift
shiftは移動平均線の値を取得したいバーの位置を指定します。
- 現在のバーであれば:0
- 1本前のバーであれば:1
- 2本前のバーであれば:2
と言う形で記述します。
実際にコンパイルして確認する
短期MA(20期間)と長期MA(100期間)を取得し、短期MAが長期MAより上にあるか下にあるかをチャートに表示するインジケーターで、iMA関数の動きを確認してみましょう。
//+------------------------------------------------------------------+
//| Ima.mq4 |
//| Copyright 2020, FX-EA System Project Creator |
//| https://creator.fx-ea-system-project.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, FX-EA System Project Creator"
#property link "https://creator.fx-ea-system-project.com/"
#property version "1.00"
#property strict
#property indicator_chart_window
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
Comment("");
}
void OnTick()
{
double ma_short = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0);//短期MA(20期間・現在値)
double ma_long = iMA(NULL, 0, 100, 0, MODE_SMA, PRICE_CLOSE, 0);//長期MA(100期間・現在値)
string trend;
if(ma_short > ma_long)
{
trend = "短期MAが長期MAより上(上昇トレンドの可能性)";
}
else
{
trend = "短期MAが長期MAより下(下降トレンドの可能性)";
}
Comment("短期MA(20): ", ma_short, "\n長期MA(100): ", ma_long, "\n判定: ", trend);
}
//+------------------------------------------------------------------+
2つのiMA()を呼び出して、それぞれ引数(期間)だけを変えているのがポイントです。symbol・timeframe・ma_shift・ma_method・applied_price・shiftは共通で、ma_periodだけ20と100で使い分けています。
まとめ
今回はiMA関数について説明しました。
よく使うテクニカル指標なので、しっかりとiMA関数を使いこなせるようになりましょう。
コメント