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

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

MQL5におけるCustomRatesDeleteは、ユーザーが独自に作成した「カスタムシンボル」のヒストリカルデータ(バー情報)から、指定した時間範囲のデータを削除するための関数です。

実務レベルの開発において、この関数は主にデータのクレンジング(校正)や動的なデータ更新で重宝されます。例えば、外部APIから取得したティックデータをバーに合成してカスタムシンボルを作成している際、特定の期間に異常値(スパイク)が含まれてしまった場合や、計算ロジックを変更して特定の期間だけデータを再生成したい場合に、この関数で古いデータを一旦削除します。

初心者が特につまずきやすいポイントは、この関数が「証券会社が提供する標準の銘柄(USDJPYなど)」には一切使用できないという点です。あくまで自分で作成したカスタム銘柄のデータベースを操作するためのツールであることを理解しておく必要があります。

2. 構文と戻り値

CustomRatesDelete関数の基本的な構文は以下の通りです。

int  CustomRatesDelete(
   string    symbol,      // カスタム銘柄名
   datetime  from,        // 削除開始日時
   datetime  to           // 削除終了日時
   );

パラメーター

  • symbol: データを削除したいカスタムシンボルの名前を指定します。
  • from: 削除対象とする期間の開始時刻(datetime型)を指定します。
  • to: 削除対象とする期間の終了時刻(datetime型)を指定します。

戻り値

  • 成功した場合:削除されたバーの個数を返します。
  • 失敗した場合:-1 を返します。

エラーの詳細を確認したい場合は、GetLastError()関数を呼び出すことで、原因(権限不足、銘柄が存在しないなど)を特定できます。

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

以下は、特定のカスタムシンボルから過去24時間分のデータを削除し、クリーンな状態にするスクリプトの例です。

//+------------------------------------------------------------------+
//| カスタムシンボルの特定期間のデータを削除するスクリプト                     |
//+------------------------------------------------------------------+
void OnStart()
{
   string customSymbolName = "MY_CUSTOM_USDJPY"; // 操作対象のカスタムシンボル

   // 削除する範囲を指定(例:現在から24時間前まで)
   datetime timeTo    = TimeCurrent();
   datetime timeFrom = timeTo - (24 * 60 * 60);

   // 1. まずカスタム銘柄が存在するか確認
   MqlSymbolInfo symbolInfo;
   if(!SymbolInfoInteger(customSymbolName, SYMBOL_CUSTOM))
   {
      Print("エラー: ", customSymbolName, " はカスタム銘柄ではありません。");
      return;
   }

   // 2. データの削除を実行
   int deletedBars = CustomRatesDelete(customSymbolName, timeFrom, timeTo);

   // 3. 結果の判定
   if(deletedBars >= 0)
   {
      PrintFormat("成功: %s のデータを %d 本削除しました。期間: %s ~ %s", 
                  customSymbolName, 
                  deletedBars, 
                  TimeToString(timeFrom), 
                  TimeToString(timeTo));

      // チャートを強制的に更新させる
      ChartRedraw();
   }
   else
   {
      PrintFormat("失敗: データ削除に失敗しました。エラーコード: %d", GetLastError());
   }
}

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

開発時に注意すべき重要なポイントがいくつかあります。

  1. 時間の境界値: fromto で指定した時間は「その時間ちょうど」を含みます。1分足のデータを削除する場合、to に指定した時刻のバーも削除対象になるため、削除しすぎないよう境界値の設計に注意が必要です。
  2. インデックスの再構築: 大量のデータを削除した後、メタトレーダー(MT5)内部でヒストリーの再インデックスが発生します。非常に大きなデータセットに対して頻繁に削除・追加を繰り返すと、ターミナルの動作が一時的に重くなることがあります。
  3. エラーコード 4014: もし CustomRatesDelete を呼び出してエラー 4014(システム関数が許可されていない)が出る場合、その銘柄が本当に CustomSymbolCreate で作成されたものか再確認してください。
  4. バックアップの欠如: 削除されたデータはゴミ箱には入りません。一度削除すると復元できないため、破壊的な操作を行う前には必ず元のデータソースを保持しておく仕組みを作りましょう。

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

カスタムシンボルで高度なバックテストを行い、理想的なロジックが完成したとしても、実運用で勝てるかどうかは「実行環境」に大きく依存します。自宅のPCや一般的な光回線を使った自動売買には、目に見えないネットワーク遅延(レイテンシ)という致命的なリスクが潜んでいます。

FXの相場はミリ秒単位で変動しており、証券会社のサーバーまでの物理的な距離が離れていると、EAが注文を出してからサーバーに届くまでの間に価格が滑る「スリッページ」が発生します。これが積み重なると、期待利得が削られ、バックテストでは右肩上がりだった資産曲線が実戦では右肩下がりになるという悲劇を招きます。プロのクオンツや専業トレーダーにとって、証券会社のサーバーに極限まで近いデータセンター内に設置された専用VPS(仮想専用サーバー)を利用することは、もはやオプションではなく「必須のインフラ」です。24時間安定稼働し、物理的な距離をゼロに近づけることで初めて、あなたのプログラムは本来のポテンシャルを発揮できるのです。

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

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

コメント

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