有用的过滤器应回答一个实际问题:根据目前可用的信息,这个EA能否考虑新建仓位?仅凭时段名称或空白日历无法作答。规则需要经过核实的时间、明确的事件覆盖范围,以及交易品种的当前报价。
先做一个简单区分:按各自规则管理已有风险敞口;只有必需检查通过后,才允许考虑新开仓。 本指南明确这一区分,用简短决策记录说明,并介绍测试方法。它不提供成品EA,也不证明盈利能力。
1. 明确过滤器控制什么
区分交易时段规则、预定新闻限制与策略入场条件。时段规则规定允许的时间;新闻规则排除选定区间;策略条件定义交易机会。前两项通过并不会自动产生机会,也不会取消执行及账户风险限制。
使用三种明确结果:PASS、BLOCK 和 UNKNOWN。这些是作者定义的数据标签,并非MT4错误码。已知的关闭窗口可以阻止开仓,但缺失信息不能成为通过的依据。在本文示例政策中,明确阻止或任一必需输入未知,都应暂缓考虑新开仓。持仓管理遵循自身的数据与权限检查。
2. 测试前写清时间与覆盖规则
采用交易时段指南中按日期核实的时间映射,以及经济日历指南中的事件定义。将规则写入带版本的规范,使其他人能够对相同输入得出相同判断。
- 品种与范围:经纪商、账户、交易品种、相关货币、选定事件类别及其后续阶段。
- 交易时段:完整日期、时区、星期规则,以及精确的端点包含或排除关系。
- 时间映射:UTC、所需本地规则与对应日期经纪商服务器时间之间经过核实的关系。
- 新闻排除:事件时间来源、前后缓冲、重叠处理,以及待定、延迟或更改事件的处理方式。
- 数据要求:所需日期及货币覆盖、结构、来源版本、更新状态和时效上限。
- 故障响应:何时暂缓新开仓、如何继续监控和管理,以及恢复前必须核对的状态。
本地时段跨午夜时,应定义所属交易日,并明确处理日期变化。相邻日期的事件若其排除区间覆盖决策时刻,也必须纳入。夏令时切换时,核实如何转换重复或不存在的本地时间。时间映射缺失时,不应默默改用电脑显示时区。
3. 验证日历快照,而不只是下载成功
快照是保存下来用于决策的某一版日历。下载成功或事件数组为空,都不能证明数据完整。应检查提供方是否支持所需货币、日期和事件类型,所有必需记录是否已取回,以及时间、单位和版本是否解析正确。
分别保存提供方的更新信息和自己的接收时间。刚收到的响应也可能包含旧数据。只有整份新版本验证通过后,才能替换活动快照;不完整文件或更新到一半的列表不能视为有效。刷新失败或再次读取缓存,不得重置上次已验证版本的已过时间。
经过验证且足够新的快照,可以证明在其声明覆盖范围内,没有选定排除区间正在生效。覆盖缺失、尚未解决的日程更改、相关事件时间未知或快照过期,仍属未知状态。按预定规则暂缓依赖这些数据的新开仓,并继续既定故障处理与持仓管理。预定日历无法防范未预告的新闻。
4. 单独检查交易品种的报价
跟踪该品种Bid/Ask的接收与有效性,采用能处理重启及系统时钟变化的经过时间测量方法。刚收到报价不代表上游数据仍新鲜,也不代表可以成交。应分别验证行情源、时钟环境、点差及交易权限,详见EA监控指南。
在MT4中,TimeCurrent() 在 OnTick() 内表示正在处理的tick时间;在其他处理函数中,可能反映市场报价窗口任意品种的最新报价。它不能证明本交易品种刚收到报价。实盘的 TimeGMT() 依赖电脑时间设置;在MT4测试器中则等于模拟的 TimeCurrent()。测试器内两者之差不能还原经纪商历史时差。
5. 跟随一份虚构决策记录
仅在本例中,采用 2026-03-16 的UTC交易时段 [08:00, 17:00),并沿用上一篇指南中假设的A/B新闻排除并集 [12:15, 13:05)。假定所需覆盖与元数据均已验证;事件覆盖完整UTC日,足以满足这些日间检查及其前后缓冲。这里不指代真实提供方或真实发布事件。
为说明计算,设快照距核实时间最多 30分钟,本品种报价距接收时间最多 5秒。这些是作者选定的输入,并非推荐刷新设置或安全保证。首份快照在12:00:00核实;完整且当前有效的替代版在13:06:00核实。17:00:00另有一份有效快照。经过时间假定来自已验证且可比较的时间测量。
| 决策时间 · UTC | 快照已过时间 | 本品种报价已过时间 | 仅时间与数据检查结果 |
|---|---|---|---|
12:10:00 | 10 min | 1 s | 这些检查通过;继续其他检查 |
12:20:00 | 20 min | 1 s | 阻止:新闻排除区间生效 |
13:05:00 | 65 min | 1 s | 暂缓:日历过期 |
13:06:06 | 6 s | 12 s | 暂缓:本品种报价过期 |
13:06:07 | 7 s | 1 s | 这些检查通过;继续其他检查 |
17:00:00 | 0 s | 1 s | 阻止:不在允许时段 |
13:05:00时,新闻区间结束,但旧快照已过去65分钟。13:06:06时,新快照仅过去6秒,然而该品种上次接收时间为13:05:54,已过去12秒。若在13:06:06收到报价,到13:06:07仅过去1秒。该行只通过示例中的时间与数据检查,并未通过策略、执行或风险检查。17:00这个端点不包含在时段内。这里没有模拟订单、离场或收益。
6. 保留持仓管理,并核对经纪商端订单
禁止新开仓不能跳过已有持仓的规定监控与管理。管理操作仍需要自身有效的数据和权限;价格缺失并不允许盲目修改止损。另行规定挂单如何保留或取消,并核实经纪商已接受的状态,不能假定发送取消请求就代表取消成功。
MT4的AutoTrading按钮禁止自动交易请求,但EA和 OnTick() 仍可能继续运行。因此它不是只暂停新开仓的开关:需要交易请求的持仓管理也可能受影响。应区分关闭该按钮、卸载EA与终端断线。已在经纪商端生效的保护与客户端管理是不同机制,详见风险管理。
7. 避免数据获取阻塞决策流程
决策应使用完整且已验证的缓存,并由受控流程刷新。明确超时、故障报告及新版本生效方式。在慢请求之前调用一次管理,并不能让管理在同一EA被请求阻塞期间持续运行。
补充:MT4网络与事件限制
MQL4的 WebRequest() 是同步的。在同一个EA内,将其从 OnTick() 移到 OnTimer() 不会变成异步;等待响应仍可能拖延该程序。独立获取组件可以提供已验证快照,但其交接及故障同样要验证。定时器是安排执行的工具,不是管理不中断的保证。
逻辑顺序是:执行规定的管理和监控流程,评估新开仓必需检查,只有通过后才考虑当前策略条件,同时实施执行与风险控制。这是在划分决策职责,并非可运行MQL4代码,也不保证处理及时。依赖该设计前,应测试实际集成、权限和故障行为。
8. 保存重启后仍可追溯的决策记录
记录UTC决策时间、服务器时间及已验证映射、规则版本、快照标识和来源及接收时间、覆盖范围、品种报价接收时间及已过时间、活动排除区间和结果原因。既要保留通过的检查,也要保留被拒候选。记录应能解释暂缓原因,无须事后用已修订日历重建。
重启或重连后,与经纪商核对已有持仓、挂单和未解决请求。只恢复可验证状态;重启不代表账户空仓,也不代表缓存仍有效。防止同一候选被重复处理。必需状态未知时,核对完成前暂缓新开仓,并继续既定故障响应及持仓管理。
9. 解释回测前先测试正确性
衡量市场表现之前,先建立有预期结果的小型固定用例,包括:
- 包含时段开始、不包含结束,以及跨午夜区间。
- 新闻排除开始与结束、事件重叠、日程延期或更改。
- 日历数据缺失、部分返回、格式错误或超出覆盖,包括未经核实的空响应。
- 时效恰好达到所选上限和刚刚超限,以及其他品种有新tick、交易品种报价却仍过期的情况。
- 重启、时钟跳变、刷新失败和快照替换中断,且不重置数据已过时间。
- 新开仓被阻止时的经纪商端订单及管理流程,包括取消被拒和交易权限不可用。
MT4策略测试器不执行 WebRequest(),也不处理 Timer 事件。使用冻结数据和经过核实的历史时间映射,通过受支持的测试路径驱动共用决策逻辑。每份快照只能在当时已经可用之后回放。只有历史事件表,无法重现实时获取或定时调度。其他限制参见MT4回测指南。
10. 将效果验证与运行正确性分开
正确实现的过滤器也可能排除盈利交易,而不只是亏损交易。使用相同策略、数据和成本假设,将拟用规则与预先声明的基准比较。保留全部候选及拒绝理由,留出后续数据验证,并纳入现实的执行成本。搜索许多时间窗口后只报告最好结果,可能使样本过拟合。
随后在模拟账户中持续观察真实集成,覆盖正常与数据故障情况。测量刷新失败、过期数据暂缓、报价空档、管理延迟及经纪商订单响应。清晰日志能说明系统做了什么,却不能证明未来盈利。扩大使用前,确认:
- 已记录带版本规范、时间映射和事件选择政策。
- 覆盖及数据时效检查能区分无限制、阻止和未知。
- 边界及故障用例符合预期结果。
- 历史测试遵守信息可用时间,并披露缺失历史。
- 模拟验证涵盖获取、重启、管理连续性和经纪商端订单状态。
- 任何效果主张都单独评估,纳入成本及后续数据,不编造业绩数字。
11. EA过滤器常见问题
日历没有限制,EA就应入场吗?
不是。核实日历无限制,只通过了部分决策。交易时段、报价质量、执行、账户风险及当前策略条件仍须检查。意外新闻也可能在预定日程之外发生。
为什么刚下载的数据仍可能让状态未知?
响应可能陈旧、不完整、超出所需覆盖或解析有误。仅凭接收时间不能验证提供方数据。在相关必需检查通过前,应继续暂缓依赖这些输入的新开仓。
能在MT4测试器中测试实时新闻下载吗?
文档中的测试器不执行WebRequest,也不处理Timer事件。使用冻结且带版本的输入,通过受支持路径测试共用判断逻辑,再在模拟环境单独验证实际获取和调度。
应当用AutoTrading作为新闻暂停开关吗?
它不限于新开仓,也可能禁止管理使用的自动交易请求。本文讨论的是内部入场控制,并单独核实管理职责,而不是一键消除风险敞口的通用开关。
12. 参考资料与范围
官方MQL4 WebRequest参考文档说明同步请求及其限制。MT4策略测试器限制说明时间模拟,以及不支持的外部函数与事件。应核实具体平台及集成可用的功能,不要假设其他平台的示例可以直接使用。资料核查日期:2026-10-17。
本指南以规则与验证框架结束交易时段及新闻指南组。日程、快照、经过时间和结果均为虚构教学案例。上限不是建议参数,也未声称执行EA或取得交易结果。过滤器不能消除市场、执行或账户风险。