投資で実現!不労所得生活

MetaTrader/MQL: チャートのタイムフレーム(H1 や M15)を取得する (Period, PeriodSeconds)

更新:
作成:

現在のタイムフレーム設定を取得する (Period)

カレントチャートのタイムフレーム(ローソク足 1 本あたりの時間)を調べるには、組み込みの _Period 変数Period 関数 を使用します。

ENUM_TIMEFRAMES timeframe = _Period;  // Period() でも同じ

結果として、下記のような ENUM_TIMEFRAMES 型の値を得ることができます。

意味意味
PERIOD_M11 分PERIOD_H11 時間
PERIOD_M22 分PERIOD_H22 時間
PERIOD_M33 分PERIOD_H33 時間
PERIOD_M44 分PERIOD_H44 時間
PERIOD_M55 分PERIOD_H66 時間
PERIOD_M66 分PERIOD_H88 時間
PERIOD_M1010 分PERIOD_H1212 時間
PERIOD_M1212 分PERIOD_D11 日
PERIOD_M1515 分PERIOD_W11 週間
PERIOD_M2020 分PERIOD_MN11 カ月
PERIOD_M3030 分

現在のタイムフレームの秒数を取得する (PeriodSeconds)

ローソク足 1 本あたりが、何秒であるかを取得するには、PeriodSeconds 関数 を使用します。

引数を省略するか、PERIOD_CURRENT を指定すると、現在のチャートの足 1 本あたりの秒数を返します。 特定のタイムフレームの足 1 本あたりの秒数を調べたいときは、ENUM_TIMEFRAMES 型のいずれかの値を指定します。

int seconds1 = PeriodSeconds();  // カレントチャートのタイムフレームの秒数
int seconds2 = PeriodSeconds(PERIOD_M1);  // 60
int seconds3 = PeriodSeconds(PERIOD_H1);  // 3600

現在のタイムフレームのテキスト表現を取得する

_Period で取得した ENUM_TIMEFRAMES 値を EnumToString 関数に渡すと、その enum 値の文字列表現を取得することができます。

Scripts/Hello.mq5
void OnStart() {
    Print(EnumToString(_Period));  //=> "PERIOD_M30" など
}

PERIOD_M30 といった文字列ではなく、後ろの M30 といった部分だけを取得したい場合は、次のように StringSubstr 関数を使って部分文字列を取得すればよいでしょう。

Scripts/Hello.mq5
/**
 * ENUM_TIMEFRAMES 値に対応する "M30" や "H1" などの文字列を取得します。
 */
string TimeframeToStr(ENUM_TIMEFRAMES timeframe) {
    string s = EnumToString(timeframe);  // "PERIOD_XXX" のような文字列
    return StringSubstr(s, 7);  // "PERIOD_" 以降の部分文字列を取得する
}

void OnStart() {
    Print(TimeframeToStr(_Period));  // => "M30" など
}

関連記事

投資で実現!不労所得生活
サイトマップまくへのメッセージ