iMA 関数
この関数は、任意に設定したパラメータの移動平均を計算して、その値を取得します。移動平均はトレンド系のインジケータに分類されます。
移動平均
移動平均 (Moving Average) とは、過去の価格データを一定期間分 (たとえば20日分) 平均化し、現在の価格と比較することで、現在の価格のトレンド方向を把握するためのテクニカル指標です。一般的には、短期的な移動平均線と長期的な移動平均線のクロスや、価格が移動平均線より上にあるか下にあるかなどを判断することで、相場のトレンド転換を予測するのに使用されます。
たとえば、20日移動平均線を用いた場合、現在の価格が20日移動平均線より上にある場合は上昇トレンド、下にある場合は下降トレンドと判断されます。また、短期的な5日移動平均線と20日移動平均線のクロスなども、相場のトレンド転換を示す重要なシグナルとされています。移動平均は、単純移動平均 (SMA) 、指数平滑移動平均 (EMA) 、加重移動平均 (WMA) などの種類があり、それぞれ計算方法が異なります。
MT4でチャート上に移動平均線をプロットする時はナビゲーター中のインディケータ → 「トレンド」 → 「Moving Average」インジケータを使用します。
(単純移動平均の計算式)
SMA = ( P1 + P2 + … + Pn ) / n
SMA:単純移動平均の値
P1〜Pn:一定期間の価格
n:期間の長さ
その他の種類の移動平均の計算方法はこちらを参考にしてください。
(移動平均の使い方)
FXトレードの指標である移動平均の主な使い方は、トレンドの方向性を確認することです。移動平均線は、為替相場の価格変動を滑らかに表現し、一定期間の価格の平均値を表します。短期的な移動平均線と長期的な移動平均線の交差点を利用して、買いと売りのシグナルを取ることができます。
たとえば、5日移動平均線が10日移動平均線を上抜けた場合 (ゴールデンクロス) 、それは買いシグナルと見なすことができます。逆に、10日移動平均線が5日移動平均線を下抜けた場合 (デッドクロス) は、売りシグナルとなります。また、移動平均線の傾きに注目することで、トレンドの勢いを確認することもできます。
データ型と構成・戻り値
double iMA(①, ②, ③, ④, ⑤, ⑥, ⑦);
戻り値は、任意に設定した移動平均の値を返します。
引数 [7]
iMa関数は 7個の引数で構成されます。
番 号 | 引数名 | データ型 | 単位 | 初期値 | 説明 |
---|---|---|---|---|---|
① | symbol | string | - | - | 計算対象の通貨ペア名。 「NULL」は選択チャートの通貨ペア名が選択されます。 |
② | timeframe | int | - | - | 時間軸。ENUM_TIMEFRAMES 列挙値から選択。 「0」は現在チャートの時間軸が選択されます。 |
③ | ma_period | int | - | - | 平均期間。移動平均を算出するバーの数を数値で設定します。 |
④ | ma_shift | int | - | - | 移動平均を右方向にシフトするバーの数。 指定したバーの数だけ移動平均線を右方向にずらして表示します。たとえば、「0」であれば直近を含めた移動平均の値、「1」であれば直近を含めない 1つ前からの移動平均の値が取得されます。 ④と⑦の引数の関係についてはこちらの使用例を参考にしてください。 |
⑤ | ma_method | int | - | - | 移動平均の方法。 ENUM_MA_METHOD 列挙値から選択。 |
⑥ | applied_price | int | 決済の 通貨単位 | - | 適用価格。 ENUM_APPLIED_PRICE 列挙値から選択。 |
⑦ | shift | int | - | - | 移動平均を算出する位置。 現在のバーから指定した時間軸のバー数だけ過去へシフトします。例えば、現在のバーからの計算は「0」、 1つ前のバーから計算する時は「1」になります。 ④と⑦の引数の関係についてはこちらの使用例を参考にしてください。 |
使用例
iMA関数による移動平均の計算検証
iMA関数を使った移動平均値と手動計算の結果との比較です。
移動平均値の計算の③平均期間 (バーの数) は同じになるように変数ap で設定します。⑤移動平均の方法は計算が分かりやすいように単純移動平均 (SMA) を使います。バーの価格は終値を使って移動平均値を算出します。
変数 ap については結果がどのように変化するか変えて確認してみてください。
コード
// iMA関数による移動平均の計算確認
#property strict
void OnInit() {
int ap = 3; // ③平均期間(設定用)
// iMA(①通貨ペア②時間軸③平均期間④表示位置シフト⑤方法⑥適用価格⑦計算位置シフト);
double a = iMA(NULL, 0, ap, 0, 0, 0, 0); // 移動平均iMA計算値
//double a = iMA(NULL, 0, ap, 0, MODE_SMA, PRICE_CLOSE, 0); // 上記と同じ。定数を使って書いたもの。
// 手動計算
double b = 0;
for(int i=0; i<ap; i++) {
b = b + Close[i];
}
b = b / ap; // 移動平均手動計算値
Print("移動平均iMA計算値 :", a);
Print("移動平均手動計算値:", b);
}
コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)
結果
結果は、浮動小数点の関係で誤差が生じることはありますが、ほぼ同じ結果になります。
iMA 関数 ④⑦シフト設定
iMA関数の引数である④と⑦のシフトは同じように計算の位置をずらして移動平均の結果を取得します。ですので、次のコードでは同じ結果になり、ずらした移動平均結果が必要な場合は、どちらかだけの数字を設定すれば OKです。通常は位置的に最後の方が確認しやすいので⑦が使われることが多いです。
変数sf の値は「5」にしていますが、数字を変えていろいろ試してみてください。
コード
// iMA関数による移動平均の計算検証 ④⑦シフト設定
#property strict
void OnInit() {
int ap = 5; // ③平均期間(設定用)
int sf = 5; // ④⑦シフト設定(設定用)
//iMA(①通貨ペア②時間軸③平均期間④表示位置シフト⑤方法⑥適用価格⑦計算位置シフト);
double a = iMA(NULL, 0, ap, sf, 0, 0, 0); // ③シフト設定
double b = iMA(NULL, 0, ap, 0, 0, 0, sf); // ⑦シフト設定
Print("③シフト設定結果:", a);
Print("⑦シフト設定結果:", b);
}
コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)
結果
結果は次のように同じになります。