Trading Window and Spread Guard MT4
- 实用工具
- 版本: 1.1
- 激活: 5
Trading Window and Spread Guard 是一款 MetaTrader 4 实用工具,用来告诉您自己的智能交易系统(EA)何时不要开新仓。您可以设置最多五个停止窗口(星期几和时间段,例如每天的隔夜结算时段、流动性稀薄的深夜,或您的经纪商点差变宽的时段)以及点差上限。在窗口有效期间,或某个品种的点差高于上限期间,本工具会设置一个您的 EA 可以读取的标志。可选功能:也可以平掉在禁止开新仓期间开立的持仓。
这是暂停交易的工具,不是交易策略。它不寻找适合交易的时间,不提供买卖信号,也绝不会在真实账户或模拟账户上开仓或下单。它不能防止亏损:它只能让您的 EA 跳过新的入场,或在新仓开立后将其平仓。避开哪些时段、是否交易以及如何交易,由您自己决定。
默认设置下没有任何功能启用:没有窗口,点差上限关闭,平仓关闭。在您填写参数之前,本工具只显示面板。
重要:您的 EA 必须读取标志。不检查标志的 EA 会照常交易。检查只需几行代码(见下文)。对于无法修改的 EA,只能使用“平掉禁止期间开立的持仓”选项,而它是在持仓开立之后才平仓,会产生点差和手续费。
功能
- 最多 5 个停止窗口。写法:12:00-12:30(每天)、Mon-Fri 23:50-01:15(在所列的每一天开始,可跨越午夜)、Mon,Wed,Fri 08:00-08:30、Fri 21:00-Mon 01:00(跨越多天的一个时段)。星期用英文(Mon 或 Monday,不区分大小写)或日文;All = 每天。结束时间可以是 24:00。相接或重叠的窗口会合并。
- 窗口时间可按服务器时间(默认)或本电脑的时间。
- 点差上限(点):所有品种一个共同值,另可按品种设置(例如 GOLD=50,US30=300)。
- 品种:图表品种(默认)、品种列表,或 * = 市场报价中的所有品种(最多 100 个)。
- 以终端全局变量形式提供给 EA 的标志,以及现成的读取函数(TWG_Reader.mqh)。
- 可选:平掉禁止期间开立的持仓,仅限您选择的品种和魔术号。本工具启动时已存在的持仓绝不会被触碰。
- 面板:状态(OK 或 BLOCKED 及原因)、下一个窗口及倒计时、您设置的窗口、点差与上限、平仓设置、标志名称和最后一条消息。英文或日文(根据终端语言自动切换)。带折叠按钮。
- 可选的弹出提醒和推送通知:停止开始或结束、点差过宽或持仓被平仓时。
主要参数
- Stop windows:窗口时间的基准(服务器时间/电脑时间),Window 1 至 Window 5(空白 = 关闭)。
- Spread limit:开/关(默认关),最大点差(点,默认 30),按品种的上限。
- Symbols and positions:品种(空白 = 本图表,* = 市场报价中的全部,或列表),平掉禁止期间开立的持仓(默认关),只平这些魔术号(空白 = 全部,0 = 手动交易)。
- Flags:全局变量名称前缀(默认 "TWG")。
- Alerts(弹出、推送)、Panel(显示、语言、角落、偏移、字号)、平仓时的最大滑点、策略测试器演示。
- 共 23 个参数。MetaTrader 4 不显示分组标题,按上述顺序排成一列。
工作原理
- 本工具每 250 毫秒检查一次,约每秒写入一次标志,因此您的 EA 约在 1 到 2 秒后看到变化。
- 标志(终端全局变量;值为 UTC 时间,单位秒;"TWG" 为默认前缀):
- TWG.TIME:当前停止窗口的结束时间,窗口外为 0。
- TWG.SPR.<品种>(例如 TWG.SPR.EURUSD):该品种点差高于上限期间,值大于当前时间。每个监视的品种一个标志。
- TWG.NEXT:下一个停止窗口的开始时间。TWG.HB:最后更新时间(表示本工具正在运行)。
- 标志的值大于 TimeGMT() 期间即为开启。
- 供您的 EA 使用的基本检查(与默认前缀下的 TWG_Reader.mqh 逻辑相同):
bool GuardBlocks(const string sym)
{
if(MQLInfoInteger(MQL_TESTER)) return false;
double now = (double)TimeGMT();
if(GlobalVariableGet("TWG.HB") < now - 30) return false; // guard not running
return GlobalVariableGet("TWG.TIME") > now || GlobalVariableGet("TWG.SPR." + sym) > now;
}
每次新入场之前:if(GuardBlocks(_Symbol)) return;
- TWG_Reader.mqh 提供 TWG_IsBlocked、TWG_TimeBlocked、TWG_SpreadBlocked、TWG_SecondsLeft 和 TWG_GuardRunning。从市场下载的只有 EA 本体;该文件的全文发布在本产品的评论区。在策略测试器中,这些函数总是回答“未禁止”,因此不会改变您的回测。
- 星期指的是窗口开始的那一天。"Mon-Fri 23:50-01:15" 会生成五个窗口,分别在周一 23:50 … 周五 23:50 开始,到次日 01:15 结束。周一 00:00–01:15 不包括在内,因为这部分属于周日开始的时段。若要覆盖周末和周一早晨,请再加一个窗口,例如 Fri 21:00-Mon 01:15。(若用 Fri 21:00-Mon 01:00,周一 01:00–01:15 仍可开仓。)
- “禁止期间开立”是指:持仓的开立时间在停止窗口内,或当时该品种的点差高于上限(对开立不超过 10 分钟的持仓进行判断)。
- 在下一次检查时(每 250 毫秒或下一个报价跳动)发送平仓。
- 可以用相同前缀在多个图表上运行本工具(例如监视不同品种),此时标志保留最长的值。如果不同组的 EA 需要不同规则,请使用不同的前缀。
注意事项与局限
- 不构成保证。本工具本身不会阻止订单。只有检查标志的 EA 才会跳过新的入场。
- 移除最后一个本工具,停止即解除。当您移除它或关闭其图表时,它会立即清除自己的标志。如果终端意外停止,读取函数会在 30 秒后视本工具为已停止,默认此时允许交易。如果希望本工具未运行时您的 EA 也等待,请调用 TWG_IsBlocked(_Symbol, "TWG", true)(blockIfGuardStopped = true)。
- 标志约有 1 到 2 秒的延迟。在窗口或点差突增的第一秒发出的订单仍可能成交。短于一次检查间隔的点差突增可能被漏掉。
- 挂单不会被删除或修改。在停止期间成交的挂单会形成新持仓,只有在平仓选项开启且该持仓在范围内时才会被平仓。
- 魔术号过滤为空时,平仓选项也会平掉您在范围内手动开立的交易(魔术号 0 = 手动交易)。每次平仓都会产生点差和手续费,也可能以亏损结束。本工具无法阻止其他 EA 发送订单;如果某个 EA 在停止期间不断开仓,每一笔都会被平仓。
- 点差标志只针对监视的品种。如果您的 EA 交易其他品种,请将其加入列表或使用 *。
- 窗口时间按您选择的时钟。服务器时间会随经纪商的夏令时变化;电脑时间跟随本电脑。
- 终端全局变量属于单个终端。请在与您的 EA 相同的 MetaTrader 4 终端中运行本工具。
- 本工具只在 MetaTrader 4 运行并已连接时工作。平仓还需要开启“自动交易”(工具栏按钮),并在 EA 设置中允许实盘交易。
- 终端重启后,MetaTrader 4 有时会在几秒内无法创建计时器。本工具会在下一个报价跳动或图表事件时每 3 秒重试一次,在此之前面板显示红色行 "Timer not created - updates on ticks only (retrying)"。
- MetaTrader 4 没有读取服务器时钟的函数。本工具根据收到的报价估算服务器时间;刚启动时,在新报价到来之前,使用最后一个报价的时间。如果您更想用电脑时钟,请选择电脑时间。
- 面板随报价到来而重绘。没有报价时(例如周末),面板可能看起来比实际旧;标志仍由计时器更新。面板每行约在 63 字节处截断(日文更早截断)。
- 策略测试器:标志只保存在内存中。参数 "Tester only: demo window and small demo positions" 开启时(默认),本工具会开立小型演示持仓(最小手数,魔术号 73190):窗口前一笔,本工具不平;窗口内一笔,本工具立即平仓(演示会在几分钟后清理其持仓)。未设置窗口时,使用演示窗口(30 分钟或 2 根 K 线,每天最多一次)。测试报告只显示这段演示,并非交易成绩,可能显示小额亏损。入金非常少时(例如 10 美元)可能没有演示交易。演示绝不会在真实账户或模拟账户上运行。
兼容性与支持
- 仅限 MetaTrader 4。MetaTrader 5 版另行销售。加载到一个图表即可;仅在需要时再增加图表。
- 不使用 DLL、互联网或外部服务器。
- 请先在模拟账户上试用所有设置。
- 通过 MQL5 消息提供支持,3 个工作日内回复:安装、设置、错误报告以及读取函数的调用方法。我们无法建议应避开哪些时段或点差,无法提供行情观点或交易决策,也不代为修改您的 EA。
- 不承诺也不暗示任何交易结果。
