CME Gap Tracker for Gold and Bitcoin: Open Gaps, Fill Rate and a Fade-Trade Test - MetaTrader 5脚本
- 显示:
- 31
- 等级:
- 已发布:
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
CME黄金和比特币缺口追踪器:开盘缺口、填补率及反向交易测试
该工具可在黄金及24/7比特币图表上识别周末CME跳空缺口,将每个未填补的缺口保留在图表上直至价格回补,并展示缺口填补的频率、速度、价格最初的运行幅度,以及若进行反向交易可能获得的收益。采用不重绘机制,并为专家顾问(EA)预留缓冲区。
设计理念
“CME缺口总会回补”这一说法在各个比特币聊天群以及许多黄金频道中随处可见。CME期货于周五芝加哥时间16:00暂停交易,并于周日17:00恢复交易。 在此期间市场无论如何波动,都会在期货图表上形成缺口,而普遍认为价格最终会回调填补该缺口。
在相信这一点之前,我想要两个答案:缺口实际上被填补的频率有多高?如果确实被填补,你能否通过顺势交易获利,还是价格会先朝相反方向运行并导致你被止损?这个指标能在你的图表上直接解答这两个问题。
功能说明
- 将CME周五收盘价和周日开盘价转换为您的经纪商服务器时间,同时考虑芝加哥的美国夏令时规则以及您服务器时钟的规则。
- 提取您图表在上述两个时间点的价格。两者之差即为缺口。小于 InpMinGapPct(默认值为 0.30%)的缺口将被忽略。
- 将每个跳空以方框形式绘制,并标注其大小。未填补的跳空将保留在图表上并向右延伸,直到有已收盘的K线回填至周五收盘价。此时方框变为灰色,标签显示填补所耗费的小时数。
- 在 CME 开盘价所在的K线处添加箭头:跳空下跌时向上,跳空上涨时向下,箭头方向与缺口填补方向一致。
- 显示过去 InpWeeksBack 周(默认 104 周)的评分卡面板。
在整个周末均保持交易状态的比特币图表上,周五最后一根K线与周一第一根K线之间没有可见的缺口,因此普通的周末缺口工具无法检测到任何缺口。只有当观察CME两个时间点的价格时,CME缺口才会显现,而这正是该指标的功能。 在黄金市场中,现货市场周末同样休市,因此 CME 缺口与经纪商的周末缺口几乎是同一回事。
需要明确的一点是:该指标使用的是其运行所在图表的价格,而非期货价格。在现货或差价合约(CFD)图表上,您看到的是CME周末期间的现货价格变动。而真实期货图表上的缺口可能会略有不同,因为期货交易通常相对于现货存在溢价或折价。
面板显示的内容
- 缺口的数量(按上涨和下跌分类),以及有多少个周末的缺口幅度低于最小阈值。
- 已填补的缺口数量,以及其中在24小时内和7天内填补的比例。
- 填补所需时间的中位数,以及填补速度最慢的10%缺口所需的时间。
- 填补前的价格波动幅度:价格在回调至填补水平前偏离该水平的距离,以缺口大小的倍数表示。例如,对于1%的缺口,2.0倍的波动幅度意味着价格首先向相反方向又波动了2%。
- 反向交易测试:在CME开盘时建仓,目标价位设为周五收盘价附近;止损位设为缺口大小的InpStopGapMult倍(反向方向);若未触及任一目标价位,则在InpMaxHoldDays天后平仓。建仓K线的价差计入成本。当止损位和目标价位均位于同一K线内时,则计入止损。
- 在计分窗口内未填补缺口的数量,以及当前价格上方和下方最近的未填补成交价(这两项会检查加载历史数据中的每个缺口)。
在黄金市场中的发现
XAUUSD H1,MetaQuotes-Demo数据,除特别说明外均采用默认参数。两个窗口在2025年12月底有几天重叠。
| 2026年,距9月18日还有38周 | 2026年,距9月18日还有38周 | 2025年,截至12月31日的52周 | 2025年,截至12月31日的52周 | |
|---|---|---|---|---|
| 最小间隔 | 0.30% | 0.10% | 0.30% | 0.10% |
| 价差(上涨/下跌) | 24(10/14) | 33(13/20) | 6(2/4) | 19(9/10) |
| 已填补 | 23 (96%) | 32 (97%) | 5 (83%) | 18 (95%) |
| 24小时内完成 | 58% | 67% | 50% | 68% |
| 7天内完成 | 83% | 85% | 50% | 74% |
| 职位填补的中位时间 | 7 小时 | 3 小时 | 3 小时 | 3 小时 |
| 填充前加热时间中位数 | 2.18倍间隙 | 2.31倍间隙 | 2.16倍间隙 | 1.70倍缺口 |
| 反向交易,止损设在1倍缺口处 | 24 | 33 | 6 | 19 |
| 反向交易胜率 | 29.2% | 27.3% | 16.7% | 26.3% |
| 反向交易盈利系数 | 0.41 | 0.37 | 0.20 | 0.35 |
| 反向交易总收益 | -10.1R | -15.1R | -4.0R | -9.1R |
因此,这句俗语在黄金市场中基本成立:83%至97%的跳空缺口最终被填补。但交易策略却在此处失效。在那些被填补的跳空缺口中,中位数缺口最初往往会朝相反方向运行约两个缺口幅度的距离,因此,大多数止损位设为一个缺口幅度的逆势交易都以亏损告终。
我尝试过设置更宽的止损,最低为0.30%。止损幅度越大,获胜概率越高,但每次亏损也更大,且这两年的总收益仍为负值:
| 止损 | 2026年胜率 | 2026年总收益 | 2026年盈亏比 | 2025年胜率 | 2025年总数 | 2025年PF |
|---|---|---|---|---|---|---|
| 1倍差距 | 29.2% | -10.1R | 0.41 | 16.7% | -4.0R | 0.20 |
| 2倍间隙 | 45.8% | -7.0R | 0.44 | 33.3% | -3.0R | 0.25 |
| 3倍间隙 | 66.7% | -2.0R | 0.72 | 50.0% | -2.0R | 0.33 |
2025年仅有6个0.30%或以上的缺口,因此请将该列视为小样本。我从中得出的结论很简单:对于黄金而言,缺口是价格可能触及的理想位置,但在开盘时以固定止损位反向交易该缺口,在这两年中均未获利。
有些缺口很长时间都无法填补。截至2026年9月18日,2025年形成的某个黄金缺口仍未填补,其填补价位为3201.00,远低于当前价格。
图1. XAUUSD 1小时图,2026年1月下旬:一个+0.43%的缺口在106小时内填补,一个-2.47%的缺口在32小时内填补
图2. 表格中四次模拟运行的评分卡面板
关于比特币
我无法在比特币上进行测试。我使用的测试经纪商 MetaQuotes-Demo 没有 24/7 交易的 BTCUSD 合约,只有在纳斯达克交易时段内交易的比特币 ETF。针对 24/7 图表的代码路径与黄金的运行逻辑相同:即周五收盘价和周日开盘价。 在将该方法应用于BTC之前,请先对照CME期货图表核对前几个缺口,并为您的经纪商设置服务器偏移量参数。
输入参数
| 输入 | 默认值 | 功能说明 |
|---|---|---|
| InpGMTWinter | 2 | 冬季服务器与格林尼治标准时间的偏移量(小时) |
| InpGMTSummer | 3 | 夏季服务器与格林尼治标准时间的时差(小时) |
| InpServerDST | 欧洲 | 服务器时钟的夏令时规则(固定、欧洲或美国) |
| InpMinGapPct | 0.30 | 最小价差,占价格的百分比 |
| InpWeeksBack | 104 | 记分卡中包含的历史周数 |
| 平局周数 | 26 | 已填补缺口的周数(未填补的缺口始终会被绘制) |
| InpStopGapMult | 1.0 | 渐隐测试:在缺口的倍数处停止 |
| InpMaxHoldDays | 5 | 回撤测试:经过此天数后平仓 |
| InpShowPanel | true | 显示记分卡面板 |
| InpPanelCorner | 左上角 | 面板角 |
| InpOpenGapColor | 浅橙色 | 未填充间隙的颜色 |
| InpFilledGapColor | 盖恩斯伯勒 | 已填充缺口的颜色 |
| InpAlertNewGap | true | 当出现新缺口时发出警报 |
| InpAlertFill | true | 当未填补的缺口被填补时发出警报 |
| InpAlertPush | false | 同时发送推送通知 |
默认设置(冬季为GMT+2,夏季为GMT+3,遵循欧洲规则)与MetaQuotes-Demo以及许多其他MetaTrader经纪商一致。如果您的经纪商服务器全年运行在UTC时区,请将两个偏移量均设为0,并将规则设为“固定”。请使用H1或更低的时间周期。 在H4及以上时间周期上,CME时间会落在单根K线内,价格数据会不够精确。
在专家顾问中使用
缺口数据会写入CME开盘的K线中,且在该K线开盘的瞬间即被写入,因此专家顾问(EA)在偏移量为0时即可读取该数据。该指标仅使用周五收盘价和该K线的开盘价,因此此后数据不会再发生变化。 我通过一个测试EA验证了这一点:该EA会记录出现的每个跳空,并在运行结束时将列表与指标的缓冲区进行比对:2026年黄金市场的24个跳空中有24个完全匹配。
| 缓冲区 | 内容 |
|---|---|
| 0 | 跳空下跌(顺势买入),值为入场价格,否则为EMPTY_VALUE |
| 1 | 跳空高开(逆势卖出),格式同上 |
| 2 | 跳空K线上的成交价(周五收盘价) |
| 3 | 在跳空K线设置反向测试止损 |
| 4、5 | 每个收盘K线上方和下方最近的开盘成交价 |
| 6 至 9 | 最后一根收盘K线的评分卡:已平仓的逆势交易、盈利交易、总风险(R)、亏损风险之和 |
int handle; datetime lastBar = 0; int OnInit() { handle = iCustom(_Symbol, PERIOD_H1, "CMEGapTracker"); return(handle == INVALID_HANDLE ? INIT_FAILED : INIT_SUCCEEDED); } void OnTick() { //--- 一旦该K线开盘,CME开盘K线上就会显示一个跳空 datetime bar = iTime(_Symbol, PERIOD_H1, 0); if(bar == lastBar) return; lastBar = bar; double up[1], down[1], target[1], stop[1]; if(CopyBuffer(handle, 1, 0, 1, up) < 1 || CopyBuffer(handle, 0, 0, 1, down) < 1 || CopyBuffer(handle, 2, 0, 1, target) < 1 || CopyBuffer(handle, 3, 0, 1, stop) < 1) return; if(up[0] != EMPTY_VALUE) Print("Gap up, fill level ", target[0], ", fade stop ", stop[0]); if(down[0] != EMPTY_VALUE) Print("Gap down, fill level ", target[0], ", fade stop ", stop[0]); }
缓冲区4和5对于另一类EA非常有用,这类EA会将开盘缺口作为交易目标,但其建仓原因可能另有他因。该指标特意未设置输入组,因为MQL5会将每个“输入组”视为iCustom()的参数,且其后的每个值都会相应向后偏移一位。
限制
该指标基于K线数据运行,因此无法识别单根K线内部事件的顺序。它使用您图表在CME时间点的价格,而非期货价格。导致CME交易周缩短的美国节假日不会被单独处理。 反向交易测试中,仅计入入场K线的点差,不计佣金和滑点,而周末开盘时正是滑点最严重的时候。上述所有数据均基于某家经纪商的过往跳空数据。
阿里·拉杰普特
由MetaQuotes Ltd译自英文
原代码: https://www.mql5.com/en/code/77686
Gold Breakout EA for XAUUSD H4 +90 Percent in a 2020 to 2026 Backtest
一款适用于黄金的“乌龟”式突破型EA。当H4K线在上升趋势中收盘价高于20根K线的高点时买入,止损设为2个ATR,目标价设为2R。 在XAUUSD上进行了2020年1月至2026年9月的回测:以10,000为本金、1%风险率,盈利9,029.72;盈利系数1.77;最大回撤11.38%;7年中6年盈利。
NeonDesk - Neon Manual Trading Panel with Multi-Timeframe Bias
可拖拽至图表上的手动交易面板,具备多时间周期偏好、ATR止损/止盈提示、追踪止损以及一键“买入/卖出/全部平仓”功能。
RSI超买反转 - 欧元兑美元
一款基于MetaTrader 5策略测试器的开源欧元/美元专家顾问,基于RSI耗尽信号、基于ATR的平仓策略以及经波动率调整的点差过滤机制。
EMA Cross Demo EA with ATR Stops
一个小型演示专家顾问:基于快速/慢速EMA交叉的入场策略(仅基于已收盘K线进行评估,无重绘现象),基于ATR的止损和止盈,点差过滤器,以及适用于对冲账户和净额结算账户的仓位管理。包含用于一致性测试的Python参考实现。 这是一个可交付的示例,并非交易建议——随附的权益曲线来自合成数据,仅用于展示方法,而非反映交易优势。