【MQL5】FrameFirst関数について

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

FrameFirst関数の働き・役割

FrameFirst関数は、データフレームの読み込みにおいて、フレーム読み込みのポインタを先頭に移動するために使用されます。この関数を呼び出すことで、以前に設定されたフィルタがリセットされるため、フレームの最初からデータを再度取得したい場合に便利です。データフレームの読み込みや解析を繰り返す際に、指定位置をリセットして最初からデータを読み込み直す場面で役立ちます。

FrameFirst関数の引数について

bool FrameFirst();

FrameFirst関数は引数を取りません。

FrameFirst関数の戻り値について

FrameFirst関数は、フレームのポインタを先頭に移動し、フィルタをリセットできた場合にtrueを返します。反対に、何らかの理由で操作が失敗した場合にはfalseを返します。処理が失敗した際の詳細なエラー情報を取得するには、GetLastError関数を使用することが推奨されます。例えば、ファイルの読み込みエラーやポインタ操作の失敗といった原因を知ることができます。

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

// 最適化の各パスで新しいフレームが到着した際に自動的に呼び出される関数
void OnTesterPass()
{
    // フレームのパスIDを格納するための変数。最適化の各パス(試行)ごとに一意のIDが付与される
    ulong pass_id;

    // フレームの名前を格納するための変数。FrameAdd関数を使って送信される際に設定された名前が入る
    string frame_name;

    // フレームの識別IDを格納する変数。FrameAdd関数で設定した識別番号が保持される
    long frame_id;

    // フレームの値(数値データ)を格納するための変数。FrameAddで指定された数値情報が入る
    double frame_value;

    // FrameNext関数は、次のフレームが存在する限りtrueを返し、フレームデータを変数に格納する
    // フレームがなくなるまでループを継続
    while(FrameNext(pass_id, frame_name, frame_id, frame_value))
    {
        // 取得したフレームデータをエキスパートログに出力
        // Print関数を使用し、Pass ID、フレーム名、識別ID、値の情報を表示
        Print("Pass ID: ", pass_id,           // 最適化のパスIDを表示
              " Name: ", frame_name,          // フレームの名前を表示
              " ID: ", frame_id,              // フレームの識別IDを表示
              " Value: ", DoubleToString(frame_value, 2)); // 数値データを小数点2桁で表示
    }
}

// 最適化が終了した後に未処理のフレームを処理するための関数
void OnTesterDeinit()
{
    // 最適化パスID、フレーム名、識別ID、値を保持する変数を定義
    ulong pass_id;
    string frame_name;
    long frame_id;
    double frame_value;

    // FrameFirst関数を呼び出してフレームの最初の位置に移動
    // 最適化完了後、すべてのフレームを再確認する準備を行う
    FrameFirst();

    // 未処理のフレームがある限り、次のフレームを取得して処理を繰り返す
    while(FrameNext(pass_id, frame_name, frame_id, frame_value))
    {
        // 未処理のフレームデータをエキスパートログに出力して確認
        Print("Deinit - Pass ID: ", pass_id,        // 最適化パスIDを表示
              " Name: ", frame_name,               // フレームの名前を表示
              " ID: ", frame_id,                   // フレームの識別IDを表示
              " Value: ", DoubleToString(frame_value, 2)); // 数値データを小数点2桁で表示
    }
}

サンプルコードに使われた関数や変数の詳細な解説

  • OnTesterPass関数
    最適化中にテストエージェントから新しいデータフレームが送信された際に自動的に呼び出され、フレーム内容の受け取りと処理を行う関数です。
  • OnTesterDeinit関数
    最適化が完了した後に呼び出され、未処理のフレームを確認・処理するために使用されます。
  • pass_id
    各最適化パス(試行)ごとに一意のIDを格納するための変数で、FrameNext関数で取得されます。
  • frame_name
    フレームの名前を格納する変数で、FrameAdd関数で設定した名前が入ります。識別名として利用することができます。
  • frame_id
    フレームの識別IDを保持する変数で、各フレームの特定情報として設定されます。
  • frame_value
    フレームに含まれる数値データを格納する変数です。最適化の結果や評価指標などを受け取ります。
  • while文
    while文は、条件が満たされている限り繰り返し処理を実行する構文です。このコードでは、FrameNext関数がtrueを返す間、つまり未処理のフレームがある限りループが続きます。while文の内部でFrameNext関数が新たなフレームデータを取得し、変数に格納して処理を繰り返します。
  • FrameNext関数
    次のフレームが存在するかを確認し、存在する場合にはそのデータを取得して指定の変数に格納します。未処理のフレームを順次処理する際に使用します。
  • FrameFirst関数
    最初のフレームに移動するために使用します。OnTesterDeinit関数で、フレームの再処理を行う際に利用されます。
  • Print関数
    取得したデータをエキスパートログに表示するための関数です。このサンプルでは各フレームのID、名前、識別ID、数値データを表示しています。
  • DoubleToString関数
    DoubleToString関数は、数値を文字列に変換する関数です。このコードではframe_valueを小数点以下2桁に指定して文字列化し、エキスパートログに出力しています。

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