在 MQL5 市场获取: FVG and Structure PRO
风险提示。 交易存在亏损风险。本指标在图表上标记价格结构;它不预测市场,不下单交易,也不保证任何结果。请将其与您自己的分析和风险管理结合使用,并先在模拟账户上测试。

FVG and Structure PRO 绘制市场结构(BOS / CHoCH)、带填补跟踪的公允价值缺口(FVG)、订单块(order blocks)、等高 / 等低点、更高时间周期的 FVG、可选的溢价 / 折价区间(premium / discount)以及多时间周期结构面板。每个元素都在已收盘的K线上确认:出现之后不会重绘。适用于任何品种、任何经纪商和任何时间周期。
2.00 版本新增功能
- 为 EA 和仪表盘新增 5 个缓冲区:最近的未填补看涨 FVG(上沿、下沿)、最近的未填补看跌 FVG(上沿、下沿)以及区域事件(新增 / 已缓解 FVG、新增 / 已突破订单块)— 第 14 节。
- 即使关闭绘制,FVG 和订单块仍会被跟踪,因此缓冲区在干净的图表上也能工作。绘制、警报和现有缓冲区保持不变。
- 面板:当最后一个事件所在的K线尚未出现在图表历史中时,隐藏“bars ago”(几根K线之前)文本。
1. 安装与首次启动
- 在 MQL5 Market 购买或租用本指标,并从终端的 Market 选项卡安装(工具箱 → Market → 已购买 → 安装)。
- 打开图表,从导航器(Indicators → Market)将 FVG and Structure PRO 拖到图表上。
- 保持默认输入参数或进行调整(第 13 节),然后按 OK。
指标分析最近的 1500 根K线(输入参数 Bars analysed),之后跟随每根新K线。面板显示在右下角。在图表上,该指标名为 FVG & Structure PRO。
会导致指标拒绝启动的设置(输入参数窗口会再次打开):Swing strength 超出 1-50 范围、Bars analysed 低于 100,或任何“每侧”(per side)限额低于 1。
2. 图表图例
| 图表上 | 含义 |
|---|---|
| 实线 + BOS 标签(青绿 / 红色) | 结构突破(Break of structure):一根K线沿当前趋势方向收盘于最后一个波段高点之上(青绿色,标签在上方)或波段低点之下(红色,标签在下方)。 |
| 虚线 + CHoCH 标签(青绿 / 红色) | 性质转变(Change of character):同类突破,但与当前趋势方向相反(结构趋势反转)。 |
| HH / LH 标签(红色,位于高点上方) | 与前一个波段高点相比的更高高点 / 更低高点(可选)。 |
| HL / LL 标签(青绿色,位于低点下方) | 与前一个波段低点相比的更高低点 / 更低低点(可选)。 |
| 深绿色填充框 | 未填补的看涨 FVG。 |
| 深红色填充框 | 未填补的看跌 FVG。 |
| 深蓝色填充框 + OB 标签(青绿色) | 有效的看涨订单块。 |
| 深棕色填充框 + OB 标签(红色) | 有效的看跌订单块。 |
| 深灰色框(订单块带灰色 OB 标签) | 已缓解的 FVG 或已突破的订单块 — 仅当 Hide mitigated 关闭时显示。 |
| 金色轮廓框 + 如 H1 FVG 的标签 | 更高时间周期的未填补 FVG(可选)。 |
| 金色点线 + EQH / EQL | 等高点 / 等低点(静止流动性)。价格穿过后(被扫除),线条变为灰色。 |
| 红色点线 Premium、银色虚线 Equilibrium、青绿色点线 Discount | 当前波段高点 / 波段低点的区间及其中点(可选)。 |
| 文本面板(右下角) | M15 / H1 / H4 / D1 的结构偏向、最后一次结构突破、价格上方和下方最近的 FVG。 |
每条线和每个框都有工具提示:将鼠标悬停其上即可查看其类型和价格。这些对象在对象列表中隐藏且无法选中,因此不会被意外移动。有效区域和水平线会向当前K线右侧延伸 10 根K线(输入参数 Active zones extend right)。
3. 市场结构:BOS 和 CHoCH

波段高点(swing high)是指其最高价高于两侧各 Swing strength 根K线(默认 5)最高价的K线;波段低点(swing low)与之相反。因此,一个波段在形成后经过 Swing strength 根K线才得到确认。
- 当一根K线收盘于最后一个波段高点之上时,从该波段到突破K线绘制一条看涨突破线;收盘于最后一个波段低点之下则绘制看跌突破线。
- 突破顺应当前趋势时为 BOS(实线),反转当前趋势时为 CHoCH(虚线)。加载后的第一次突破为 BOS。
- 每个波段只能被突破一次。超出波段的影线不计 — 只计收盘价。
- 只有最近的 Structure breaks kept on chart(默认 20)次突破保留在图表上;更早的会被删除。波段标签保留该数量的两倍。
波段标签(输入参数 HH / HL / LH / LL labels,默认关闭)将每个已确认的波段与同侧的前一个波段进行比较并标注。
较大的 Swing strength 会产生较少但更重要的波段(波段 / 外部结构);较小的值反应更快(内部结构)。
4. 公允价值缺口(FVG)

FVG 是一种三根K线的失衡:第三根K线的最低价高于第一根K线的最高价(看涨),或第三根K线的最高价低于第一根K线的最低价(看跌)。方框从中间那根K线开始绘制,覆盖两根影线之间的缺口。
- Minimum gap size(最小缺口大小,默认 0.2 × ATR 14):更小的缺口会被忽略。提高该值可只显示较大的失衡。
- FVG is mitigated at(FVG 缓解条件):Full fill(默认 — 价格到达缺口的远端)、50% fill (consequent encroachment)(价格到达中点)或 First touch(价格到达近端)。
- Shrink to the unfilled part(默认开启):当价格进入缺口但尚未将其缓解时,方框缩小到仍未填补的部分。
- Active FVGs per side(默认 8):当出现新 FVG 且超出限额时,删除该侧最早的有效 FVG。
填补情况在已收盘的K线上评估。已缓解的 FVG 会从图表中删除,或以已缓解颜色保留(第 8 节)。
5. 更高时间周期的 FVG

开启 Show higher timeframe FVGs 后,所选 Higher timeframe(默认 H1)的未填补 FVG 会以轮廓框(默认金菊色 goldenrod)绘制,带有如 H1 FVG 的标签,叠加在图表时间周期的 FVG 之上。
- 它们使用与图表 FVG 相同的最小大小和缓解规则(不缩小),并从该时间周期最近的 400 根K线中读取。
- 只有已收盘的更高时间周期K线才会生成缺口;正在形成的更高时间周期K线已可以填补缺口。
- Active HTF FVGs per side(默认 4)限制显示的数量。
- 仅当所选时间周期高于图表时间周期时才绘制(例如在 M5 或 M15 图表上显示 H1 缺口)。
- Killzone 过滤器不适用于它们。它们仅为图表对象(无缓冲区)。
6. Killzone 过滤器(ICT)
开启 Only FVGs formed inside killzones 后,仅保留中间K线在所选 killzone 之一内开盘的图表时间周期 FVG,以纽约时间计算并自动处理夏令时:
| Killzone | 纽约时间 | 默认 |
|---|---|---|
| London KZ | 02:00-05:00 | 开启 |
| NY AM KZ | 07:00-10:00 | 开启 |
| NY PM KZ | 13:30-16:00 | 关闭 |
该过滤器适用于日内图表(M1 至 H1)。它同样作用于 FVG 缓冲区和 FVG 警报。
Broker time zone(经纪商时区)— 用于将图表的服务器时间转换为纽约时间:
- Auto (live) / GMT+2/+3 in tester(默认):偏移量根据终端时钟测量。采用 GMT+2 / GMT+3(纽约收盘)的经纪商会在整个历史中按美国夏令时进行跟踪。在策略测试器中假定为 GMT+2 / GMT+3。
- GMT+2 / GMT+3 (New York close brokers):强制使用该规则。
- Fixed GMT offset:全年使用 Broker GMT offset(默认 2)。在测试器中用于不采用 GMT+2 / GMT+3 的经纪商。
7. 订单块

每次结构突破(BOS 或 CHoCH)都会生成一个订单块:即产生该突破的那段走势中的极端K线 — 看涨突破时为波段与突破之间最低价最低的K线,看跌突破时为最高价最高的K线。方框覆盖该K线的完整范围(最高价到最低价),并带有 OB 标签。
- 当一根K线收盘穿过订单块时(低于看涨 OB、高于看跌 OB),该订单块被突破。
- Active order blocks per side(默认 3):超出限额时删除最早的一个。
- 当 Show order blocks 关闭时,订单块仍会为缓冲区计算(第 14 节),但不会绘制,也不会发送 OB 警报。
8. 已缓解区域
默认情况下(Hide mitigated FVGs and order blocks = true),已缓解的 FVG 或已突破的订单块会从图表上消失。关闭该输入参数可将它们保留为历史记录:方框恢复原始大小,在缓解它的那根K线处结束,并以 Mitigated zone color(默认深灰色)着色;OB 标签变为灰色。此时工具提示以“(mitigated)”结尾。

9. 流动性:等高点和等低点

当两个连续的波段高点(或低点)彼此相差在 Equal tolerance(默认 0.1 × ATR 14)以内时,从第一个波段到第二个波段绘制一条金色点线,并标注为 EQH(等高点)或 EQL(等低点)。这些水平通常聚集着静止流动性(止损单)。
- 只要水平未被触及,线条就向右延伸。
- 当之后的K线越过该水平(影线或收盘)时,它被扫除(swept):线条在该K线处停止并变为灰色。
- Levels kept on chart(默认 6):更早的水平会被删除。
提高容差可找到更多水平;降低容差可获得更严格的匹配。
10. 溢价 / 折价

开启 Equilibrium of the current swing range 后,从最近两个波段中较早的一个起,向右绘制三条线直至区域的右边缘:
- Premium(红色点线)位于最后一个波段高点;
- Equilibrium(银色虚线)位于中点;
- Discount(青绿色点线)位于最后一个波段低点。
价格高于均衡线时处于区间的溢价半区,低于均衡线时处于折价半区。线条随每个新确认的波段而移动。
11. 面板

面板(默认在右下角,输入参数 Panel corner)显示:
| 行 | 内容 |
|---|---|
| Title | FVG & Structure PRO |
| Structure | M15、H1、H4 和 D1 的结构趋势:▲ 看涨,▼ 看跌,– 尚无突破或历史数据仍在加载。图表所在时间周期使用图表自身的结果;其他时间周期以相同的波段强度在各自最近 500 根已收盘K线上计算,并在其开出新K线时刷新。 |
| Last | 图表的最后一次结构突破:方向、BOS 或 CHoCH、被突破波段的价格以及距今几根K线。在首次突破之前显示:“no structure break yet”。 |
| FVG above | 完全位于当前价格上方的最近未填补 FVG(下沿 - 上沿),或“none”。 |
| FVG below | 完全位于当前价格下方的最近未填补 FVG,或“none”。 |
包含当前价格的 FVG 不会被列为上方或下方。当 Show FVGs 关闭时,两行 FVG 显示“none”。面板在每根新K线时刷新,并始终显示在区域之上。
12. 警报
| 输入参数 | 触发条件 | 消息示例 |
|---|---|---|
| BOS / CHoCH | 一根K线收盘于某个波段之外(在下一根K线开盘时发送) | Bullish CHoCH above 1.08520 |
| New FVG | 在已收盘K线上确认一个新的 FVG(仅当 Show FVGs 开启时) | New bearish FVG 1.08310 - 1.08365 |
| Price enters an FVG | 正在形成的K线进入一个未填补的 FVG — 每个 FVG 一次(仅当 Show FVGs 开启时) | Price in bullish FVG 1.08210 - 1.08260 |
| Price enters an order block | 正在形成的K线进入一个有效订单块 — 每个 OB 一次(仅当 Show order blocks 开启时) | Price in bearish order block 1.08700 - 1.08780 |
每种警报可设为 Off、Popup、Sound、Smartphone notification、Popup + Sound、Notification + Sound、Popup + Notification 或 Popup + Sound + Notification。所有警报默认关闭。Sound 选择终端的一种声音(默认“alert”);Also send e-mail 为每个已启用的警报附加一封电子邮件。
文本包含产品、品种和时间周期,例如 FVG & Structure PRO: EURUSD | M15 | Bullish BOS above 1.08520 。每种警报类型每根K线最多触发一次。加载指标时,已被当前K线触及的区域会被静默标记,因此不会突然涌出大量旧警报。推送通知需要在 工具 → 选项 → 通知 中填写 MetaQuotes ID;电子邮件需要终端的电子邮件设置。策略测试器不显示弹窗、声音或通知。
13. 输入参数
MARKET STRUCTURE
| 输入参数 | 默认值 | 说明 |
|---|---|---|
| Swing strength (bars on each side) | 5 | 波段高点 / 低点两侧各自的K线数(1-50)。 |
| BOS / CHoCH lines | true | 绘制结构突破。 |
| HH / HL / LH / LL labels | false | 标注每个波段。 |
| Structure breaks kept on chart | 20 | 更早的突破会被删除。 |
| Bullish color | 38,166,154 (teal) | 看涨突破、标签、OB 标签、Discount 线。 |
| Bearish color | 239,83,80 (red) | 看跌突破、标签、OB 标签、Premium 线。 |
FAIR VALUE GAPS
| 输入参数 | 默认值 | 说明 |
|---|---|---|
| Show FVGs | true | 绘制 FVG(无论是否绘制,都会为缓冲区跟踪)。 |
| Minimum gap size (x ATR 14) | 0.2 | 更小的缺口会被忽略。 |
| FVG is mitigated at | Full fill | Full fill / 50% fill (consequent encroachment) / First touch。 |
| Shrink to the unfilled part | true | 方框在被填补过程中缩小。 |
| Active FVGs per side | 8 | 每侧最多未填补 FVG 数量。 |
| Bullish FVG color | 22,74,68 | 看涨 FVG 的填充色。 |
| Bearish FVG color | 92,38,40 | 看跌 FVG 的填充色。 |
HIGHER TIMEFRAME FVGs
| 输入参数 | 默认值 | 说明 |
|---|---|---|
| Show higher timeframe FVGs | false | 绘制下方所选时间周期的 FVG。 |
| Higher timeframe | 1 Hour | 必须高于图表时间周期。 |
| Active HTF FVGs per side | 4 | 每侧最多 HTF FVG 数量。 |
| HTF FVG outline color | Goldenrod | 轮廓和标签颜色。 |
KILLZONE FILTER (ICT)
| 输入参数 | 默认值 | 说明 |
|---|---|---|
| Only FVGs formed inside killzones | false | 仅保留中间K线位于所选 killzone 内的 FVG。 |
| London KZ (NY 02:00-05:00) | true | |
| NY AM KZ (NY 07:00-10:00) | true | |
| NY PM KZ (NY 13:30-16:00) | false | |
| Broker time zone | Auto (live) / GMT+2/+3 in tester | 其他选项:GMT+2 / GMT+3 (New York close brokers)、Fixed GMT offset。 |
| Broker GMT offset (fixed mode and tester) | 2 | 小时,由 Fixed GMT offset 使用。 |
ORDER BLOCKS
| 输入参数 | 默认值 | 说明 |
|---|---|---|
| Show order blocks | true | 绘制订单块(无论是否绘制,都会为缓冲区跟踪)。 |
| Active order blocks per side | 3 | 每侧最多有效 OB 数量。 |
| Bullish OB color | 28,62,110 | 看涨 OB 的填充色。 |
| Bearish OB color | 110,64,24 | 看跌 OB 的填充色。 |
MITIGATED ZONES
| 输入参数 | 默认值 | 说明 |
|---|---|---|
| Hide mitigated FVGs and order blocks | true | 设为 false 时以下方颜色将其保留在图表上。 |
| Mitigated zone color (when shown) | 44,46,52 | 已缓解区域的填充色。 |
LIQUIDITY
| 输入参数 | 默认值 | 说明 |
|---|---|---|
| Equal highs / lows | true | 绘制 EQH / EQL 水平。 |
| Equal tolerance (x ATR 14) | 0.1 | 两个波段被视为相等的最大距离。 |
| Levels kept on chart | 6 | 更早的水平会被删除。 |
| Equal highs / lows color | Gold | 未被触及水平的颜色(已扫除的水平为灰色)。 |
PREMIUM / DISCOUNT
| 输入参数 | 默认值 | 说明 |
|---|---|---|
| Equilibrium of the current swing range | false | 绘制 Premium / Equilibrium / Discount。 |
HISTORY AND PANEL
| 输入参数 | 默认值 | 说明 |
|---|---|---|
| Bars analysed | 1500 | 指标加载时处理的历史K线数(最少 100)。 |
| Active zones extend right (bars) | 10 | 有效区域和水平线延伸超出当前K线的距离。 |
| Show panel | true | 显示文本面板。 |
| Panel corner | Right lower corner | 面板所在的图表角落。 |
ALERTS
| 输入参数 | 默认值 | 说明 |
|---|---|---|
| BOS / CHoCH | Off | 结构突破的警报模式。 |
| New FVG | Off | 新 FVG 的警报模式。 |
| Price enters an FVG | Off | 触及 FVG 的警报模式。 |
| Price enters an order block | Off | 触及 OB 的警报模式。 |
| Sound | alert | 声音模式使用的终端声音。 |
| Also send e-mail | false | 每个已启用的警报都发送一封电子邮件。 |
14. 供 EA / 仪表盘使用的缓冲区
本指标提供 7 个缓冲区,可通过 iCustom + CopyBuffer 读取。所有数值在已收盘K线上为最终值:读取 shift 1 可获得最后一个最终值。
| 缓冲区 | 名称 | 数值 | 何时 | 空值 |
|---|---|---|---|---|
| 0 | Structure trend | +1 看涨, -1 看跌;首次突破之前为 0 | 每根K线;正在形成的K线重复最后一个已收盘值 | 0 |
| 1 | Structure event | 在收盘突破波段的那根K线上: +1 看涨 BOS, +2 看涨 CHoCH, -1 看跌 BOS, -2 看跌 CHoCH | 仅已收盘K线;正在形成的K线始终为 0 | 0 |
| 2 | Nearest open bullish FVG - top (2.00) | 价格;在未填补的看涨 FVG 中,上沿最高的那个(Shrink 开启时为未填补部分) | 每根K线收盘时;正在形成的K线重复最后一个已收盘值 | EMPTY_VALUE |
| 3 | Nearest open bullish FVG - bottom (2.00) | 价格,与缓冲区 2 为同一 FVG | 同缓冲区 2 | EMPTY_VALUE |
| 4 | Nearest open bearish FVG - top (2.00) | 价格;在未填补的看跌 FVG 中,下沿最低的那个 | 同缓冲区 2 | EMPTY_VALUE |
| 5 | Nearest open bearish FVG - bottom (2.00) | 价格,与缓冲区 4 为同一 FVG | 同缓冲区 2 | EMPTY_VALUE |
| 6 | Zone event (2.00) | +1 / -1 新的看涨 / 看跌 FVG, +2 / -2 FVG 已缓解, +3 / -3 新订单块, +4 / -4 订单块被突破。同一根K线上有多个事件时:保留按此顺序的第一个 | 仅已收盘K线;正在形成的K线始终为 0 | 0 |
“未填补”(open)遵循输入参数 FVG is mitigated at、Minimum gap size、Active FVGs per side 和 killzone 过滤器。即使 Show FVGs / Show order blocks 关闭,FVG 和订单块仍会被跟踪。等高 / 等低点和更高时间周期 FVG 仅为图表对象。
加载。 Market 版本安装在 MQL5\Indicators\Market\ 中;请在导航器中确认确切的文件名。名称后不带参数时使用默认输入参数。若要修改输入参数,请按第 13 节的顺序传入。每个 input group 标题本身也是一个参数:请在其位置传入空字符串 "" ,否则后面的每个值都会错位。末尾省略的输入参数保持默认值。
```mql5 // "" = group MARKET STRUCTURE, 5 = swing strength, false = no BOS / CHoCH lines int h = iCustom(_Symbol, PERIOD_H1, "Market\FVG and Structure PRO", "", 5, false);
double trend[1], bt[1], bb[1], ze[1]; if (BarsCalculated(h) > 0) { if (CopyBuffer(h, 0, 1, 1, trend) == 1) Print("structure ", (int)trend[0]); // +1 / -1 if (CopyBuffer(h, 2, 1, 1, bt) == 1 && CopyBuffer(h, 3, 1, 1, bb) == 1 && bt[0] != EMPTY_VALUE) Print("nearest bullish FVG ", bb[0], " - ", bt[0]); if (CopyBuffer(h, 6, 1, 1, ze) == 1 && ze[0] != 0.0) Print("zone event ", (int)ze[0]); } ```
注意:由 iCustom 创建的指标会在调用程序的图表上绘制其面板和对象 — 如需干净的仪表盘,请关闭绘制相关的输入参数和面板。首次读取前请等待 BarsCalculated(h) > 0 (历史数据可能仍在加载)。对于多品种仪表盘,1000 根 Bars analysed 已足够。
15. 使用技巧
- 日内交易: 在 M5 或 M15 上开启 Show higher timeframe FVGs 并设置 Higher timeframe = H1,可看到图表缺口位于更大缺口之内的情形。
- 减少杂乱: 提高 Minimum gap size,降低 Active FVGs per side / Active order blocks per side,或开启 killzone 过滤器。
- 结构深度:Swing strength 为 3 时跟随内部结构;8-10 时仅跟随主要波段。面板中其他时间周期的偏向使用相同的值。
- 反应历史: 关闭 Hide mitigated 以研究价格对过往区域的反应。
- 每个图表一个实例: 同一图表上的两个副本会共用对象名称并相互擦除对方的绘制。如需比较设置,请打开同一品种的第二个图表。
16. 常见问题与故障排除
- 会重绘吗? 不会。波段、突破、FVG 和订单块都在已收盘K线上生成,之后不会移动。按定义,波段在其所在K线之后 Swing strength 根K线才会绘制(它需要右侧的K线)。
- 面板中某个时间周期显示“–”。 该时间周期最近 500 根K线中尚无结构突破,或其历史数据仍在下载;它会在下一根K线时更新。
- 没有出现 HTF FVG。 图表时间周期必须低于 Higher timeframe,而且此时可能不存在该大小的未填补缺口。
- Killzone 过滤器删除了所有 FVG。 请检查 Broker time zone。在 H4 及以上的图表上,很少有K线在 killzone 内开盘。
- 没有警报。 所有警报默认处于 Off 状态。FVG 和 OB 警报还需要开启对应的绘制。触及警报每个区域只触发一次。
- 价格已进入某个 FVG,但它仍保持未填补状态。 在 Full fill 模式下,只有当价格到达缺口远端时缺口才会关闭;开启 Shrink 时,方框显示仍未填补的部分。
- 策略测试器。 在可视化和非可视化模式下均可工作;测试器中不会发送弹窗、声音和通知。
技术支持:请在 MQL5 上向作者发送私信。


