【MQL5】FileIsExist関数の使い方と自動売買実装コード

1. FileIsExist関数の概要と実務での活用法

FileIsExist関数は、指定したファイルが指定の場所に存在するかどうかをチェックする関数です。

実務開発において、この関数は「エラー回避の安全装置」として極めて重要な役割を果たします。例えば、CSVファイルから外部パラメーターを読み込むEA(エキスパートアドバイザー)を開発する場合、ファイルが存在しないのに読み込み処理(FileOpen)を実行しようとすると、実行時エラーが発生し、最悪の場合EAが停止してしまいます。

また、ログファイルや取引履歴の書き出しを行う際に、「すでにファイルが存在すれば追記し、存在しなければ新規作成する」といった条件分岐にも活用されます。初心者がつまずきやすいポイントは、MQL5のファイル操作には「サンドボックス(砂場)」という概念があり、特定のフォルダ外のファイルは存在チェックすらできないという制約です。この仕様を理解した上で正しく使うことが、堅牢なシステム構築の第一歩となります。

2. 構文と戻り値

FileIsExist関数の構文は以下の通りです。

bool FileIsExist(
   string  file_name,       // ファイル名(パスを含む)
   int     common_flag = 0  // 検索範囲のフラグ
);

パラメーター

  1. file_name:
    チェックしたいファイル名を指定します。フォルダ階層を含める場合は、"DataFolder\\MyConfig.csv" のように記述します。
  2. common_flag:
  3. 0 (デフォルト): 各MT5ターミナルごとのデータフォルダ内(MQL5\Files)を探します。
  4. FILE_COMMON: 全てのMT5ターミナルで共有される共通フォルダ内を探します。複数のMT5でデータを共有したい場合に利用します。

戻り値

  • ファイルが存在すれば true を返します。
  • ファイルが存在しない、あるいはアクセス権限がない場合は false を返します。

3. 具体的な使い方・実践サンプルコード

以下は、EAの初期化時(OnInit)に設定ファイルが存在するか確認し、存在しない場合はデフォルト設定を作成する実用的なコード例です。

//+------------------------------------------------------------------+
//|                                              FileCheckSample.mq5 |
//+------------------------------------------------------------------+
#property strict

int OnInit()
{
    string fileName = "MyEA_Settings.csv";

    // ファイルが存在するか確認
    if(FileIsExist(fileName, 0))
    {
        Print("設定ファイルが見つかりました。読み込みを開始します。");
        // ここに読み込み処理(FileOpenなど)を記述
    }
    else
    {
        Print("設定ファイルが存在しません。デフォルトファイルを作成します。");

        // ファイルを書き込みモードで開いて作成
        int fileHandle = FileOpen(fileName, FILE_WRITE|FILE_CSV);
        if(fileHandle != INVALID_HANDLE)
        {
            FileWrite(fileHandle, "DefaultSetting", 1.2500, 50);
            FileClose(fileHandle);
            Print("デフォルト設定ファイルを保存しました。");
        }
        else
        {
            Print("ファイル作成に失敗しました。エラーコード: ", GetLastError());
        }
    }

    return(INIT_SUCCEEDED);
}

4. 使用上の注意点とよくあるエラー

サンドボックスの制約

MQL5ではセキュリティ上の理由から、アクセスできるフォルダが厳格に制限されています。FileIsExistでチェックできるのは、原則としてMQL5\Filesフォルダ内のみです。デスクトップやドキュメントフォルダにあるファイルを直接参照することはできませんので注意してください。

スラッシュとバックスラッシュ

ファイルパスを指定する際、フォルダの区切り文字には \\(バックスラッシュを2つ)または /(スラッシュ)を使用する必要があります。"Folder\File.csv" のように単一のバックスラッシュを使うと、エスケープシーケンスとして誤認され、正しく動作しません。

ファイル名の拡張子

Windowsの設定で「登録されている拡張子を表示しない」にしている場合、実際のファイル名が config.csv.csv になっているなどのミスが起こりやすいです。MQL5側では拡張子まで正確に記述する必要があります。

5. 【重要】自動売買における約定スピードと環境の罠

どれほど FileIsExist を駆使してエラーのない完璧なロジックを組み上げたとしても、それを実行する「環境」が貧弱であれば、プロの現場では通用しません。自宅のPCと一般的な光回線を使用した自動売買には、ネットワークの「遅延(レイテンシ)」という致命的なリスクが潜んでいます。相場が激変する瞬間、ミリ秒単位の遅れがスリッページを引き起こし、本来得られるはずだった利益を削り、あるいは損失を拡大させます。

アルゴリズムトレードで極限のパフォーマンスを追求するならば、取引サーバーに物理的に近いデータセンター内に設置された専用のVPS(仮想専用サーバー)導入は避けて通れません。24時間365日、安定した電源と超低遅延のバックボーンネットワークに守られた環境でEAを稼働させること。これこそが、ロジック以前に勝敗を分ける「クオンツエンジニアとしての常識」と言えます。

💡 この記事の内容を実運用で活かすには?

この記事の内容を実運用で活かすには、正しい環境が必要です。
特にVPSを使わないと、このロジックは再現できません。

コメント

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