专家顾问中的每个过滤器、每条“平仓前”规则以及图表上的每个交易时段框,都基于一个前提:该交易品种的交易时段表,即经纪商通过 SymbolInfoSessionQuote 和 SymbolInfoSessionTrade 声明的交易时间。该工具会将该表与历史数据进行比对。 在最近的 N 个完整交易日中,该工具针对每周的每一分钟,统计该交易品种在多少天内存在 M1 时间周期的 K 线,并将结果与时间表中声明的内容进行对比: 通常为空的声明分钟、时间表中标记为已收盘的分钟内出现的K线、交易表与报价表不一致的分钟,以及在通常不为空的声明分钟内出现的偶发性中断。

5个市场观察符号,每个符号涵盖35个完整日(2026.09.01至2026.10.06,服务器时间),单次运行耗时62毫秒。 “表 h/wk”和“实际 h/wk”分别表示交易时段表声明的每周小时数,以及该工作日至少一半日期中存在K线的实际小时数。 “每周无效分钟数”统计的是在所声明分钟内,仅有最多四分之一日期存在K线的分钟;“中断”统计的是在非无效的声明分钟内,持续五分钟或更久的空缺时段。为适应页面布局,面板字体大小设为4;默认值为8。
问题
交易时段表是一种声明,而非测量值。终端会在符号规格中显示该信息,EA 也可以读取它,但没有任何机制会将其与实际到达的价格进行核对。 在下文测量的演示服务器上,EURUSD、GBPUSD 和 USDJPY 被声明为周一至周四 00:00 至 24:00 提供报价。 M1历史数据表明,服务器时间21:00刚过之后,往往完全没有报价。同一服务器上的黄金合约声明在20:58至22:00期间暂停报价, 其K线与表格的时间完全吻合——但2026年9月7日(周一,美国节假日)除外,当天休市前的最后一根K线出现在18:27,而声明交易时段中的两个半小时却没有任何报价。
这些情况在表格中均无法体现,但对自动化交易却至关重要。基于该表格编写的时间过滤器会尝试在往往没有报价的分钟内进行交易。 策略测试器在此处同样没有 tick 数据,因此一条“在 21:01 触发”的规则在大多数日子里可能根本不会触发。而某人曾从规格说明中复制的“交易时间”输入项,其准确性也仅取决于该规格说明本身。
其衡量标准
该时间窗口为 [D0, D1): D1 指该交易品种最新 M1 K 线所在日期的服务器时间 00:00,因此今日尚未结束的交易日被排除在外;而 D0 则位于 InpDays 个整日之前(若 M1 历史数据起始时间较晚,则向前推移至第一个整日)。 对于一周中的每一分钟,该工具会统计窗口内该周日的日期——基于日历计算,因此如果某个节假日没有单根K线,则被视为该分钟所有数据均缺失的日期——并统计命中次数,即该分钟存在M1 K线的日期。 当某分钟的起始时间位于其所在星期日的报价时段内时,该分钟即被认定为有效,其时段测试标准与Tick Integrity Auditor所采用的标准一致。
日志将该计算结果按符号显示为等式:findings_rows == dead_windows + outside_windows + trade_no_quote_windows + quote_no_trade_windows + outages。未测量的检查项在 CSV 中留空,在面板上显示为 -,绝不显示为 0。
测量示例
Exness 模拟服务器,服务器时间 = UTC,五个“市场观察”符号,InpDays=35,其余所有输入参数均采用默认值。
| 符号 | 表格 每周交易小时数 | 实际 小时/周 | 死区分钟 / 窗口 | 非交易分钟 | 交易≠报价最小值 | 中断 | 最长停机时间 |
|---|---|---|---|---|---|---|---|
| XAUUSD | 114.82 | 114.82 | 0 / 0 | 0 | 0 | 1 | 150分钟,2026年9月7日(周一)18:28 |
| 欧元兑美元 | 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 |
| 英镑兑美元 | 119.90 | 119.62 | 9 / 6 | 0 | 0 | 5 | 9分钟前,2026年10月1日 星期四 21:03 |
| 美元兑日元 | 119.90 | 119.57 | 14 / 5 | 0 | 0 | 9 | 10分钟,2026年10月4日(周日)21:05 |
展期是一个图表未明确标注的缺口。 在该时段内所有20个周一至周四的晚上,展期前的最后一个K线均出现在20:59。 此后,在21:00至21:19之间,至少有一分钟没有K线:欧元/美元有16个晚上、英镑/美元有19个晚上、美元/日元有20个晚上出现这种情况;其中,有10个、10个和14个晚上分别缺失了4分钟或更多。 由于缺失时长在各个晚上各不相同,因此表现为两种形式:一种是“空白分钟”,即大多数晚上都存在该现象 (美元/日元在周一和周二的21:00至21:05时段,五天中最多仅有一日有K线);另一种表现为数据中断,仅部分晚间出现(英镑/美元在三个晚间出现,从其“死分钟”结束的21:03开始计时,每次持续七至九分钟)。 36项发现中有28项始于21:00至21:15之间;其中两项是美元/日元的周日开盘,首个K线分别在声明的21:05之后6分钟和10分钟出现。

左图:在该时间窗口的20个周一至周四晚上中,欧元兑美元(EURUSD)出现M1K线的时间占比,按20:50至21:15的每分钟统计;交易时段表显示这些分钟均被标记为开盘。 右图:2026年9月7日(周一)的XAUUSD走势与该时间窗口内其他四个周一的对比;阴影带为交易时段表中声明的突破区间。数据源自通过交易终端MCP接口读取的M1K线,而非该工具自身的输出结果。
黄金的交易时段表除节假日外均正确。 XAUUSD的实际交易时段与声明的交易时段在每个工作日都完全一致,精确到分钟: 周一至周四为00:00至20:58及22:00至24:00,周日为22:01至24:00,周五为00:00至20:58。 其唯一发现是2026年9月7日(美国劳动节),从18:28至20:58的交易中断期间没有K线,共计150分钟。该表格无法标注“今日提前收盘”;但历史数据能反映这一点。
两次日间停机同时影响了这三种货币对。 2026年9月2日(周三)从11:39开始,以及2026年9月9日(周三)从10:37开始: 每次持续七分钟,欧元/美元、英镑/美元和美元/日元在同一分钟内均出现停盘,而黄金/美元和比特币/美元在这些分钟内均有K线。无论原因如何,此次停盘同时影响了这三种货币对,却未波及黄金和比特币,这正是回测该时段时系统会无声重现的事件类型。
数据非常干净。 没有任何交易代码在交易表中标记为“关闭”的那一分钟内出现过单根K线,且这五种交易对的交易表与报价表完全一致,因此C2和C3在此处未发现任何异常。 BTCUSD虽标注为“24/7”,但确实实现了真正的24/7运行;其唯一一次中断发生在2026年9月13日星期日07:16,持续了13分钟。
独立验证报告
该报告可在MetaTrader外部进行复现。 本页面使用的脚本仅读取Python无法自行获取的数据——时间窗口、三个阈值、交易检查是否开启,以及来自摘要和会话文件的会话表——通过终端的MCP接口提取M1K线时间,并重新计算摘要中的22列结果、 每个符号地图的全部10 080个单元格、有效交易时段以及上述定义中的结果行。 在所示的运行结果中,该脚本与工具在所有五个符号的每个数值上均一致。在文件副本中人工植入的两个错误(一个计数器,一个映射单元格)均被报告。其自身的定义首先在两个手工计算的合成周数据上进行了验证。
使用方法
将该专家顾问附加到任何图表上。当 InpSymbols 为空时,它将审核该图表的符号;输入 * 时,将审核整个市场观察窗口;输入以逗号分隔的列表时,将审核该列表中的符号。 审核运行一次(或每隔 InpRefreshMinutes 运行一次),将每个工作日的对比结果和中断情况打印到专家顾问日志中,在图表上绘制表格并写入 CSV 文件。它仅读取历史数据和交易时段表:代码中没有交易功能,没有 DLL,也没有网络访问。 当参数为 * 时,该程序仅处理“市场观察”中已有的符号;列表中列出的但尚未出现在“市场观察”中的符号,将在读取其历史数据时由终端自动选中,这与任何历史数据请求的处理方式相同。
首先阅读日志行。例如以下行:
USDJPY 周一 表格 00:00-24:00 | 实时 00:00-21:00 21:05-24:00 | 停机 21:00-21:05 (1/5) | 非交易时段 无
表示:周一该表声明全天有效,K线存在于00:00至21:00以及21:05之后的时间段内,且在21:00至21:05的每一分钟内,这五周中的某一周的周一最多出现过一根K线。 在进行时间过滤时,请使用实际会话数据而非声明数据;扩大 InpDays 范围以查看更多周,并降低 InpOutageMinutes 值以查看更短的空档期。
输入
| 输入 | 默认值 | 含义 |
|---|---|---|
| InpSymbols | "" | 符号:空 = 图表符号,* = 市场观察,否则为 CSV 列表 |
| InpDays | 28 | 要审核的M1历史数据所涵盖的完整服务器天数(截止日期在今天之前) |
| InpLivePct | 50 | 当某周内至少有该百分比的工作日存在K线时,该分钟数据即为有效 |
| 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 表示仅审核一次) |
审核输入值的超出范围值将分别通过一条日志行进行限制(面板输入不会显示提示);专家顾问绝不会拒绝启动。
输出文件
所有文件都保存在 MQL5\Files\SessionRealityAuditor\ 目录下,以分号分隔并带有标题行,文件名格式为 <symbols>_<days>d_<chart id>_…,以确保两个图表的文件互不覆盖。
限制说明
由MetaQuotes Ltd译自英文
原代码: https://www.mql5.com/en/code/78079
ATS Trade Management Library - break-even, trailing stop and partial closes for any EA
管理专家顾问中的未平仓头寸:设置盈亏平衡点、追踪止损、两次部分平仓,以及为未设置相关参数的头寸设定止损和目标价。该专家顾问绝不会开仓。
ATS Prop Rules Monitor - prop firm challenge scoreboard with the room left on every rule
一个用于显示自营交易公司挑战赛规则的面板:每日亏损、最大亏损(静态或追踪)、盈利目标、最低交易天数以及最佳交易日(稳定性)规则。对于每一项,它都会以货币金额显示已使用多少以及还剩多少余量。 “再做一笔交易”功能会告知您,在仍能将强制平仓点控制在当日剩余空间及最大亏损空间范围内的最大手数。 只读模式:该工具绝不会开仓、修改或平仓。预设包含典型数值;由于各公司规则可能有所不同,请核对您所在公司的规则并使用“自定义”预设。基于 ATS 风险库(ATS_RiskLib.mqh,随附)构建。
CajasTF – MT5 集成多时间周期侧边栏
带有智能配色、独立价格刻度以及K线倒计时器的实时多时间周期侧边栏迷你图表。
Advanced Prop-firm Trade Panel based on S-R
一款适用于 MetaTrader 5 的手动交易面板,内置自营交易公司风险防护功能和隐藏式支撑/阻力位查找器。