無料でロボットをダウンロードする方法を見る
Telegram上で私たちを見つけてください。
私たちのファンページに参加してください
興味深いスクリプト?
それではリンクにそれを投稿してください。-
他の人にそれを評価してもらいます
スクリプトを気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
エキスパート

History Integrity Auditor - MetaTrader 5のためのエキスパート

Quoc Dat Quach
Quoc Dat Quach
Software engineer with 8 years in fintech and mobile, writing MQL4/MQL5 since 2017. I build Expert Advisors, indicators, trade and risk-management panels and utilities for MT4/MT5, and I trade forex and gold on MT5 myself.
| Japanese English Русский 中文 Español Deutsch Português 한국어 Français Italiano Türkçe
ビュー:
20
評価:
(1)
パブリッシュ済み:
MQL5フリーランス このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動

すべてのバックテスト、すべての指標、そしてすべての最適化結果は、その取引プラットフォームがたまたま保持しているバー履歴に基づいており、その履歴を監査する人はほとんどいません。 このツールは、ターミナルがエキスパートアドバイザーに渡すバーデータを読み取り、その中に含まれる6種類の不具合——不可能なOHLC値、バー時間の不整合、ブローカーが価格提示を行っていたと主張しているにもかかわらず欠落しているバー、ティックや値幅が全くないバー、 ブローカー自身のM1シリーズと一致しないバー、およびスプレッドがゼロ、あるいは設定した上限値を超えているもの。

hia-marketwatch-panel

5つのマーケットウォッチ銘柄、M15、各5,000本のクローズ済みバー;検査には約1秒かかります。 注目すべきは「Sess%」の列です。XAUUSDは99.80、他の4つは100.00となっています。一方、「Grid%」は68~100の範囲で、主に各銘柄の週末分の割合を示しています。 これは、後述のジャーナルブロックと同じ監査結果であり、スクリーンショット用に2分後に別のチャートで再度実行したものです。そのためファイルのプレフィックスが異なりますが、数値はすべて同一です。この処理では「finding」ファイルがオフにされており、「csv rows」はそのファイルの行数をカウントしているため、85件の「finding」の横に「0」と表示されています。 出荷時のパネルは暗いプレートに明るい文字でしたが、ここでは白地に黒文字に色変更されています。

問題点

欠落したバーは表示されません。 ローソク足は、その間の時間が1期間であろうと3時間であろうと、チャート上では並んで表示されるため、履歴に空白があると、まるで市場が静かな状態であるかのように見えます。ストラテジーテスターもこれについて警告しません。テスターは与えられたデータをモデル化するだけであり、空白を跨いでテストされた戦略は、本来なら損失を出していたはずの1時間をスキップした市場でテストされたことになるのです。

重要な欠陥は、決して珍しいものではありません。終値が自身の高値を上回るバーは、現実であれば失敗していたはずのストップロステストに合格してしまいます。バーの時間が重複していると、「バー数分前」という計算がすべて間違ったバーを指すことになります。ティック数がゼロのバーは、市場が決して提示しなかった価格です。 バーがブローカー独自のM1バーと一致しない時間枠では、2つのインジケーターが2つの異なる過去を読み取っていることになります。

これらすべてに対する一般的なテストは、チャートをスクロールして何か不自然な点がないか確認することです。しかし、このテストでは何も見つからず、しかも説得力のある形で何も見つからないのです。

測定対象

1つの時間枠における直近N本のクローズバー について、1つの銘柄、リスト、またはマーケットウォッチ内のすべてを対象とした6つの独立したチェック。各チェックには手作業で再計算可能な定義があり、各検出結果はバー時刻と共にCSVファイルに書き込まれるため、レポートを鵜呑みにするのではなく監査することが可能です。

  • OHLCの一貫性。 高値 < 安値、始値または終値が [安値, 高値] の範囲外、あるいは4つの価格のいずれかがゼロ以下である場合。違反した条件ごとに1バーにつき1つの検出結果が生成されます。バーが反転している場合、始値と終値が同時に高値より上かつ安値より下になるため、正当に複数の検出結果が生成されます。
  • バーの時間。 あるバーから次のバーへと時間が増加しない場合(重複または順序が乱れたバー)、および始値の時間が期間グリッド上にないバー — time % PeriodSeconds() != 0 —。これは、不適切なインポートやサーバーセッションの障害によって構築された履歴に現れる特徴です。
  • シンボル固有のセッションに対する欠落バー。 ツールは、連続する各バーのペアについて、 その間にグリッドの開始点がいくつ欠落しているかを計算します。 そして、この数値を実用的にする重要な部分として、SymbolInfoSessionQuote に対し、各欠落した開始点において市場が本来は気配値を提示しているはずだったかどうかを問い合わせます。 各クオートセッション外の欠落したオープニングは「説明済み」(セッションテーブルにおける夜間、週末、祝日)とみなされます。一方、セッション内の欠落したオープニングは「説明なし」 として扱われ、別途カウントされます。 セッション記録が全くない銘柄は「未分類」として報告されます――決して黙って「説明済み」として扱われることはありません。以下で測定したブローカーでは、そのようなケースも、M1ウィンドウが空になるケースも発生しませんでした。これらは処理されていますが、ここでは実例として示されていません。
  • 空のバーとフラットバー。「tick_volume == 0」は、ティックが全く含まれていないバーです。「open == high == low == close」で、かつそのバー内にティックが含まれている場合は、フラットバーとなります。これは、取引が停滞している時間帯では許容されますが、流動性の高い時間帯では不審と見なされ、インジケーターがバーの範囲で除算を行う前に把握しておく価値があります。
  • M1クロスチェック。 監査対象の各バーは、そのバー自身のウィンドウ内のM1バーから再構築されます(最初のオープン、最高高値、最安値、最後のクローズ、ティックボリュームの合計)し、ブローカーがより高い時間枠で提供するバーと比較されます。 M1の履歴が実際にカバーしているウィンドウのみが比較対象となります。M1のカバー範囲を超えるウィンドウは「カバー範囲外」として報告され、カバー範囲内でありながらM1バーが全く存在しないウィンドウには、独自のカウンターが割り当てられます。偏差はポイント単位で測定され、許容誤差をオプションで設定可能です。
  • スプレッドの妥当性。 保存されたスプレッドがゼロのバーの数、設定した上限を超えるスプレッドのバーの数、および監査対象のバーにおけるスプレッドの最大値と平均値。スプレッドがすべてゼロの履歴は、コストに関するいかなる質問にも答えられない履歴です。

主要な指標は「セッションカバレッジ」です。これは、ブローカー自身のセッションテーブルに存在すると記録されているオープンポジションのうち、実際にバーが存在する割合を指します。その隣には「グリッドカバレッジ」——夜間や週末を含むすべての時間帯における同様の比率——が表示されます。これは、これだけでは主に監査対象となった週末の数がわかるだけだからです。

測定例

Exnessのデモ端末(ビルド6230)のMarket Watchに掲載されている5つの銘柄(M15)、各銘柄の直近5,000本のクローズ済みバーについて、2026年10月2日 08:07(サーバー時間)に約1秒で監査を実施しました。

銘柄 バー 期間(日数) ギャップ 欠落した始値 セッション中の欠損 OHLC 時間欠損 空 / 横ばい M1の比較/不一致/最大偏差 グリッドのカバー率 セッションのカバー率
XAUUSD 5 000 76.5 55 2 342 10 0 0 0 / 0 5,000 / 0 / 0.0000 ポイント 68.10 % 99.80 %
EURUSD 5 000 72.1 10 1 920 0 0 0 0 / 0 5,000 / 0 / 0.0000 ポイント 72.25 % 100.00 %
BTCUSD 5,000 52.1 0 0 0 0 0 0 / 0 5,000 / 0 / 0.0000 ポイント 100.00 % 100.00 %
GBPUSD 5 000 72.1 10 1 920 0 0 0 0 / 0 5,000 / 0 / 0.0000 ポイント 72.25 % 100.00 %
USDJPY 5 000 72.1 10 1 920 0 0 0 0 / 0 5,000 / 0 / 0.0000 ポイント 72.25 % 100.00 %

2つのカバレッジ欄を並べて比較してください。それこそが、これらを分けることの唯一の根拠だからです。グリッドカバレッジは、すべてのFX銘柄で68~72%、BTCUSDで100%と示していますが、これは単にFXが週末に取引を終了するのに対し、仮想通貨はそうではないという事実以外、何も測っていません。 セッションカバレッジ(ブローカー独自のセッション表で指定されている始値のみを対象とした同じ比率)は、4回で100.00%、XAUUSDでは99.80% となっています。この2つの列のうち1つの数値には誤りがあり、残りはカレンダーによるものです。

その0.20%は単一のギャップであり、手作業で確認できるほど小さいものです。調査結果ファイルには、これに関する1行が記録されています:

シンボル;期間;チェック;バーインデックス;バー時間;フィールド;詳細;値 XAUUSD;M15;C3_GAP;3304;2026.09.07 18:30:00;gap;class=unexplained in_session=10;14

C3_GAPの行において、bar_timeは欠落 している最初の始値であり、bar_indexは、監査済みの最も古いバーを0として数えた、その欠落に続くバーのインデックスです。したがって、この行は次のように読み取れます: 2026年9月7日(月)において、18:15に始値がついたバーの次は22:00に始値がついたバーであり、18:30から21:45までの14つの始値データが欠落しています。 このブローカーの規定によると、月曜日の金(Gold)の取引セッションは 00:00~20:58 および 22:00~24:00 です。 欠落している14回の始値のうち、18:30から20:45までの10回は最初のセッション内に含まれており、残りの4回(21:00から21:45)は指定された休憩時間帯に該当します。 説明のつかないものが10件、説明のついたものが4件であり、これがその行に示されている内容です。この取引プラットフォームでのあらゆるバックテストが黙ってスキップしてしまう、流動性の高い月曜日の夕方の2時間半が、チャート上では2本のローソク足が並んでいる状態となっています。

残りの2,332の欠落したXAUUSDの始値は、カレンダー上の要因によるものです。週末11回(各196回の始値)、4回ずつの日次休場43回、そしてその月曜日の空白期間に含まれる4回の休場による始値――2,156+172+4です。 各FXペアの1,920件は、10回の週末によるものであり、それ以外には何もありません。15分足で10回×192回の始値は、まさに1,920件になります。 これらはグリッドカバレッジを無意味にする数値ですが、それでも記載する価値があります。なぜなら、「説明された」始値がセッション表と一致しない銘柄は、そのセッション表が間違っていることを示しているからです。

監査の残りの部分では何も見つかりませんでしたが、これもまた一つの結果です: 25,000本のバー全体を通じて、不可能なOHLC値はなく、重複やグリッド外のバー時間もなく、空のバーやフラットバーもなく、25,000本のバーすべてがブローカー自身のM1シリーズと末尾の桁まで一致しており、最大偏差は0.0000ポイントでした。 BTCUSDについては、もう1点付け加える価値があります。52日間でギャップがゼロであり、5,000本のバーすべてにおいてスプレッドが正確に700ポイントでした。固定スプレッドは欠陥ではありませんが、測定基準でもありません。それに基づいて調整された戦略は、不変の値に基づいて調整されたものとなります。

時間ごとの欠損値

XAUUSD M15、5,000本:欠落しているすべてのバーは、サーバー日の時間ごとに始値が設定されており、ブローカー独自のセッション表でその時間について規定されている内容に基づいて分類されている。 ハッチングが施されたバーは、相場セッション外での始値を示しています。11回の週末分(これが全時間帯をカバーしている理由)に加え、21:00の毎日の休憩時間分です。実線の10本は、25,000本のバーの中でセッション表では説明できない唯一の始値であり、すべてある月曜日の夕方に集中しています。 今回の実行におけるバーダンプおよびセッションダンプから抽出されたものです。数値はツール自体が書き出しており、図形そのものはツールが生成したものではありません。

M1足で同じ5つの銘柄について、スプレッド制限を20ポイントに設定した場合は、正反対の種類のページとなり、チェックが作動した際の様子がわかるため、1段落を割く価値があります:10,613件の検出結果、EURUSD / GBPUSD/USDJPYでそれぞれ20/22/40本のフラットバー、5,000本の 金およびBTCUSDバーすべてで スプレッドが20ポイントを超え、M15では開値欠落がなかった3つの通貨ペアにおいて、セッション内で25/28/20本の開値欠落が確認された。 最後の数値は矛盾ではありません。5,000本のM1バーは1週間のうち3日半に相当し、これは全く異なる時間枠であり、セッション内の1分間の欠落は15分間の欠落よりもはるかに一般的だからです。 M1では、2つのカバレッジ欄の数値も一致しています(GBPUSDでは99.44と99.44)。これは、これほど短い期間には週末が含まれておらず、グリッドの数値が過大評価される余地がないためです。

hia-m1-spread-panel

M1でスプレッド制限を20ポイントに設定した同じツール: FlatとSprHiには数値が表示され、InSessはM15では問題なかった通貨ペアにギャップを検出します。また、M1bad列には値が表示されます。これは、M1では監査対象期間より前のデータが存在しないため、クロスチェックが「オフ」と報告されるからです。結果表には、測定されていない項目に対してゼロが表示されることはありません。

レポートの独立した検証

上記のカウンターは、このツールとコードを一切共有しない別のシステムによって検証されます。Pythonスクリプトは、EAが書き出すバーダンプとセッションダンプという生データのみを読み取り、上記の定義に基づいてOHLC、時間、ギャップ、空/フラット、スプレッドの各チェック項目をすべて再計算し、その結果をEA自身のサマリーファイルと比較します。

本記事の背景となる実行データ(M1、M15、W1にわたる15のシンボル/期間の監査)において、このスクリプトは215のカウンターを 比較し、不一致は0件と報告しました。 これには、バーの時刻とセッションテーブルのみから再計算された、前述のセッション内の10回のギャップ発生も含まれています。

再集計ではカバーされていない点が2つあります。M1のクロスチェックは、これら215のカウンターには含まれていません。スクリプトはターミナル自体からM1のシリーズを抽出してバーを再構築できますが、今回の数値算出ではその処理は実行されなかったため、5000件の比較のうち不一致0件という結果は、EA自身の集計値に基づいています。 また、両側でゼロとなるカウンターは、単にゼロとして確認されるのみです。すべての実行において、不可能なOHLC値、非増加またはグリッド外時間、整数期間でないギャップ、空のバー、 M1の不一致も、M1バーを含まないM1カバレッジ内のウィンドウも、許容誤差の範囲内で吸収できる逸脱も一切確認されませんでした。ここで測定されたデータにおいて、これらの分岐が実行されることは一度もありませんでした。

このブローカーが決して生成しない欠陥の定義を確定づけるのは、再集計スクリプト自体に対する2つ目の、より小規模なテストである。これは、欠陥を手作業で書き込み、その横に予想されるカウントを記載した12バーの合成履歴を用いたもので、29のアサーションがあり、端末は関与していない。 EAは同じ述語を同じ順序で適用しますが、その動作は測定というよりは、2つのソースを並べて読み解くことに近いものです。 このツールの決定事項のうち2つは、依然としてこのフィクスチャに由来しています。1つは、反転したバーでは1つではなく5つの検出結果が生成されなければならないというものです。これは、間隔が裏返しになると、始値と終値がそれぞれ高値より上かつ安値より下になるためです。もう1つは、単一の分割されていないカバレッジ数値はほぼ無意味であったというものです。

また、このツールは自身の計算を監査し、各恒等式の両辺を出力するため、Pythonを一切使わずにレポートを確認することができます:

監査 1        : バー数 25000 + 欠落数 8102 = 33102、予想オープン数 33102 -> OK
監査 1        : expected_openings 33102、監査対象期間内のグリッド開始値 33102 -> OK (5銘柄 OK、0銘柄不適合)
監査 2        : C1 0 + C2 0 + C3 85 + C4 0 + C5 0 + C6 0 = 85、検出結果の合計 85 -> OK
監査 2        : レポートに渡された不具合 85、不具合ファイルの行数 85、ガードによって除外された数 0 -> OK

入力

入力 デフォルト 機能
記号:空 = チャート記号、* = マーケットウォッチ、それ以外は , または ; で区切られたリスト 空 ターミナルが認識しないシンボルは、通常レベルのジャーナル行が1行スキップされ、カウンター行は一切生成されないため、再集計においてバーダンプと測定値のない行がペアになることは決してありません。
監査対象の時間枠(0 = 現在のチャート期間) 現在 リストにある任意の時間枠。グリッドチェックは、D1以上では、始値が固定秒グリッド上にないため自動的に無効になり、ギャップチェックは、2つの始値間の距離が一定ではないMN1では自動的に無効になります。
シンボルごとの監査対象バー数(クローズ済みバー、新しい順) 5000 クローズ済みバーのみ。形成中のバーは定義上変化するため、履歴の欠陥ではなく市場の欠陥として報告されます。
C1: OHLCの一貫性をチェック true 高値 < 安値、始値または終値が当該バーの範囲外にある場合、4つの価格のいずれかがゼロ以下である場合。違反した述語1つにつき、1バーあたり1件の検出結果。
C2: バーの開始時刻のチェック(順序、重複、グリッド) true あるバーから次のバーにかけて時間が増加していない場合、および始値が期間の倍数でない場合。
C3: 相場セッションに対する欠落バーのチェック true 見出しの数値を算出するチェック。銘柄のセッションテーブルが必要です。これがない場合、ギャップは「説明済み」ではなく「未分類」として報告されます。
C4: 空のバー(ティックなし)および横ばいのバーをカウントする true tick_volume == 0 かつ、open == high == low == close で、かつティックが含まれている場合。
C5: M1から各バーを再構築し、比較する true 処理負荷が高く、注意が必要な点:M15で5,000本以上のバーの場合、5つの銘柄で約1秒かかりますが、W1で55年分の履歴の場合、4本ごとに1回のM1リクエストが必要となり、4つの銘柄で7分以上かかりました。そのほとんどは、ターミナル自身の履歴リクエスト内で処理されました。 長い履歴を最初に処理する際は、これをオフにしてください。
C5: このポイント数までの偏差を無視する 0.0 より長い時間枠が丸め処理で構築されているブローカー向けの許容範囲。0 に設定すると、すべての差異が報告されます。
C6: この値を超えるスプレッドのあるバーにフラグを立てる(0 = オフ) 0 制限値を超えるバーをカウントします。制限値の設定の有無にかかわらず、スプレッドがゼロのバー数、最大スプレッド、平均スプレッドが報告されます。
ジャーナル:チェックごとに表示される調査結果の例 5 各チェックについて、欠陥の数だけでなく欠陥そのものがジャーナルに表示されるよう、完全に印刷される実際の行数を指定します。
不具合1件につきCSV行を1行作成する true 不具合ファイル:不具合ごとにバー時間を記載した1行を記録し、レポートを鵜呑みにするのではなく監査できるようにする。
また、監査済みのすべてのバーをダンプする(独立した再集計のため) false ターミナルが処理したとおりにバーを正確に書き出し、さらにセッションテーブルも記録します。これにより、独立した再集計が可能になります。 これをオフにすると、以前の実行のダンプが削除されます。ファイルごとに1行のジャーナルが記録されます。5,000バーのダンプが500バーのカウンター行の隣にあるような状況は、まさにこのツールが検出するために存在する、目に見えない誤った数値です。
結果テーブルをチャート上に描画する true 非視覚的なテスターでは、失敗する代わりにジャーナル行を出力してこの機能を自動的に無効にします。
パネルの隅 左上 テーブルのアンカーコーナー。
パネルのフォントサイズ 8 テーブルの幅が 1 つのチャートラベルで表示できる幅よりも広いため、複数のラベル列として描画されます。小さなチャートでは、このサイズを小さくしてください。
パネルの X オフセット(px) 10 位置。
パネルの Y オフセット(px) 18 位置。
N分ごとに再監査(0 = 1回のみ監査) 0 チャート上に表示し続ける場合。ターミナル自身の時計を使用するため、ストラテジーテスターでも同じ設定で動作します。

レポート

このツールが測定したすべてのデータは、1つのブロックとしてジャーナルに記録され、同じ数値がCSVにも出力されます。以下は、上の表の実行結果に関するそのブロックをそのまま転記したもので、銘柄ごとの部分はXAUUSDのみを表示しています。他の4つの銘柄については、同じ10行が繰り返されます。

=== 履歴整合性監査ツール ============================================ 銘柄数:5(マーケットウォッチ) 期間:M15 銘柄ごとのバー数:5000(クローズ済みバー、最新のものから順) チェック項目: C1 → C2 → C3 → C4 → C5 → C6 リミット 0 ポイント C5 許容誤差:0.00 ポイント チェックごとのジャーナル例:5 回 更新頻度:1回 ファイル接頭辞: HistoryIntegrityAuditor\MarketWatch_M15_62879570657522_*.csv シンボル 1/5:XAUUSD シンボル 2/5:EURUSD シンボル 3/5:BTCUSD シンボル 4/5: GBPUSD シンボル 5/5:USDJPY =================================================================== HistoryIntegrityAuditor:パス 1、5つのシンボル、M15、サーバー時間 2026.10.02 08:07:11 で開始 HistoryIntegrityAuditor: C3_GAP 例 1/5:XAUUSD M15 バー 2026.07.17 21:00:00 ギャップクラス=説明済み in_session=0 196 [... 同じチェックの例 2~5 ...] === 履歴整合性監査ツール - パス1の結果 ======== 銘柄 バー数 グリッド% セッション% OHLC 時間 ギャップ InSess 空 フラット M1bad SprHi XAUUSD 5000 68.10 99.80 0 0 55 10 0 0 0 - EURUSD 5000 72.25 100.00 0 0 10 0 0 0 0 - BTCUSD 5000 100.00 100.00 0 0 0 0 0 0 0 - GBPUSD 5000 72.25 100.00 0 0 10 0 0 0 0 - USDJPY 5000 72.25 100.00 0 0 10 0 0 0 0 - XAUUSD M15:2026年7月17日 20:30:00 から 2026年10月2日 07:45:00 までの 5000 バー、 76.47日、10セッション、ポイント 0.001、サーバー時刻より0回の始値遅れ XAUUSD M15:相場セッション 日 22:01-24:00 | 月 00:00-20:58, 22:00-24:00 | 火 00:00-20:58、22:00-24:00 | 水 00:00-20:58、 22:00-24:00 | 木 00:00-20:58、22:00-24:00 | 金 00:00-20:58 XAUUSD M15: グリッド開始点 7342 = バー数 5000 + 欠落 2342、整合性 OK、グリッドカバレッジ 68.10%、セッションカバレッジ 99.80% XAUUSD M15: C1 オン、合計 0(高値<安値 0、始値>高値 0、始値<安値 0、終値>高値 0、終値<安値 0、非正 0) XAUUSD M15: C2 有効、合計 0(増加していない 0、グリッド外 0)、期間の整数倍でないステップ 0 XAUUSD M15: C3 有効、ギャップ 55(説明済み 54、説明不能 1、未分類 0)、 欠落 2342、セッション内 10、未分類 0、最大ギャップ 196スロット(2026年7月17日 20:45:00以降) XAUUSD M15: C4有効、空 0、フラット 0 XAUUSD M15: C5有効、M1のカバー範囲は2026年06月23日 03:04:00~2026年10月02日 08:07:00、 比較数 5000、不一致 0、ウィンドウ空 0、カバレッジ外 0、最大偏差 0.0000 ポイント XAUUSD M15: C6 リミットオフ、スプレッドゼロ 0、上限超過 -、最大 238 ポイント、平均 175.1568 ポイント XAUUSD M15: この銘柄の調査結果 55 [... EURUSD、BTCUSD、GBPUSD、USDJPY についても同様の10行 ...] 銘柄 : 監査済み5、スキップ0 合計:バー数25000、欠落8102、セッション内10、検出結果85 監査1:バー数25000 + 欠落8102 = 33102、expected_openings 33102 -> OK 監査 1:予想オープン数 33,102、監査対象期間内のグリッドオープン数 33,102 -> OK(5銘柄 OK、0銘柄不適合) 監査 2: C1 0 + C2 0 + C3 85 + C4 0 + C5 0 + C6 0 = 85、検出結果合計 85 -> OK 監査 2:レポートに引き渡された検出結果 85、検出結果ファイル内の行数 85、ガードによって除外された数 0 -> OK ファイル概要:HistoryIntegrityAuditor\MarketWatch_M15_62879570657522_overview.csv (5行) ファイルの検出結果: HistoryIntegrityAuditor\MarketWatch_M15_62879570657522_findings.csv (85 行) ファイルの概要:5 ファイル、5 行;セッション 5 ファイル、35 行; バー 5 ファイル、25000 行 ファイルのパターン:HistoryIntegrityAuditor\MarketWatch_M15_62879570657522_<symbol>_{summary,sessions,bars}.csv パネル:1452 × 294 ピクセル、16 個のラベル、最も長い行は 119 文字 ===================================================================

注:SprHi(表内)およびlimit(C6行)に注目してください。スプレッド制限は0であったため、チェックは無効となっており、この列にはゼロではなくダッシュが表示されます。 このツールは、結果表のすべての列および銘柄ごとの行のすべての数値に対してこのルールを適用します。チェックが実行されなかった場合は「-」が表示され、チェックが実行されて異常が見つからなかった場合は「0」が表示され、これら2つの文字が同じになることはありません。 これは見た目以上に重要です。ギャップチェックがオフの場合、バー数 / (バー数 + 欠落数) として計算されたカバレッジ数値は、確実に100.00% と表示されてしまいます。

実行の結果、MQL5\Files\HistoryIntegrityAuditor\ ディレクトリに 5 つのファイルが生成されます:

  • <prefix>_overview.csv — リスト内のシンボルごとに1行ずつ(監査できなかったシンボルも含む)で、それぞれのステータスが記載されています。
  • <prefix>_findings.csv — 欠陥ごとに1行:シンボル、期間、チェック、バーインデックス、バー時間、フィールド、詳細、値。
  • <prefix>_<symbol>_summary.csv — 1つのシンボルごとのすべてのカウンター(62列)。算術同一性も含まれます。
  • <prefix>_<symbol>_sessions.csv — ブローカーが宣言したシンボルの気配値セッション。これは、ギャップが説明可能かどうかを判断するための入力データとなります。
  • <prefix>_<symbol>_bars.csv — オプション。ターミナルが提供したままの、監査済みのバーデータ。

最後の2つは、このツール以外でもレポートの検証を可能にするものであり、これが上記のセクションの主題です。プレフィックスには銘柄タグ、時間枠、チャートIDが含まれているため、2つのチャートが互いの証拠を上書きすることはなく、テスターの実行時には、ライブ実行のファイルの上書きではなく、エージェント自身のサンドボックスに書き込まれます。

使用方法

  1. 実際にテストを行う銘柄と時間枠のチャートにこれを添付し、バー数をバックテストで使用する範囲以上になるように設定して、ジャーナルを確認してください。
  2. まずは「セッションカバレッジ」と「セッション内の欠落」から確認してください。これら2つの数値によって、バックテストが実際の市場で実行されたのか、それとも市場の模倣データで実行されたのかが判断できます。
  3. 結果ファイルの C3_GAP 行を、bar_time の時間順に並べ替えます。1日の特定の1時間に集中しているデータ欠落は、通常、サーバーまたはセッションの問題です。データ欠落が均等に分散している場合は、通常、ダウンロードが不完全であることが原因です。
  4. ターミナルの「シンボル」ダイアログで「更新」を 押すか(または履歴を削除して再ダウンロードさせる)、監査を再度実行してください。2回の実行結果の差分こそが、ブローカー側に欠けているデータではなく、ターミナル側にローカルで欠落していたデータです。
  5. EAが取引を行う時間枠について、M1のクロスチェックを有効にします。履歴の更新後も不一致が残っている場合は、ブローカーに問い合わせる価値があります。これは、ブローカー自身の2つのデータ系列に不一致があることを意味するからです。
  6. ブローカー、サーバー、または履歴の取得方法に関する設定を変更した後、再度実行してください。データの品質は、特定のシンボルではなく、特定の時点における特定のターミナルの特性です。

制限事項、平易に説明すると

  • このツールは、ターミナルが保持する 履歴(つまり、テストで使用される履歴)を監査するものであり、ブローカーのサーバーがまだ送信し得るデータではありません。履歴の更新により、ここにある数値はすべて変わる可能性があり、上記のステップ4はまさにその理由のために存在します。
  • セッションテーブルの呼び出しで説明された「ギャップ」は、依然として実際の欠落である可能性があります。なぜなら、セッションテーブルはブローカーのステートメントでもあるからです。このツールは両方の数値を表示するため、2つの主張が混同されることなく比較できます。
  • M1のクロスチェックは、M1の履歴が及ぶ範囲についてのみ判断を下すことができます。設計上、それより古いバーについては何も示さず、スキップされたウィンドウの数は、比較対象となった数と並べて表示されます。
  • ティックデータは監査対象外です。リアルティックによるバックテストには、独自の欠陥を持つ第2のデータセットが存在しますが、本ツールはそれを参照しません。
  • 本ツールは報告を行うだけで、修正は行いません。ここでの処理によって履歴に書き込まれることはなく、また、本ツールによる発見事項そのものがブローカーの過失を証明するものではありません。例えば、1時間オフラインだったターミナルでも、フィードが停止した場合と同様にバーが欠落します。
  • 取引機能、DLL、ネットワークアクセス、外部ファイルは一切使用しません。バーデータを読み取り、MQL5\Files フォルダに CSV ファイルを書き出します。

MetaQuotes Ltdによって英語から翻訳されました。
元のコード: https://www.mql5.com/en/code/77919

Mirror Hedge EA (Same terminal and account only) Mirror Hedge EA (Same terminal and account only)

マジックナンバーに基づいて、同じヘッジ口座内で別のEAによって開設、変更、決済された取引をミラーリングします。デフォルトでは方向が反転(買い↔売り、SL↔TP)されるため、実際のスプレッド、スリッページ、約定条件を用いて、戦略の逆の取引をフォワードテストすることができます。

Alpha Engine: Intrinsic-Time Coastline Trader Alpha Engine: Intrinsic-Time Coastline Trader

オルセン・グループの「アルファ・エンジン」を移植したものです。8体のリミットオーダー型エージェントが、ヘッジ口座において、内在時間に基づく方向転換を取引します。これらはオーバーシュート時にポジションを追加し、反転時に利益確定を行います。

WaveMaster Pro EA WaveMaster Pro EA

WaveMasterオシロスコープ向けシグナル駆動型自動化。 WaveMasterオシロスコープ用の自動実行エンジン。信号バッファをリアルタイムで読み取ります。包括的なリスク管理、トレーリング、ブレークイーブン機能が組み込まれています。

Closed Trades Exporter MAE MFE Closed Trades Exporter MAE MFE

M1の履歴から算出されたポイントおよび金額単位の「最大マイナス変動(MAE)」と「最大プラス変動(MFE)」、および各取引が捉えた利用可能な変動幅の割合を記載した取引データをCSV形式でエクスポートします。