【MQL5】FrameFilter関数について

MQL5リファレンス
スポンサーリンク
スポンサーリンク

FrameFilter関数の働き・役割

FrameFilter関数は、データフレームの読み込み時にフィルタを設定し、特定の条件に合致するフレームのみを対象とするために使用されます。フィルタの設定後、フレームの読み込みポインタは自動的に先頭に移動します。指定したパブリックの名称やIDに基づいてフィルタを設定することで、目的のデータフレームのみを抽出することが可能です。また、条件によっては、フィルタを設定せず全フレームにアクセスすることも可能で、柔軟なデータ解析を行う際に役立ちます。

FrameFilter関数の引数について

bool  FrameFilter(
  const string name,        // Public 名称/レベル
  long         id            // パブリック ID
  );

FrameFilter関数は、以下の2つの引数を取ります。これらの引数を用いて、フレーム読み込みに適用するフィルタ条件を設定します。

nameは、フィルタをかけるフレームの識別として使用される文字列型のパラメータです。このパラメータには、フィルタしたいフレームの名称やレベルの情報を文字列で指定します。空の文字列が渡された場合、フィルタはidの数値によってのみ機能します。

idは、指定するフレームのパブリックIDを表す長整数型のパラメータです。このIDに基づいて特定のフレームをフィルタリングします。もしidにULONG_MAXが渡された場合、フィルタはnameの文字列によってのみ機能します。

この2つの引数の組み合わせにより、フレームの名称またはID、あるいはその両方に基づいた柔軟なフィルタ設定が可能です。なお、nameに空文字、idにULONG_MAXを指定すると、フィルタは適用されず全フレームが読み込まれます。

FrameFilter関数の戻り値について

FrameFilter関数は、フィルタの設定とポインタの先頭への移動が正常に行われた場合にtrueを返します。処理が失敗した場合はfalseを返し、その際にはGetLastError関数を使用してエラーの詳細を確認することが推奨されます。失敗の原因には、フィルタ条件の不正や無効な引数の指定が考えられます。

FrameFilter関数を使う際の注意点

nameに空の文字列を指定した場合、フィルタはidの数値のみで適用され、idと一致するフレームのみが対象となります。逆に、idにULONG_MAXを指定すると、nameの文字列のみを条件としてフィルタが機能します。

また、FrameFilter関数にnameを空文字、idをULONG_MAXとして渡した場合、フィルタは無効化され、FrameFirst関数と同様の動作をします。この場合、全フレームが対象となり、特定のフィルタ条件は適用されません。

フィルタを利用する際には、設定した条件により想定通りのフレームが対象となるよう、nameとidの引数に適切な値を渡すことが重要です。

FrameFilter関数を使ったサンプルコード

以下は、FrameFilter関数を使って特定のフレームをフィルタリングし、そのデータを読み込む例です。このサンプルでは、特定のフレーム名とIDでフィルタを設定した後、フレームデータを順次読み取ります。

// サンプルコード開始
void OnStart()
{
    // フレームフィルタ設定
    string filter_name = "TestFrame"; // フィルタで使用するフレームの名称
    long filter_id = 100;             // フィルタで使用するフレームのID

    // FrameFilter関数を使ってフィルタを設定し、先頭に移動
    if (FrameFilter(filter_name, filter_id))
    {
        Print("フレームフィルタが適用されました。フィルタ名: ", filter_name, " フィルタID: ", filter_id);

        // フィルタ設定後、FrameNext関数を使ってフレームデータを読み取る
        ulong pass;
        string name;
        long id;
        double value;

        // 次のフレームを読み込んでいく
        while (FrameNext(pass, name, id, value))
        {
            // 読み込んだフレームの情報を出力
            Print("フレーム情報 - パス番号: ", pass, " 名称: ", name, " ID: ", id, " 値: ", value);
        }
    }
    else
    {
        // フィルタの設定が失敗した場合
        Print("フィルタの設定に失敗しました。エラーコード: ", GetLastError());
    }
}
// サンプルコード終了

サンプルコードの説明

  1. filter_nameとfilter_idの設定
    filter_nameにはフィルタで使用するフレームの名称を指定しています。また、filter_idにはフィルタリング対象とするフレームIDを指定します。この2つの値でフレームフィルタを構成します。
  2. FrameFilter関数の呼び出し
    FrameFilter関数を呼び出し、filter_nameとfilter_idの条件でフィルタを設定します。成功した場合、フィルタが適用されます。失敗した場合にはエラーメッセージとエラーコードを出力します。
  3. FrameNext関数によるフレーム読み込み
    フィルタが適用された後、FrameNext関数を使ってフレームのデータを読み込みます。フレームデータが取得できる限り、pass(パス番号)、name(名称)、id(ID)、value(数値)を読み取り、各フレームの情報をエキスパートログに出力します。

このサンプルコードでは、指定されたフィルタ条件に合致するフレームのみが読み取られるため、効率的にフレームデータを確認できます。エラーが発生した場合にはGetLastError関数を活用して問題の特定が行えます。

タイトルとURLをコピーしました