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

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

MQL5のFileReadBool関数は、バイナリ形式で保存されたファイルから「真(true)」または「偽(false)」の論理値を取得するための関数です。

実務レベルの開発において、この関数は「EAの状態管理(ステート保持)」に非常に重宝します。例えば、EAが不意のPC再起動やMT5のクラッシュで終了してしまった際、再起動後に「現在エントリー中なのか?」「特定のフラグが立っていたか?」を即座に復元するために、バイナリファイルへ状態を保存しておく手法が一般的です。

初心者がつまずきやすいポイントは、テキストファイル(CSVなど)とバイナリファイルの混同です。FileReadBoolは、FileWriteBoolで書き込まれた「バイナリデータ」を読むための専用関数であり、メモ帳で「true」と書いたテキストファイルを読み取れるわけではない点に注意してください。

2. 構文と戻り値

FileReadBoolの構文は非常にシンプルです。

bool  FileReadBool(
   int  file_handle    // ファイルハンドル
   );

パラメーター

  • file_handle: FileOpen関数によって返された、操作対象のファイル識別番号(ハンドル)を指定します。

戻り値

  • ファイルポインタの現在位置から読み取ったbool型の値(true または false)を返します。

※ファイルがバイナリ形式(FILE_BIN)で開かれている必要があります。

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

以下のコードは、EAが「ニュースフィルター稼働中」などのフラグをバイナリファイルに保存し、再度読み込むという実用的な例です。

//--- ファイル名
const string fileName = "TradingState.bin";

//+------------------------------------------------------------------+
//| EAの状態を読み込む関数                                              |
//+------------------------------------------------------------------+
bool LoadTradingFlag()
{
   bool result = false;

   // バイナリ読み込みモードでファイルを開く
   int fileHandle = FileOpen(fileName, FILE_READ|FILE_BIN);

   if(fileHandle != INVALID_HANDLE)
   {
      // ファイルからbool値を読み込む
      result = FileReadBool(fileHandle);

      // 読み終わったら必ず閉じる
      FileClose(fileHandle);
      Print("フラグを読み込みました: ", result ? "True" : "False");
   }
   else
   {
      Print("ファイル読み込み失敗。初期値(false)を使用します。");
   }

   return result;
}

//+------------------------------------------------------------------+
//| EAの状態を保存する関数                                              |
//+------------------------------------------------------------------+
void SaveTradingFlag(bool state)
{
   // バイナリ書き込みモードでファイルを開く
   int fileHandle = FileOpen(fileName, FILE_WRITE|FILE_BIN);

   if(fileHandle != INVALID_HANDLE)
   {
      // bool値をバイナリとして書き込む
      FileWriteBool(fileHandle, state);
      FileClose(fileHandle);
      Print("状態を保存しました: ", state ? "True" : "False");
   }
}

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

① ファイル形式の不一致(最重要)

FileReadBoolは、FILE_BINフラグを立てて開いたファイルに対してのみ使用してください。FILE_CSVFILE_TXTで開いたファイルに対して使用すると、予期せぬデータ変換が行われ、常にtrueが返される、あるいはランタイムエラーを引き起こす原因になります。

② ファイルポインタの位置

複数のデータを同じファイルに保存している場合、FileReadBoolを呼ぶたびにファイルポインタ(読み取り位置)が移動します。読み取る順番が書き込んだ順番と一致しているか、あるいはFileSeekで位置を正しく制御しているかを確認してください。

③ ハンドルのチェック

FileOpenが失敗してINVALID_HANDLEを返している場合、そのままFileReadBoolを実行するとエラーになります。必ずハンドルが有効であることを確認する if(fileHandle != INVALID_HANDLE) の処理を入れてください。

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

自動売買(システムトレード)の世界において、どんなに優れたロジックをMQL5で組み上げても、実行環境が「自宅PC」であればその優位性の多くが失われます。相場の急変時や指標発表時、ミリ秒単位の遅延(レイテンシ)が数pipsの滑り(スリッページ)を引き起こし、本来利益が出るはずのトレードが損失に変わることは珍しくありません。

自宅の光回線は、ブローカーのサーバーとの間に物理的な距離があるだけでなく、プロバイダー経由の複雑な経路を通るため、ネットワーク遅延は避けられません。約定スピードを極限まで高め、スリッページを最小限に抑えるには、取引サーバーの至近距離に配置された「専用VPS」の活用が不可欠です。24時間安定稼働し、低レイテンシ環境で執行されるEAこそが、プロのクオンツエンジニアが求める真の自動売買環境といえます。

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

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

コメント

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