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

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

FileMoveは、MQL5でファイルを別の場所へ移動したり、ファイル名を変更(リネーム)したりするための関数です。

実務開発において、この関数は単なる「整理整頓」以上の役割を果たします。例えば、EA(エキスパートアドバイザー)が生成した大量のログファイルを「処理済み」フォルダへ移動させてバックアップを取ったり、設定ファイルを更新する際に古いファイルをリネームして退避させたりといった、システムの堅牢性を高める運用に不可欠です。

初心者の方がつまずきやすいポイントは、MQL5の「サンドボックス(砂場)」という制限です。MQL5ではセキュリティ上、操作できるフォルダが厳格に制限されており、PC内のどこへでもファイルを移動できるわけではありません。この仕様を理解せずに「ファイルが移動できない」と悩むケースが多々あります。

2. 構文と戻り値

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

bool  FileMove(
   const string  src_file_name,    // 移動元のファイル名
   int           src_common_flag, // 移動元の場所フラグ(共通フォルダか個別フォルダか)
   const string  dst_file_name,    // 移動先のファイル名
   int           dst_common_flag  // 移動先の場所フラグ
);

パラメーター

  • src_file_name: 移動したい元のファイルパス(相対パス)。
  • src_common_flag:
    • 0: ターミナルのデータフォルダ内(MQL5/Files)
    • FILE_COMMON: 全てのMT5で共有される共通フォルダ内
  • dst_file_name: 移動先(または変更後)のファイルパス。
  • dst_common_flag: 移動元と同様のフラグ。

戻り値

  • 成功した場合は true、失敗した場合は false を返します。
  • 失敗の理由は GetLastError() 関数で確認できます。

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

以下は、作成したCSVファイルを「Archive(アーカイブ)」というフォルダに移動させる実用的なコード例です。

void OnStart()
{
    string sourceFile = "trade_results.csv";      // 元のファイル
    string targetFolder = "Archive";              // 移動先のフォルダ
    string targetFile = targetFolder + "\\old_results.csv"; // 移動後のパス

    // 1. 移動先のフォルダが存在しない場合は作成する
    if(!FolderCreate(targetFolder))
    {
        Print("フォルダ作成失敗。エラーコード: ", GetLastError());
        return;
    }

    // 2. ファイルを移動(またはリネーム)
    // 第2・第4引数に0を指定すると、通常のデータフォルダ(MQL5/Files)が対象になります
    if(FileMove(sourceFile, 0, targetFile, 0))
    {
        Print("ファイルの移動に成功しました:", targetFile);
    }
    else
    {
        // 失敗した場合の原因特定
        int errorCode = GetLastError();
        Print("ファイルの移動に失敗しました。エラーコード: ", errorCode);

        // ファイルが開いたままではないか、元ファイルが存在するか確認が必要
    }
}

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

FileMoveを使用する際、特に初心者が注意すべき点は以下の3点です。

  1. ファイルを閉じてから実行する:
    FileOpenで開いたままのファイルを移動させることはできません。必ず FileClose を実行してから FileMove を呼び出してください。これを行わないと「ファイルが別のプロセスで使用されている」というエラーが発生します。

  2. 移動先のフォルダを先に作る:
    FileMoveは、移動先のフォルダ自体を自動で作る機能はありません。もし Archive/data.csv のようにフォルダを含むパスを指定する場合、事前に FolderCreate でそのフォルダを作っておく必要があります。

  3. 上書きはできない:
    移動先に同名のファイルが既に存在する場合、FileMoveは失敗します。既存のファイルを削除(FileDelete)してから移動するか、ユニークなファイル名(日時を付与するなど)に変更する工夫が必要です。

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

アルゴリズムトレードにおいて、ファイル操作やロジックの最適化と同じ、あるいはそれ以上に重要なのが「実行環境(ネットワークレイテンシ)」です。

自宅のPCや一般的な光回線でEAを運用している場合、FX業者のサーバーとの間には物理的な距離による数ミリ秒から数十ミリ秒の「遅延(ラグ)」が必ず発生します。相場が急変する指標発表時や、コンマ数秒を争うスキャルピングロジックにおいて、この遅延は致命的です。注文を出してからサーバーに届くまでの間に価格が滑る(スリッページ)ことで、バックテストでは利益が出ていても、リアル口座では損失が積み重なるという現象が起こります。

プロのクオンツやトレーダーにとって、専用のVPS(仮想専用サーバー)を利用して取引サーバーの物理的近傍にシステムを置くことは、もはやオプションではなく「必須条件」です。極限までネットワーク遅延を削ぎ落とすことが、システムの期待値を100%引き出し、予期せぬ約定拒否や価格乖離から資産を守る唯一の技術的解決策となります。

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

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

コメント

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