【MQL4勉強プログラミング】EAやインジケーターの開発で自由に作成した配列を平均化する方法!

iMAOnArray()関数は、ユーザーが自由に作成した配列を基にして、移動平均線の値を算出するために使用します。

iMAOnArray()関数は、以下のように定義されています。

double iMAOnArray(
double array[],
int total,
int ma_period,
int ma_shift,
int ma_method,
int shift
);

各引数の意味は、以下のとおりです。

  • double array[]
    移動平均線を算出する配列名を指定します。
  • int total
    移動平均線を算出する配列の要素数を指定します。
    「0」と記述すると、配列全体(=すべての要素)を基にして移動平均線を算出します。
  • int ma_period
    移動平均線の値を計算する期間を指定します。
  • int ma_shift
    算出した移動平均線の表示を右方向にシフト(ずらす)するバーの個数を指定します。
  • int ma_method
    以下の表に従って、算出する移動平均線の種類を指定します。

    種 類
    定 数
    内 容
    MODE_SMA
    単純移動平均線
    MODE_EMA
    指数移動平均線
    MODE_SMMA
    平滑移動平均線
    MODE_LWMA
    線形加重移動平均線
  • int shift
    算出した移動平均線の値を取得したいバーの位置を指定します。
    算出した移動平均線の値を取得したいバーが現在のバーであれば「0」、1本前のバーであれば「1」、2本前のバーであれば「2」……と記述します。

注意点

iMA()関数とは異なって、iMAOnArray()関数は、通貨ペア名や時間軸や適用価格のデータを取得しません。

したがって、iMAOnArray()関数で移動平均線の値を算出するためには、あらかじめ価格データを用意しておかなければなりません。

移動平均線は、左から右へ(=古い価格データから新しい価格データに向かって)計算されます。右から左へ(=新しい価格データから古い価格データに向かって)移動平均線を計算するためには、ArraySetAsSeries()関数(詳細は「こちら」を参照してください。)を使います。

具体例

配列Buffer[]の要素を基にした単純移動平均線(Buffer_MA[]とします。)を算出したい場合には、以下のように記述します。


#property indicator_buffers 2

double Buffer[];
double Buffer_MA[];
extern int MA_Period=20;

int init()
{
 SetIndexBuffer(0,Buffer);
 SetIndexBuffer(1,Buffer_MA);
 ……
 return(0);
}

int start()
{
 int limit = Bars - IndicatorCounted();

 for(int i = limit - 1; i >= 0; i--)
    {
     Buffer[i] = ……;
    }

 for(i = limit - 1; i >= 0; i--)
    {
     Buffer_MA[i]
     = iMAOnArray(Buffer,0,MA_Period,0,0,i);
    }
 ……
  • SetIndexBuffer()関数の詳細については「こちら」を参照してください。
  • Barsの詳細については「こちら」を参照してください。
  • IndicatorCounted()関数の詳細については「こちら」を参照してください。