MQL4学習におけるiMA関数を詳しく解説(サンプルコードあり)

目次

MQL4におけるiMA関数とは

MQL4のiMA関数は、移動平均(Moving Average)を計算するための組み込み関数です。この関数は、指定されたパラメータに基づいて移動平均値を返します。以下にiMA関数の使い方と特徴を説明します。

iMA関数の基本構文

double iMA(
   string       symbol,           // シンボル名
   int          timeframe,        // タイムフレーム
   int          period,           // 平均期間
   int          ma_shift,         // 水平方向のシフト
   int          ma_method,        // 平均化方法
   int          applied_price,    // 適用価格
   int          shift             // 時系列配列内のインデックス
);

iMA関数の使用例

以下は、現在のチャートで14期間の単純移動平均を計算する例です。

double ma = iMA(NULL, 0, 14, 0, MODE_SMA, PRICE_CLOSE, 0);
Print("14期間SMAの現在の値: ", ma);

iMA関数のパラメータ説明

以下は、iMA関数のパラメータ説明を表にまとめたものです。

パラメータ説明
symbol通貨ペア名。NULLを指定すると現在のチャートのシンボルが使用されます。
timeframeタイムフレーム。0を指定すると現在のチャートのタイムフレームが使用されます。
period移動平均の期間。
ma_shiftチャート上での水平方向のシフト(ピクセル単位)。
ma_method移動平均の計算方法。以下のいずれかを指定します:
– MODE_SMA: 単純移動平均
– MODE_EMA: 指数移動平均
– MODE_SMMA: 平滑化移動平均
– MODE_LWMA: 線形加重移動平均
applied_price計算に使用する価格。以下のいずれかを指定します:
– PRICE_CLOSE: 終値
– PRICE_OPEN: 始値
– PRICE_HIGH: 高値
– PRICE_LOW: 低値
– PRICE_MEDIAN: 中央値 ((high + low) / 2)
– PRICE_TYPICAL: 代表値 ((high + low + close) / 3)
– PRICE_WEIGHTED: 加重終値 ((high + low + close + close) / 4)
shift取得するバーのインデックス。0は現在のバー、1は1つ前のバーを意味します。

注意点

  1. iMA関数は、指定されたシフト位置の移動平均値を返します。リアルタイムの値を取得するには、shift=0を使用します。
  2. 異なる期間や方法の移動平均を比較する場合は、それぞれのiMA関数呼び出しで適切なパラメータを設定してください。
  3. iMA関数は、指標やエキスパートアドバイザーの中で頻繁に使用されます。特に、クロスオーバー戦略やトレンド分析に役立ちます。

iMA関数を使いこなすことで、様々な移動平均ベースの戦略を実装できます。例えば、短期と長期の移動平均のクロスオーバーを検出したり、価格と移動平均の関係を分析したりすることが可能です。

iMA関数を使ったEAのサンプルコード

iMA関数を使った簡単なEAのサンプルコードを以下に示します。

// 外部パラメータ
extern int FastPeriod = 10;  // 短期移動平均の期間
extern int SlowPeriod = 30;  // 長期移動平均の期間
extern double Lots = 0.1;    // 取引ロット数

// グローバル変数
int ticket = 0;

void OnTick()
{
   // 現在の移動平均値を取得
   double fastMA = iMA(NULL, 0, FastPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
   double slowMA = iMA(NULL, 0, SlowPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
   
   // 1本前の移動平均値を取得
   double fastMA_prev = iMA(NULL, 0, FastPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
   double slowMA_prev = iMA(NULL, 0, SlowPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

   // ゴールデンクロス(短期が長期を上抜け)で買い
   if(fastMA_prev <= slowMA_prev && fastMA > slowMA) {
      if(ticket <= 0) {  // ポジションがない場合
         ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, "Buy", 0, 0, clrGreen);
      }
   }
   
   // デッドクロス(短期が長期を下抜け)で売り
   if(fastMA_prev >= slowMA_prev && fastMA < slowMA) {
      if(ticket <= 0) {  // ポジションがない場合
         ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, "Sell", 0, 0, clrRed);
      }
   }

   // ポジションを持っている場合、反対シグナルで決済
   if(ticket > 0) {
      if(OrderSelect(ticket, SELECT_BY_TICKET)) {
         if(OrderType() == OP_BUY && fastMA < slowMA) {
            OrderClose(ticket, OrderLots(), Bid, 3, clrRed);
            ticket = 0;
         }
         else if(OrderType() == OP_SELL && fastMA > slowMA) {
            OrderClose(ticket, OrderLots(), Ask, 3, clrGreen);
            ticket = 0;
         }
      }
   }
}

このEAは以下のように動作します。

  1. 短期と長期の移動平均線を計算します。
  2. ゴールデンクロス(短期MAが長期MAを上抜け)で買いポジションを取ります。
  3. デッドクロス(短期MAが長期MAを下抜け)で売りポジションを取ります。
  4. 既にポジションを持っている場合、反対のシグナルが出たら決済します。
  5. 一度に1つのポジションのみを保有します。

このコードは基本的な移動平均線クロスオーバー戦略を実装しています。実際の運用では、適切なリスク管理やその他の条件を追加することをお勧めします。また、バックテストを行い、パラメータを最適化することも重要です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

池田 直哉 池田 直哉 メタプロアカデミー創業者・講師

オリジナルのEAを作ることができるようになるWebスクール【メタプロアカデミー】を運営しています。プログラミング未経験の方が最短1ヵ月で勝てるオリジナルEAが作れるようになります。

目次