1. FileCopy関数の概要と実務での活用法
MQL5のFileCopy関数は、指定したファイルをある場所から別の場所へコピーするための関数です。一見地味な関数ですが、実務レベルのEA(エキスパートアドバイザー)開発においては、システムの堅牢性を高めるために非常に重要な役割を果たします。
実務での主な活用シーン:
* ログのローテーションとバックアップ: 定期的に設定ファイルや取引記録を別名で保存し、不測の事態(メタトレーダーのクラッシュやデータの破損)に備えます。
* 共通データフォルダの利用: 複数のMT5ターミナル間でデータを共有したい場合、FILE_COMMONフラグを利用して共通フォルダへファイルをコピーし、他のEAから参照可能にします。
* 計算負荷の分散: 重い計算結果を出力したファイルを、分析用ツールが読み取れる場所にコピーして連携させます。
初心者の方は「ファイルを上書きしようとしてエラーになる」「そもそもファイルがどこにコピーされたか分からない」という点に陥りがちです。これは、MQL5の「サンドボックス(隔離環境)」というセキュリティ上の仕組みが関係しています。
2. 構文と戻り値
FileCopy関数の基本的な構文は以下の通りです。
bool FileCopy(
const string src_name, // コピー元のファイル名
int common_flag, // 場所を指定するフラグ(0 または FILE_COMMON)
const string dst_name, // コピー先のファイル名
int mode_flags // コピーモードのフラグ
);
パラメーター解説
- src_name: コピーしたい元のファイル名です。
- common_flag:
0: 各ターミナルのデータフォルダ(MQL5\Files)内を指します。FILE_COMMON: 全てのMT5で共有される共通フォルダ(Common\Files)を指します。
- dst_name: 新しく作成されるコピー後のファイル名です。
- mode_flags:
FILE_REWRITE: コピー先に同名のファイルがある場合、上書きします。このフラグを指定しない場合、同名ファイルがあるとコピーは失敗します。
戻り値
- 成功した場合は
true、失敗した場合はfalseを返します。失敗の理由はGetLastError()関数で詳細を確認できます。
3. 具体的な使い方・実践サンプルコード
以下は、EAの設定ファイル(CSV)をバックアップとして別名保存する、実用的なコード例です。
void BackupSettings()
{
string sourceFile = "EA_Settings.csv";
string backupFile = "Backup/EA_Settings_Backup.csv";
// コピー先のディレクトリが存在しない場合、MQL5は自動的に作成しません。
// フォルダ作成が必要な場合は事前にFolderCreate等を行う必要がありますが、
// ここではシンプルにファイル直下のコピーを想定します。
// 1. ファイルをコピー(上書き許可設定)
if(FileCopy(sourceFile, 0, backupFile, FILE_REWRITE))
{
Print("バックアップ成功: ", sourceFile, " -> ", backupFile);
}
else
{
// 失敗した場合はエラーコードを確認
int errorCode = GetLastError();
Print("バックアップ失敗。エラーコード: ", errorCode);
// よくあるエラー:
// 4015: ERR_FILE_IS_DIRECTORY (指定がディレクトリ)
// 5002: ERR_FILE_NOT_FOUND (元のファイルがない)
// 5003: ERR_FILE_EXISTS (上書きフラグがないのにファイルが存在する)
}
}
void OnDeinit(const int reason)
{
// EA終了時に設定ファイルをバックアップする運用例
BackupSettings();
}
4. 使用上の注意点とよくあるエラー
FileCopyを確実に動作させるためには、以下のルールを覚えておきましょう。
- サンドボックスの制限:
MQL5\Filesフォルダ、またはCommon\Filesフォルダ以外へのコピーはできません。Cドライブの直下などに保存しようとしても、セキュリティ上の制約で拒否されます。 - ファイルが「開かれたまま」ではないか: コピー元またはコピー先のファイルが、
FileOpen関数で開かれたままの状態(ハンドルが閉じられていない状態)だと、コピーに失敗することがあります。必ずFileCloseを行ってから実行してください。 - 上書きフラグの忘れ:
FILE_REWRITEを指定し忘れると、2回目以降の実行(既にコピー先が存在する場合)で必ず失敗します。 - パスの区切り文字: フォルダを階層化する場合、区切り文字は
/(スラッシュ)または\\(バックスラッシュ2つ)を使用してください。
5. 【重要】自動売買における約定スピードと環境の罠
アルゴリズムトレードにおいて、FileCopyなどでデータの管理を完璧に行っても、避けることができない「環境の壁」が存在します。それはネットワーク遅延(レイテンシ)です。FX取引は1ミリ秒(0.001秒)を争う世界であり、自宅のPCから一般的なインターネット回線を通じて注文を出すことは、プロのクオンツから見れば極めてリスクの高い行為です。
自宅PCでの運用は、プロバイダー経由の無数のノードを通過するため、約定までに致命的な遅延が発生し、スリッページによって期待収益が削り取られてしまいます。どれだけ優れたロジックを構築しても、物理的な距離と回線速度による損失はカバーできません。約定スピードを極限まで高め、安定した利益を追求するには、ブローカーのサーバーに近いデータセンターに設置された「専用のVPS(仮想専用サーバー)」の利用が必須です。プロのエンジニアが24時間365日の安定稼働と最速のレスポンスを求めるならば、VPS環境は「あれば便利」なものではなく、取引における「最低限のインフラ」であると認識すべきです。
💡 この記事の内容を実運用で活かすには?
この記事の内容を実運用で活かすには、正しい環境が必要です。
特にVPSを使わないと、このロジックは再現できません。

コメント