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

Session Reality 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
ビュー:
9
評価:
(1)
パブリッシュ済み:
MQL5フリーランス このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動

エキスパートアドバイザーの各フィルター、すべての「ロールオーバー前のクローズ」ルール、およびチャート上の各セッションボックスは、ある1つの要素を信頼しています。それは、銘柄のセッションテーブル、つまりブローカーがSymbolInfoSessionQuoteおよびSymbolInfoSessionTradeを通じて宣言する取引時間です。このツールは、そのテーブルと過去のデータとを照合して確認を行います。 過去N日間のうち、その週の各分について、その銘柄にM1バーが存在した日数をカウントし、その結果をテーブルが宣言している値の横に表示します: 通常は空であるはずの宣言された分、テーブルが「クローズ済み」と指定する分のバー、取引テーブルと相場テーブルの値が一致しない分、および通常は空ではないはずの宣言された分における一時的なデータ欠落。

sra-panel

マーケットウォッチのシンボル5つ、各35日間(2026年9月1日から2026年10月6日、サーバー時間)、1回の処理に62ミリ秒。 「Table h/wk」と「Real h/wk」は、それぞれセッションテーブルが宣言する週あたりの時間数と、その曜日の日付の少なくとも半分にバーが存在する時間数を指します。 「Dead min/wk」は、その日付の最大4分の1にバーが存在する宣言済み分数をカウントします。「Outages」は、デッドではない宣言済み分数のうち、5分以上の空白をカウントします。ページに収まるよう、パネルのフォントサイズを4に設定して出力しました。デフォルトは8です。

問題点

セッションテーブルは宣言であり、測定値ではありません。ターミナルはシンボル仕様でこれを表示し、EA はそれを読み取ることができますが、実際に到着する価格と照合してチェックするものは何もありません。 以下で測定したデモサーバーでは、EURUSD、GBPUSD、USDJPYは月曜日から木曜日の00:00から24:00まで気配値が提供されると宣言されています。 M1の履歴によると、サーバー時間の21:00直後には、しばしば価格が全く表示されないことがあります。同じサーバー上の金(Gold)は、20:58から22:00まで取引休止と宣言されており、 そのバーは表と分単位で一致しています――ただし、2026年9月7日(月)の米国祝日を除きます。この日は、取引中断前の最後のバーが18:27にあり、公表されたセッション時間の2時間半が空白となっています。

こうした情報は表からは一切読み取れませんが、自動取引においてはすべて重要な要素となります。この表に基づいて作成された時間フィルターは、価格が存在しないことが多い分単位の時間帯で取引を試みてしまうでしょう。 ストラテジーテスターにもその時間帯のティックデータは存在しないため、「21:01」に発動するルールは、ほとんどの日において一度も発動しない可能性があります。また、かつて仕様書からコピーされた「取引時間」という入力項目は、その仕様書が正しい限りにおいてのみ正しいのです。

測定対象

ウィンドウは [D0, D1) です: D1は、銘柄の最新のM1バーが記録された日のサーバー時間00:00であるため、本日の未完了の日は除外され、D0はInpDays日分前の丸1日前に位置する(M1の履歴がそれより後に始まる場合は、最初の丸1日に繰り上げられる)。 このツールは、その週の各分について、ウィンドウ内のその曜日の日付(カレンダー上での日付。したがって、バーが1本も存在しない祝日は、すべての分が欠落している日付としてカウントされる)と、その分にM1バーが存在する「ヒット」の日付をカウントします。 1分間は、その開始時刻が当該曜日の相場セッション内にあり、Tick Integrity Auditorが使用するのと同じセッションテストを満たす場合に「実分」とみなされます。

  • 有効テーブル。 1分間は、 その日付の少なくとも InpLivePct パーセント(デフォルト 50)にバーが存在する場合に「実在」 とみなされます。ある曜日の連続する実在する1分間は、宣言された1分間の横に表示される有効セッションを構成します。
  • 無効な宣言済み分(C1)。 その日付の最大 InpDeadPct パーセント(デフォルト 25)にバーが存在する宣言済み分です。1 つの曜日に連続する無効な分の各連続区間は、1 つの検出結果となります。
  • テーブル外のバー(C2)。 テーブルによって「クローズ済み」とみなされる分であり、少なくとも1日の日付にバーが存在するもの。各連続した区間が1つの検出結果となり、その中のバー数が記録される。
  • 取引テーブルと気配値テーブルの不一致(C3)。 取引セッションに含まれるが、気配値セッションに含まれない分(注文は受理されているが、価格の提示がない)、および気配値セッションに含まれるが、取引セッションに含まれない分(価格が表示されているが、注文は拒否されている)。各連続した区間が1つの検出結果となる。InpCheckTrade=falseに設定すると、このチェックは無効になる。
  • 単発の停止(C4)。 実際のタイムライン上で、分単位で:デッド分ではなく、バーも存在しない宣言済み分。このような分の連続(深夜をまたぐ場合もあり)、かつ少なくとも InpOutageMinutes 分(デフォルト 5)以上続くものは停止とみなされ、それぞれが日付付きの検出結果となります。 「デッド分」は意図的に除外されています。ほとんどの時間が空いている分はパターンでありC1に属しますが、通常はデータで埋まっているはずの空の分はイベントであり、ここに属します。

ジャーナルには、シンボルごとの算術式として計算結果が出力されます:findings_rows == dead_windows + outside_windows + trade_no_quote_windows + quote_no_trade_windows + outages。測定されなかったチェックは、CSVでは空欄のままとなり、パネル上では「-」として表示され、決して「0」とは表示されません。

測定例

Exnessデモサーバー、サーバー時刻=UTC、マーケットウォッチ銘柄5つ、InpDays=35、その他の入力項目はすべてデフォルト設定。

銘柄 週あたりの取引回数 実取引時間(h/週) デッドミニッツ / ウィンドウ アウトサイド分 取引≠提示の最小時間 停止時間 最長の停止時間
XAUUSD 114.82 114.82 0 / 0 0 0 1 150分足、2026年9月7日(月)18:28
EURUSD 119.90 119.70 7 / 5 0 0 4 7分前、2026年9月2日(水)11:39
BTCUSD 168.00 168.00 0 / 0 0 0 1 13分前、2026年9月13日(日)07:16
GBPUSD 119.90 119.62 9 / 6 0 0 5 9分前、2026年10月1日(木)21:03
USDJPY 119.90 119.57 14 / 5 0 0 9 10分、2026年10月4日(日)21:05

ロールオーバーは、表には記載されていない空白の時間帯です。 この期間中の月曜日から木曜日までの全20回の夜間において、 ロールオーバー直前の最後のバーは20:59です。 その後、21:00から21:19までの間に少なくとも1分間、バーが表示されない時間帯が、EURUSDでは16回、GBPUSDでは19回、USDJPYでは20回の夜間に発生し、そのうち10回、10回、14回では、そのような欠落した分が4分以上続いています。 その長さは夜ごとに異なるため、2つの形で現れます。1つは、ほとんどの夜で一致する「デッドミニッツ」として (月曜日と火曜日のUSDJPY、21:00~21:05、5日間のうち最大1日だけバーがある)というケースと、一部の夜のみ一致する「データ欠落」として現れるケース(GBPUSDの3つの夜、その「デッドミニッツ」が終了する21:03から数えて、それぞれ7~9分間)の2つの形で現れます。 36件の事例のうち28件は21:00から21:15の間に始まっており、そのうち2件はUSDJPYの日曜日の寄り付きで、最初のバーが公表された21:05から6分および10分後に現れたものである。

sra-real-vs-table

左:この期間の月曜日から木曜日の20日間の夕方のうち、EURUSDにM1バーが存在した割合(20:50から21:15までの分単位)。セッション表では、これらの各分がすべて「オープン」と宣言されている。 右:2026年9月7日(月)のXAUUSDと、対象期間内の他の4つの月曜日との比較。網掛けの帯は、セッション表で指定されているブレイクを示す。これは、ツール自身の出力ではなく、ターミナルのMCPインターフェースを通じて読み取ったM1バーから作成されたものである。

金の表は、祝日を除いて正しい。 XAUUSDの実質的なセッションと宣言されたセッションは、平日すべてにおいて分単位で一致している: 月曜日から木曜日は00:00~20:58および22:00~24:00、日曜日は22:01~24:00、金曜日は00:00~20:58。 唯一の例外は2026年9月7日(米国労働者の日)で、18:28から20:58の取引中断までの150分間、バーが表示されていません。表自体には「本日は早じまい」と記載する方法はありませんが、履歴データにはその情報が含まれています。

2回の日中の取引停止が、3つの通貨ペアすべてに同時に発生した。 2026年9月2日(水)11:39からと、2026年9月9日(水)10:37から: それぞれ7分間、EURUSD、GBPUSD、USDJPYでは同じ分間に取引が停止しましたが、XAUUSDとBTCUSDではそれらの分間のすべてにバーが記録されています。原因が何であれ、この障害は3つの通貨ペアに同時に発生し、金とビットコインには影響を与えませんでした。これは、当時のバックテストを再現しても何の説明もなく再現されるような事象です。

明確な点があります。 どの銘柄も、その表で「クローズ」と表示されている分にはバーが1本もありません。また、5銘柄すべてにおいて取引表は気配表と一致しているため、C2とC3はここで何も検出できませんでした。 「24時間365日稼働」と宣言されているBTCUSDは、実際に24時間365日稼働している。唯一の停止は、2026年9月13日(日)07:16から13分間である。

レポートの独立した検証

このレポートはMetaTraderの外でも再現可能です。 このページで使用されているスクリプトは、Pythonだけでは取得できない情報(ウィンドウ、3つの閾値、トレードチェックの有効/無効、およびサマリーファイルとセッションファイルからのセッションテーブル)のみを読み取り、ターミナルのMCPインターフェースを通じてM1バーの時刻を取得し、サマリーの22の結果列、 各銘柄のマップの全10,080セル、有効なセッション、および上記の定義に基づく結果行を再計算します。 ここに示した実行結果では、5つの銘柄すべての値について、当該ツールと一致しています。ファイルのコピーに手動で仕込んだ2つのエラー(カウンター1つ、マップセル1つ)も、両方とも報告されました。スクリプト独自の定義については、まず手作業で作成した2週間の合成データを用いて検証されました。

使用方法

エキスパートアドバイザーを任意のチャートにアタッチします。InpSymbols を空にすると、そのチャートのシンボルを監査します。* を指定するとマーケットウォッチ全体を監査し、カンマ区切りのリストを指定するとそのシンボル群を監査します。 監査は1回(または「InpRefreshMinutes」ごとに)実行され、平日ごとの比較結果と停止時間をエキスパート・ジャーナルに出力し、チャート上に表を描画し、CSVファイルを作成します。このツールは履歴テーブルとセッションテーブルのみを読み込みます。コード内に取引機能はなく、DLLもネットワークアクセスも使用しません。 * を指定した場合、Market Watchにすでに登録されているシンボルのみを対象とします。リストに名前が記載されているものの、まだ登録されていないシンボルは、通常の履歴リクエストと同様に、履歴が読み込まれる際にターミナルによって自動的に選択されます。

まず、ジャーナルの行を確認してください。次のような行があります。

USDJPY Mon table 00:00-24:00 | real 00:00-21:00 21:05-24:00 | dead 21:00-21:05 (1/5) | outside none

という行は、月曜日にテーブルが1日全体を宣言しており、00:00から21:00までおよび21:05以降にバーが存在し、21:00から21:05までの各分には、5回の月曜日のうち最大1回だけバーがあったことを示しています。 時間フィルターには、宣言されたセッションではなく実際のセッションを使用してください。InpDaysを広げてより多くの週を表示し、InpOutageMinutesを下げてより短い空白期間を表示してください。

入力

入力 デフォルト 意味
InpSymbols "" シンボル:空 = チャートシンボル、* = マーケットウォッチ、それ以外はCSVリスト
InpDays 28 監査対象とするM1ヒストリーのサーバー稼働日数(本日より前の日付で終了するもの)
InpLivePct 50 平日の少なくともこの%にバーが存在する場合、その1分は「実在」とみなされる
InpDeadPct 25 宣言された分が、その最大この%にバーが存在する場合、その分は「デッド」とみなされる
InpOutageMinutes 5 通常は稼働している宣言済み分において、この長さ以上の単発的な空白が発生した場合は報告する
InpCheckTrade true 取引セッションテーブルと気配値セッションテーブルを比較する
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回のみ監査)

監査入力の値が範囲外の場合、それぞれ1行のジャーナルでクリップされます(パネル入力は何も表示されません)。エキスパートアドバイザーが起動を拒否することは決してありません。

出力ファイル

すべてのファイルは MQL5\Files\SessionRealityAuditor\ に保存され、ヘッダー行付きでセミコロン区切り、ファイル名は <symbols>_<days>d_<chart id>_… となるため、2 つのチャートが互いに上書きされることはありません。

  • …_<symbol>_summary.csv — 1 行:ウィンドウ、しきい値、およびそれを上回るすべてのカウンター。
  • …_<symbol>_sessions.csv — テーブルのすべての相場および取引セッションの記録。
  • …_<symbol>_map.csv — 10,080 行、週の 1 分ごとに 1 行:申告された相場、申告された取引、ヒット数、日付。
  • …_<symbol>_effective.csv — 有効なセッション。ウィンドウごとに1行。
  • …_findings.csv — すべての銘柄の検出結果ごとに1行。曜日、開始、終了、期間、値が含まれます。

制限事項(平易な説明)

  • 存在の判定はM1バーから読み取られます:バーが存在する分は、相場が提示されたものとみなされます。バーは、その分内に少なくとも1つのティックが存在する場合に存在するとみなされるため、1分間のうち30秒間の無取引時間はここでは認識されません。秒単位の無取引時間については、ティックツールをご利用ください。
  • このツールは、現在のセッションテーブルをそのまま読み取ります。ブローカーがウィンドウ内の取引時間を変更した場合、過去の日付については新しいテーブルに基づいて判定されます。
  • 日付はカレンダーに基づいてカウントされるため、祝日があると、その平日の各分の割合が1日分減少します。これは意図された動作であり、まさにテーブルに記載されていなかった点です。
  • すべてサーバー時間に基づきます。ウィンドウ内で夏時間が変更された場合、一部の日付についてロールオーバーが1時間ずれるため、それらの分の割合はそれに応じて減少します。
  • 監査の深度は、ターミナルがその銘柄について保持するM1履歴(チャートごとの最大バー数設定)によって制限されます。履歴が短いほどウィンドウは短縮され、ジャーナル行は1行となります。
  • 上記の数値は、1台のデモサーバーにおける5週間分のデータです。これらはそのフィードに関するものであり、ブローカーの実際の口座や他のサーバーに関するものではありません。

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

ATS Trade Management Library - break-even, trailing stop and partial closes for any EA ATS Trade Management Library - break-even, trailing stop and partial closes for any EA

エキスパートアドバイザーで未決済のポジションを管理します:ブレークイーブン、トレーリングストップ、2回に分けた部分決済、およびこれらが設定されていないポジションに対するストップとターゲット。このアドバイザーは決して取引を開始することはありません。

ATS Prop Rules Monitor - prop firm challenge scoreboard with the room left on every rule ATS Prop Rules Monitor - prop firm challenge scoreboard with the room left on every rule

プロップファーム・チャレンジのルールに関するパネルが1つあります。そこには、1日の損失、最大損失(固定またはトレーリング)、利益目標、最低取引日数、およびベストデイ(安定性)ルールが記載されています。各項目について、使用済み額と残りの余裕額が金額単位で表示されます。 「One more trade」は、本日の残余枠および最大損失枠の範囲内でストップアウトを回避できる最大のロットサイズを表示します。 読み取り専用:取引の開始、変更、決済は一切行いません。プリセットには一般的な値が設定されていますが、各プロップファームによってルールが異なるため、ご自身のルールを確認の上、「カスタム」プリセットをご利用ください。ATS Risk Library(ATS_RiskLib.mqh、同梱)に基づいて構築されています。

CajasTF – MT5用統合マルチタイムフレームサイドパネル CajasTF – MT5用統合マルチタイムフレームサイドパネル

スマートな色分け機能、独立した価格目盛、ローソク足の残り時間カウントダウンタイマーを備えた、リアルタイムのマルチタイムフレーム対応サイドパネルミニチャート。

Advanced Prop-firm Trade Panel based on S-R Advanced Prop-firm Trade Panel based on S-R

MetaTrader 5用の、プロップファーム向けリスクガード機能と隠しサポート・レジスタンス検出機能を内蔵した手動取引パネル。