【MQL4定数】時系列設定の定数(ENUM_SERIESMODE)

【辞書】MQLリファレンス

時系列設定の定数(ENUM_SERIESMODE)

時系列設定の定数は、iHighest関数とiLowest関数の引数として使用します。

iHighest関数とiLowest関数は、計算をするときに、バーのどの値を計算に使うかを設定できます。

その設定をするために、時系列設定の定数を使うと良いでしょう。

例えば、始値で計算をするとか、終値で計算をするとかを設定できます。

 

それぞれ、type引数の入力値として、時系列設定の定数を使うことができます。

 

時系列設定の定数(ENUM_SERIESMODE)

定数説明
MODE_OPEN始値で計算する
MODE_LOW底値で計算する
MODE_HIGH高値で計算する
MODE_CLOSE終値で計算する
MODE_VOLUME出来高で計算する
MODE_TIME時間で計算する

 

時系列設定の定数(ENUM_SERIESMODE)の使い方

主に、iHighest関数とiLowest関数で使用されます。

それぞれ、type引数の入力値として、時系列設定の定数を使うことができます。

上記の定数を入力しましょう。

すると、その定数に対応した価格が設定されます。

例えば、以下のように使用します。

  //iHighest関数
  //過去5つ目のバーから、過去25つ目のバーまでの、最大価格を取得する(終値で計算)
   double highest = iHighest(Symbol(), PERIOD_CURRENT, MODE_CLOSE, 20, 5); 

  //iLowest関数
  //過去5つ目のバーから、過去25つ目のバーまでの、最低価格を取得する(終値で計算)
   double lowest = iLowest(Symbol(), PERIOD_CURRENT, MODE_CLOSE, 20, 5);

 

【補足】時系列設定の定数の列挙型(ENUM_SERIESMODE)

時系列設定の定数は、ENUM_SERIESMODE​という列挙型に含まれています。

列挙型は、定数群をひとまとめにしたものです。

以下のように使います。

ENUM_SERIESMODE seriesMode = MODE_LOW;

上記のようにプログラムすると、seriesMode変数に MODE_LOWの数値が代入されます。

 

時系列設定の定数を使ったサンプルプログラム

以下は、時系列設定の定数(ENUM_SERIESMODE)を使い、iHighest関数とiLowest関数で最高値バーと最安値バーのインデックスを取得し、その価格をログに出力するサンプルプログラムです。

//+------------------------------------------------------------------+
//| ENUM_SERIESMODE サンプルプログラム                                |
//+------------------------------------------------------------------+
void OnStart()
{
   // 計算に使う価格の種類を設定(終値で計算)
   ENUM_SERIESMODE seriesMode = MODE_CLOSE;

   // 過去20本のバーの中で、最高値バーのインデックスを取得
   int highestIndex = iHighest(Symbol(), PERIOD_CURRENT, seriesMode, 20, 0);

   // 過去20本のバーの中で、最安値バーのインデックスを取得
   int lowestIndex  = iLowest(Symbol(), PERIOD_CURRENT, seriesMode, 20, 0);

   // 最高値バーの終値を取得
   double highestPrice = iClose(Symbol(), PERIOD_CURRENT, highestIndex);

   // 最安値バーの終値を取得
   double lowestPrice  = iClose(Symbol(), PERIOD_CURRENT, lowestIndex);

   // 結果をログに出力
   Print("=== 時系列設定の定数(ENUM_SERIESMODE)サンプル ===");
   Print("計算モード: MODE_CLOSE(終値で計算)");
   Print("対象バー数: 過去20本");
   Print("最高値バーのインデックス: ", highestIndex, " / 終値: ", highestPrice);
   Print("最安値バーのインデックス: ", lowestIndex,  " / 終値: ", lowestPrice);

   // MODE_HIGHに変更して高値で計算した場合も取得
   int highestByHigh = iHighest(Symbol(), PERIOD_CURRENT, MODE_HIGH, 20, 0);
   int lowestByLow   = iLowest(Symbol(), PERIOD_CURRENT, MODE_LOW, 20, 0);

   double highPrice = iHigh(Symbol(), PERIOD_CURRENT, highestByHigh);
   double lowPrice  = iLow(Symbol(), PERIOD_CURRENT, lowestByLow);

   Print("--- 高値・底値で計算した場合 ---");
   Print("MODE_HIGH 最高値バーのインデックス: ", highestByHigh, " / 高値: ", highPrice);
   Print("MODE_LOW  最安値バーのインデックス: ", lowestByLow,   " / 底値: ", lowPrice);
}

このサンプルでは、まずMODE_CLOSE(終値)を使って過去20本のバーから最高値・最安値のバーインデックスを取得しています。

さらに、MODE_HIGH(高値)とMODE_LOW(底値)でも同様に計算を行い、結果をエキスパートログに出力しています。

時系列設定の定数を変更するだけで、計算に使う価格の種類を簡単に切り替えられることが確認できます。