1. FileDelete関数の概要と実務での活用法
FileDelete関数は、その名の通りMQL5のデータフォルダ内に存在する特定のファイルを削除するための関数です。
実務レベルのEA(エキスパートアドバイザー)開発において、この関数は単なる「掃除役」以上の重要な役割を担います。例えば、前日のトレード結果をまとめた一時的なCSVファイルの更新、インジケーターの計算結果をキャッシュしたバイナリファイルの初期化、あるいは特定のフラグファイル(存在の有無で動作を分岐させるファイル)の制御などに活用されます。
開発者が特につまずきやすいのは、「プログラムがファイルを掴んだまま(オープンしたまま)削除しようとして失敗する」というパターンです。ファイルのライフサイクル(作成→書き込み→クローズ→削除)を正しく管理することは、ロジックの安定性を高める上で非常に重要です。
2. 構文と戻り値
FileDelete関数の構文は非常にシンプルです。
bool FileDelete(
const string file_name, // 削除対象のファイル名
int common_flag=0 // ファイルの場所を指定するフラグ
);
パラメーター
- file_name: 削除したいファイルの名前をパスを含めて指定します。
- common_flag:
0(デフォルト): 各MT5端末固有のデータフォルダ(MQL5\Files)を対象にします。FILE_COMMON: 全てのMT5で共有される共通フォルダを対象にします。
戻り値
- 削除に成功した場合は
trueを、失敗した場合はfalseを返します。 - 失敗した原因を詳しく知りたい場合は、
GetLastError()関数を呼び出してエラーコードを確認します。
3. 具体的な使い方・実践サンプルコード
以下は、EAの初期化時(OnInit)に古いログファイルを削除し、常にクリーンな状態で起動するための実践的なコード例です。
//+------------------------------------------------------------------+
//| ログファイルを削除するサンプルEA |
//+------------------------------------------------------------------+
void OnStart()
{
string fileName = "temp_trade_data.csv";
// 1. ファイルが存在するかチェック(任意ですが推奨される作法です)
if(FileIsExist(fileName))
{
Print("古いファイルを削除します: ", fileName);
// 2. FileDeleteを実行
if(FileDelete(fileName))
{
Print("ファイルの削除に成功しました。");
}
else
{
// 削除失敗時のエラーハンドリング
int errorCode = GetLastError();
Print("ファイルの削除に失敗しました。エラーコード: ", errorCode);
// よくあるエラー:5004 (File is opened)
if(errorCode == 5004)
{
Print("警告:ファイルが他のプロセスによって開かれているため削除できません。");
}
}
}
else
{
Print("削除対象のファイルが存在しません。");
}
}
4. 使用上の注意点とよくあるエラー
FileDeleteを使用する際、初心者が陥りやすい落とし穴がいくつかあります。
-
ファイルハンドルが閉じられていない:
FileOpenで開いたファイルは、必ずFileCloseで閉じてから削除する必要があります。ハンドルが開いたままの状態だと、OS側でファイルがロックされ、FileDeleteは失敗(エラーコード5004)します。 -
サンドボックス制限:
MQL5はセキュリティ上の理由から、操作できるディレクトリが制限されています(サンドボックス)。MQL5\Files(または共通フォルダ)以外のディレクトリにあるファイルを削除することはできません。絶対パス(C:…など)での指定は無効です。 -
大文字・小文字の区別:
Windows環境ではファイル名の大文字・小文字は区別されませんが、将来的なクロスプラットフォーム対応や予期せぬバグを防ぐため、作成時と同じファイル名で指定する癖をつけておきましょう。 -
削除後のチェック:
削除に成功したという戻り値を受け取った直後に、同じ名前でファイルを作成しようとすると、稀にOS側の処理遅延で競合が起きることがあります。ミリ秒単位の極めて高速な処理を行う場合は注意が必要です。
5. 【重要】自動売買における約定スピードと環境の罠
どれほど完璧なコードを書き、FileDeleteで適切にデータを管理したとしても、取引を実行するインフラが貧弱であれば、その努力はすべて水泡に帰します。特に、自宅のPCや家庭用Wi-Fi回線でEAを運用することは、クオンツの視点から見ると極めてリスクが高い行為です。家庭用回線はネットワークの経路(ルーティング)が最適化されておらず、証券会社のサーバーに注文が届くまでに致命的な遅延(レイテンシ)が発生します。
この数ミリ秒の遅延が「スリッページ」を引き起こし、本来得られるはずだった利益を削り、損失を拡大させます。さらに、自宅PCはOSのアップデートや停電、物理的な故障といった「予期せぬ停止」のリスクに常にさらされています。プロのアルゴリズムトレーダーとして、極限まで約定スピードを高め、24時間365日の安定稼働を実現するためには、証券会社に近いデータセンターに設置された「専用のVPS(仮想専用サーバー)」の使用が不可欠です。インフラへの投資を惜しむことは、トレードにおける最大の戦略的ミスであると断言できます。
💡 この記事の内容を実運用で活かすには?
この記事の内容を実運用で活かすには、正しい環境が必要です。
特にVPSを使わないと、このロジックは再現できません。

コメント