私たちのファンページに参加してください
- ビュー:
- 15
- 評価:
- パブリッシュ済み:
-
このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動
「実際のティックに基づく全ティック」モードでのバックテストでは、画面に表示されるローソク足に基づいて取引を行うわけではありません。このモードでは、ターミナルが保持するティック履歴を1ティックずつ再生し、すべてのストップ注文、指値注文、スプレッドフィルターがそれらのティックに基づいて決定されます。 このツールは、そのティック履歴を監査します。特定の銘柄、リスト、またはマーケットウォッチ全体について、直近数日分のティックを読み取り、その中で5つの問題カテゴリ(不可能な気配値、破損したタイムスタンプ、 中央値スプレッドの倍数で測定される1ティック価格反転、ブローカー自身の気配値配信セッション内の通信途絶、およびティックとM1バーが一致しない分。

マーケットウォッチの銘柄5つ、各3日間、日曜日のサーバー時間02:51:02に1回実行、所要時間1.3秒。 S ptsはポイント単位のスプレッドの中央値、Rev≥10Sは中央値のスプレッドの10倍以上の1ティック反転をカウントし、Silence unexpl.はブローカー自身のセッションテーブルでは説明できない60秒以上のギャップをカウントし、最後の3列はティックとM1の整合性チェックの結果である。 ページに収まるようパネルフォントサイズ4で出力しました。デフォルトは8です。
問題点
ローソク足は要約です。1分間の4つの価格を保持し、それらが到着した順序は無視されるため、2ドル下落してすぐに元に戻った相場は、チャート上ではせいぜいヒゲとして表示されるだけであり、その1分間の残りの部分がすでにその範囲をカバーしている場合は、まったく何も表示されません。 テスターはローソク足を見ません。テスターは価格データを見ており、その範囲内にあるストップロスは、その価格データに基づいて約定されます。
ティックは数が多すぎるため、誰も目視で読み取ることはありません。以下で測定した金(ゴールド)の銘柄では、ターミナル1日あたり約30万ティックのデータが記録されています。 したがって、リアルティックによるバックテストが「実測値」なのか「虚構」なのかを決定づけるような疑問は、通常、問われることさえありません。アスクがビッドを下回る気配値は存在するのでしょうか?時間が逆行することはあるのでしょうか?セッション中にティックが全く発生しない時間帯はあるのでしょうか?インジケーターが読み取るM1バーは、テスターが取引するティックと一致しているのでしょうか?
このツールは、5つの銘柄と3日分について、これらを2秒未満で検証し、品質のパーセンテージではなく、カウント数、ミリ秒単位のタイムスタンプ、およびCSV行数という形で回答します。
測定対象
ウィンドウ[直近のティック - N日、直近のティック]に対して5つのチェックを行い、両端は分単位に切り捨てられます。ウィンドウは実時計の時刻ではなく、銘柄の最新のティックで終了するため、日曜日に実行すると、直前に終了した週の最終数日間が監査対象となります。 以下の定義はすべて厳密であり、すべての検出結果はミリ秒単位のタイムスタンプとともにCSVに書き込まれるため、レポートの内容は「信じる」のではなく「再計算」することができます。
- 気配値(K1)。 ビッドが 0 以下、またはアスクが 0 以下のティック;クロス 気配(アスク < ビッド);ロック 気配(アスク == ビッド)。ロック気配はカウントされますが、違反とは見なされません — 一部のフィードでは正当に価格が重なる場合があります。
- タイムスタンプ(K2)。 time_mscが前のティックの値より早い(過去方向)ティック;リピート(time_msc、ビッド、アスクが前のティックと同一)のティック;およびtimeフィールドの値がtime_msc / 1000と一致しないティック。
- 1ティック反転(K3)。 チャートの価格を変更するティックのシーケンスにおいて、3つの連続した価格 p0、p1、p2 が反転を形成するのは、p1 への移動と p1 からの移動の符号が反対であり、かつ p2 が p0 からの変動幅の4分の1以内に収まる場合である。 サイズは 2 つの変動のうち小さい方の値(ポイント単位)であり、ウィンドウ全体における当該銘柄のスプレッドの中央値 S の倍数として報告されます。2、5、10、20 スプレッドごとにカウントされ、少なくとも InpReversalMult スプレッド(デフォルトは 10)の反転が検出されるたびに、1 件の検出結果となります。 したがって、金での 10 スプレッドと EURUSD での 10 スプレッドは、同じものとなります。
- 沈黙(K4)。 InpSilenceSeconds(デフォルトは 60)以上の間隔を空けて 2 つのティックが連続して発生しない場合。 このツールは、沈黙の各分および最後の 1 秒について SymbolInfoSessionQuote に問い合わせを行います。そのいずれかが相場セッションの範囲外にある場合、その沈黙は説明可能(日中の休憩、週末など)とみなされます。すべてが範囲内にある場合は、説明不能と みなされ、検出結果となります。 セッション記録が全くない銘柄は「未分類」として報告され、「説明済み」として報告されることはありません。
- M1バーに対するティック(K5)。 ウィンドウ内の各分について、その分のすべてのティックにおけるチャートの最高値と最安値を、ブローカーのM1バーの高値と安値と比較します。 価格を動かしたティックだけでなく、すべてのティックを対象とします。1分間の最初のティックは、多くの場合アスクのみを変更し、そのビッドは依然としてバーの始値のままです。価格変動を伴うティックのみをカウントした場合、このツールの開発中にEURUSDの1日分において144件の誤った不一致が発生しましたが、すべてのティックをカウントした場合は不一致は発生しませんでした。 下位にティックがないM1バーは「検出対象」となります。つまり、ストラテジーテスターがティックを生成しなければならない1分間です。同様に、ティックはあるがバーがない1分間や、高値または安値がInpBarTolPoints以上異なる1分間も検出対象となります。
このツールは自身の演算結果をチェックし、各銘柄について両方の数値を出力します。異常検出件数は11個の異常検出カウンタの合計と一致しなければならず、その銘柄の異常検出ファイルに書き込まれた行数も、その両方の値と一致しなければなりません。
測定例
Exnessデモターミナル(ビルド6230)のマーケットウォッチに表示される5つの銘柄について、それぞれ3日分のデータを、2026年10月4日 サーバー時間02:51に1回のパスで監査しました。 この日は日曜日であるため、FXおよび金のウィンドウは金曜日の最後のティックで終了しますが、週末も取引が行われるBTCUSDは実行時点で終了します。1,297ミリ秒で1,962,511ティックが読み込まれました。
| 銘柄 | ウィンドウ(サーバー時間) | ティック数 | S、ポイント | 反転 >= 2 S / 5 S / 10 S | 最大反転、ポイント | 60秒以上の沈黙:説明あり/説明なし | 原因不明の秒数(最長) | ティック付きM1バー/分 | M1の不一致 | 調査結果 |
|---|---|---|---|---|---|---|---|---|---|---|
| XAUUSD | 09.29 20:57 - 10.02 20:57 | 907 660 | 168 | 532 / 16 / 3 | 2,400 | 3 / 0 | 0 | 4 134 / 4 134 | 0 | 3 |
| EURUSD | 9月29日 20:58 - 10月2日 20:58 | 177 962 | 6 | 13 / 2 / 0 | 58 | 0 / 6 | 1 514.073 (439.640) | 4 299 / 4 299 | 0 | 6 |
| GBPUSD | 9月29日 20:58 - 10月2日 20:58 | 215 516 | 7 | 14 / 8 / 2 | 75 | 0 / 4 | 1 602.183 (741.443) | 4 295 / 4 295 | 0 | 6 |
| USDJPY | 9月29日 20:58 - 10月2日 20:58 | 321 026 | 7 | 124 / 23 / 0 | 67 | 0 / 11 | 1 397.153 (307.393) | 4 305 / 4 305 | 0 | 11 |
| BTCUSD | 10.01 02:51 - 10.04 02:51 | 340 347 | 700 | 34 / 0 / 0 | 3 084 | 0 / 0 | 0 | 4,320 / 4,320 | 0 | 0 |
クリーンなものはその大部分です。 1,962,511ティックにわたって、ゼロ以下での気配値、クロス気配値やロック気配値、過去に遡るティック、重複したティック、および2つの時間フィールドが一致しないティックは一切ありません。 21,353本のM1バーのすべてにティックが対応しており、ティックが存在するすべての分にはバーが存在し、各バーの高値と安値は、直近のティックにおける最高値および最安値と一致しています。 このサーバー上では、インジケーターが読み取るバーと、テスターが再生するティックの高値および安値はすべて一致しています。これは知っておく価値のある事実であり、測定されていないサーバーについては安易に推測すべきことではありません。
セッションテーブルとフィードは、この期間の毎晩において一致していません。 EURUSD、GBPUSD、USDJPYについて、このブローカーは月曜日から木曜日の00:00から24:00までを1つのクオートセッションと宣言しています。しかし、ティックデータはそれとは異なることを示しています。 これら3日間の各夜、日次ロールオーバー直前の最後のティックは20:59:52から20:59:58の間に到着し、次のティックは21:04:28から21:12:18の間に到着します: ブローカーが「オープンセッション」と呼ぶ期間内において、4.5分から12.4分間、全く気配値が表示されない状態が続きます。 最長だったのは2026年10月1日のGBPUSDで、20:59:57.249から21:12:18.692までの741.443秒でした。 USDJPYでは、2026年9月29日のロールオーバー後に2つ目のパターンが見られます: 21:15から21:29の間に、1分強の沈黙が7回発生しており、各回60.001秒から60.007秒の間隔で、11件の検出結果のうち7件はこの期間に起因しています。 同じサーバー上の金(Gold)については、20:58から22:00にかけての取引中断が記録されているため、その3回のロールオーバー時の静止期間は説明がつき、検出結果には含まれません。
これは、エキスパートアドバイザーがセッションテーブルを信頼して市場の開場状況を判断するあらゆる場面で重要な点となります。 バーはティックと一致しています(その数分間にはM1バーも存在しないため、バックテストでも同じギャップが確認されます)。しかし、クオートセッションを読み取って行動タイミングを決定するEAは、21:02に市場がクオートされていると認識しますが、上記の9つの銘柄のいずれの夜も、実際にはそうではありませんでした。
最大規模の反転はすべて、米国の経済指標発表時に発生しています。 中央値スプレッドの10倍以上の反転が5回(XAUUSDで3回、GBPUSDで2回)あり、これらはすべて2026年9月30日および2026年10月2日のサーバー時間12:30以降、8秒以内に発生しています。 ターミナル独自の経済カレンダーには、両日とも12:30に米国の経済指標発表が記載されている。金(XAUUSD)における最大規模の反転は、1ミリ秒以内に3ティック発生している:
シンボル;チェック;時間_msc;時刻;値1;値2;詳細 XAUUSD;反転;1790771407860;2026.09.30 12:30:07.860;2400;141;p0 4198.315 p1 4195.774 p2 4198.174 d1 -2541 d2 2400 S 168
ビッドは2.541下落し、2.400まで戻り、開始値(value2)より0.141低い水準で終了しました。これらはすべて同じミリ秒内での出来事です。これは中央値スプレッドの14.3倍に相当します。 M1チャート上ではこれは確認できない。12:30のバーは4192.325から4209.799まで伸びているため、このローソク足にはその痕跡が一切残っていない。 実際のティックデータを用いたテストでは、その瞬間に4195.774から4198.174の間に設定されていた売りストップ注文やストップロス注文(例えば、上昇に追随するトレーリングストップなど)は、この1ティックの動きによって発動される。

XAUUSD、この上昇局面における最大の反転付近の29ティック連続を、到着順に示す。12:30:07.860と刻印された3つのティックは、4198.315、4195.774、4198.174となっている。 残りの26ティック(12:30:07.610から12:30:08.663まで)は、7.7ドルに及ぶ、急速ではあるがごく普通のニュースによる値動きである。これらは、ツールのファイルではなく、MetaTrader 5独自のMCPサーバーを通じて読み込まれたティックから抽出されたものである。
このようなティックが誤った表示なのか、あるいは流動性の低い市場における実際の取引なのかは、データだけでは判断できず、本ツールもそれを試みません。本ツールが行うのは、それらをカウントし、銘柄固有のスプレッドに対してその規模を比較し、タイムスタンプを提供することです。これにより、バックテストの結果がごく少数のティックに依存しているかどうかを確認できます。 その分布は急峻です。金(ゴールド)では、スプレッド2以上で反転したものが532件、5以上で16件、10以上で3件ありました。
レポートの独立した検証
上記の表にあるすべての集計値は、本ツールとコードを一切共有せず、本ツールが呼び出すことのないインターフェースからティックデータとバーデータを取得する別のプログラムによって再計算されました。 Pythonスクリプトは、EAのファイルからウィンドウ、シンボルのポイントとチャートモード、4つの閾値、およびセッションテーブルのみを読み取り、MetaTrader 5に組み込まれたMCPサーバー(get_chart_ticks_history、get_chart_history)を通じて、生のティックデータとM1バーを自ら取得します。 その後、上記の定義を適用して比較を行います。
表に記載された実行結果:1,962,511 ティックを取得、シンボルごとに 31 個の要約フィールドに加え、各シンボルの 24 時間テーブル(シンボルごとに 72 セル)、不一致は 0 件。 31 個のフィールドは、29 個のカウンタ、検索結果ファイルの行数、および ID です。 意図的に仕込んだ 2 つのエラー(1 つのカウンターが 1 増え、1 つの 1 時間ごとのティック数が 1 増えたもの)は、両方とも報告されました。 1つのフィールドについては再集計が行われていません。時間フィールドのチェックにはMqlTickのtimeメンバーが必要ですが、MCPの行にはこれが含まれていないため、その値が0であるかどうかはEA側の処理に委ねられています。また、このスクリプトでは、チャートが「最終価格(Last prices)」に基づいて構築されている銘柄のチェックを行うことはできません。対象の5銘柄のいずれも該当しません。
スクリプト独自の定義は、13個の手作業で作成したティックを用いたテストによって固定されており、予想されるすべてのカウントは紙上で計算済みである――1回の繰り返し、 49ポイントの反転が1回、順序が乱れたティックが1回、クロス・クオートとロック・クオートが各1回、アスクがゼロのクオートが1回、セッション内の沈黙が2回、セッションの区切りをまたぐ沈黙が1回——さらに、沈黙の最後の1秒だけがセッション外となる2ティックのケースが含まれています。テスト自体によってカウントされたアサーションは45個です。 EAが同じ述語を適用していることは、そのテストではなく、実データでの再集計によって立証されている。
両側で確認されたゼロは、単なるゼロに過ぎません。この記事に基づくどの実行においても、クロスティック、逆ティック、リピートティック、非正のティック、およびM1の不一致は発生しなかったため、それらの分岐は定義され再集計されていますが、このサーバー上で発動したことは一度もありませんでした。
使用方法
- 任意のチャートにアタッチしてください。InpSymbolsに他のシンボルがリストされているか、*(マーケットウォッチ)でない限り、チャート固有のシンボルが監査対象となります。ジャーナルまたはパネルを確認してください。
- InpDays を、対象とするバックテストの期間に合わせて設定してください。ウィンドウは常に、ターミナルが保持する最後のティックで終了します。
- まず、原因不明の「沈黙」 を確認し、その結果ファイルに記載されたタイムスタンプを確認してください。毎日同じ分に繰り返される「沈黙」は、サーバーのスケジュールがセッションテーブルと一致していないことを示しています。散発的なものは、ご自身のターミナルの接続ログと照らし合わせて確認する価値があります。
- 10スプレッド以上の反転を確認し、次に分布の形状について2Sおよび5Sのカウントを確認してください。戦略のストップが価格から数スプレッド以内の場合、フラグが立てられた分を除外してバックテストを再実行し、比較してください。
- M1の不一致やティックのないM1バーは、テスターとチャートが一致していない分、あるいはテスターが価格を生成している分です。これについてはブローカーに問い合わせる必要があります。
- ブローカーやサーバーを変更した後に再実行してください。ティックの品質は、特定の銘柄の特性ではなく、特定の時点における特定のターミナルの履歴の特性です。
入力
| 入力 | デフォルト | 意味 |
|---|---|---|
| InpSymbols | "" | シンボル:空 = チャートシンボル、* = マーケットウォッチ、それ以外はCSVリスト |
| InpDays | 3 | 監査対象のティック履歴の日数(最後のティックで終了) |
| InpCheckQuotes | true | K1: 非正値/クロス/ロックされた気配値 |
| InpCheckTimes | true | K2: 逆順、重複、および不整合なタイムスタンプ |
| InpCheckReversals | true | K3: 1ティック単位の価格反転(スパイク) |
| InpReversalMult | 10.0 | K3:少なくともこの値以上のメディアン・スプレッドのフラグ反転 |
| InpReversalReturnFrac | 0.25 | K3: 開始点までの最大距離を、値動きに対する割合として算出 |
| InpCheckSilences | true | K4: 相場セッションに対するティック間の間隔 |
| InpSilenceSeconds | 60 | K4: この秒数より長い間隔を「沈黙」とみなす |
| InpCheckBars | true | K5: ティックの高値/安値をM1のバーと比較する |
| InpBarTolPoints | 0 | K5: このポイント数までの高値・安値の乖離を無視する |
| InpChunkMinutes | 360 | ティックは、この分数のチャンク単位で読み込まれます |
| InpMaxExamples | 5 | ジャーナル:チェックごとに表示される調査結果の例 |
| InpWriteCsv | true | 概要、セッション、時間、および調査結果のCSVファイルを出力する |
| InpShowPanel | true | 結果表をチャート上に描画する |
| InpPanelCorner | CORNER_LEFT_UPPER | パネルの角 |
| InpPanelFontSize | 8 | パネルのフォントサイズ |
| InpPanelX | 10 | パネルのX方向オフセット(px) |
| InpPanelY | 18 | パネルの Y オフセット(px) |
| InpRefreshMinutes | 0 | N分ごとに再監査(0 = 1回のみ監査) |
出力ファイル
すべてのファイルは MQL5\Files\TickIntegrityAuditor\ に書き込まれます。ヘッダー行があり、<symbols>_<days>d_<chart id> というプレフィックスが付いた行でセミコロン区切りで出力されるため、2 つのインスタンスが互いに上書きされることはありません。
- <prefix>_<symbol>_summary.csv — シンボルごとに 1 行:ウィンドウ(ミリ秒単位)、上記の各カウンタ、使用されたパラメータ、および整合性結果。無効化されたチェックは、0 を書き込む代わりにセルを空のままにします。
- <prefix>_<symbol>_sessions.csv — ブローカーが宣言する相場セッション。セッションごとに 1 行(平日、開始時刻、終了時刻を秒単位で記載)。
- <prefix>_<symbol>_hours.csv — サーバー時間単位:ティック数、原因不明の沈黙とその秒数、フラグが立てられた反転。
- <prefix>_findings.csv — 検出結果ごとに1行で、シンボル、チェック、time_msc、読み取り可能時間、2つの値、および詳細テキストが含まれます。 反転の場合、value1はそのサイズ、value2はp0までの距離であり、いずれもポイント単位です。沈黙の場合、value1はその長さ(秒単位)、value2はそれを終了させたティックのtime_mscです。
制限事項(平易な説明)
- これは、お使いのターミナルが保持する ティックを監査するものです。履歴の更新や再ダウンロードによりすべての数値が変更される可能性があり、オフライン状態だったターミナルは、ブローカーには存在しなかった沈黙を生成します。
- セッションテーブルはブローカー自身の声明です。説明のある「沈黙」とは、ブローカーが「相場表示がない」と述べたという意味でのみ説明されているものであり、説明のない「沈黙」は、ブローカーの2つの声明間の不一致であり、不具合の証拠ではありません。
- 反転はパターンであり、結論ではありません。このツールは、誤った表示と実際の取引を区別することはできません。サイズと時間を測定し、判断はユーザーに委ねられます。
- ウィンドウは InpDays 日間(最大 365 日)に制限されています。ティックはチャンク単位で読み込まれるため、メモリ使用量は抑えられますが、取引が活発な銘柄で長いウィンドウを設定すると、それに比例して処理時間が長くなります。
- 終値でチャート化された銘柄は、終値に基づいて監査されます。このサーバーにはそのような銘柄が存在しなかったため、その分岐は実装されていますが実行されたことはなく、独立した再集計は指値でチャート化された銘柄のみを対象としています。
- 取引機能、DLL、ネットワークアクセスは一切ありません。ティック、バー、セッションテーブルを読み取り、CSVファイルをMQL5\Filesに書き出します。
MetaQuotes Ltdによって英語から翻訳されました。
元のコード: https://www.mql5.com/en/code/78008
87.8 Percent from 2021 to YTD at 8.5 Percent MaxDD. The Nikkei EA That Only Buys When Volume Is Quiet
M15用の無料かつ完全にオープンソースなJPN225(日経225)EAです。価格が上昇傾向にあり、モメンタムが過度に伸びておらず、出来高が静かなときに買い注文を出します。 2022年から2026年までのバックテスト結果:プロフィットファクター1.68、年率+18.5%、15回のストレステストに合格。17:00時点では横ばい。
Session Sweep Boxes
アジア、ロンドン、ニューヨークの各セッションのレンジボックスを描画し、流動性スイープをマークします。流動性スイープとは、完了したセッションの高値または安値を超えてウィックが伸びたものの、終値は再びその範囲内に収まったクローズバーのことです。再描画されない矢印、拡張セッションレベル、アラート、およびiCustom対応のバッファを備えています。
Adaptive Moving Average (AMA)
適応移動平均線は、ノイズの影響を受けにくい移動平均線を作るときに使われ、トレンドを検知する際にラグが最小に抑えられるという特徴を持ちます。
Accelerator Oscillator (AC)
アクセルレーション/デセレレーションインジケーター(AC)は現在の市場を動かす力の加速と減速を測ります。