- 显示:
- 4
- 等级:
- 已发布:
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
几乎所有基于结构的方法都从同一个问题开始:哪些高点和低点真正重要? 后续的所有内容——市场结构、BOS和CHoCH、订单块、流动性水平——都是基于对这一问题的答案构建的,因此你选择的定义将决定后续分析所呈现的内容。
对此有几种常见的解答方式。 最广为人知的是“三根K线模式”(分形):当某根K线的高点同时高于其左右两根K线时,即为震荡高点。该方法具有对称性,计算简单,也是大多数震荡指标所采用的定义。其他方法则将观察窗口扩展至5根或7根K线,或通过最小点数变动或ATR(平均真实范围)来筛选候选高点。
本指标采用了一种不同的定义——即Trading Hub 3.0中使用的回调 定义。它不再询问K线是否高于其邻近K线,而是考察价格 是否回调并拒绝了该K线。只有当市场价格回调并跌破形成该高点的K线低点时,该高点才被确认为波动高点。 一切不取决于形态,而取决于价格后续的走势。
实际区别在于:分形描述的是几何形态,而回调描述的则是一个事件。正因为回调是一种事件,它还能告诉你波动何时 成立——而正是这个时间戳,使得实现不重绘功能成为可能。
规则如何运作
检测器绝不会同时搜索两边。它每次只 搜索一边,并精确保留三条信息:
| 状态 | 含义 |
|---|---|
| 方向 | 当前正在搜索哪一侧——高电平还是低电平 |
| 追踪到的极值 | 当前走势段中迄今为止出现的最高点(或最低点) |
| 参考水平 | 形成该极值的K线另一 端 |
参考位是关键所在。当一根K线创下新的最高高点时,该K线本身也会提供一个后续用于确认该高点的价位:即其自身的低点。价格必须回调并跌破该低点,该高点才算有效。
图示解读:
- A—— 行情段开启。追踪的高点和参考低点均来自同一根K线。
- B—— 每次出现更高的高点,这两个数值都会被替换。此时高点仍为暂定;不作任何标记。
- C—— 某根K线最终跌破参考低点。这就是 回调,它确认了被追踪的高点为波段高点。
- D—— 确认K线随即开启对低点的搜索,过程呈镜像:追踪最低低点,其高点作为参考,向上突破即确认该低点。
由于确认一侧总会将搜索方向切换至另一侧,波段高点和低点会自动交替出现。这既无需单独的规则强制执行,也不需要与之前的波段进行比较。
逐根K线规则
对于每根收盘K线,检测器会提出两个独立问题:该K线是否创下新极值? 是否突破了参考位? 每个方向可能出现四种组合。
| # | 当前趋势 | 当前K线 | 操作1 | 操作2 |
|---|---|---|---|---|
| 1 | 寻找高点 | 内部K线——未创出新高,参考低点保持不变 | 无 | 无 |
| 2 | 寻找高点 | 创出新高,参考低点保持不变 | 追踪高点 = 本根K线的高点 | 基准低点 = 本根K线的低点 |
| 3 | 寻找高点 | 突破——未创出新高,但交易价格低于参考低点 | 确认追踪高点为震荡高点 | 切换至低点:追踪低点 = 本根K线的低点,参考高点 = 本根K线的高点 |
| 4 | 寻找高点 | 外包K线——创出新高并 跌破参考低点 | 确认该K线自身的高点 为波段高点 | 切换至“低点”:追踪低点 = 本根K线的低点,参考高点 = 本根K线的高点 |
| 5 | 寻找低 点 | 内包线——未创出新低,参考高点保持不变 | 无 | 无 |
| 6 | 寻找低 点 | 创出新低,参考高点保持不变 | 追踪低点 = 本根K线的低点 | 参考高点 = 本根K线的高点 |
| 7 | 寻找低 点 | 突破——未创出新低,但交易价格位于参考高点之上 | 确认追踪低点为波段低点 | 转为“高点”:追踪高点 = 本根K线的高点,参考低点 = 本根K线的低点 |
| 8 | 寻找低 点 | 外包K线——创出新低并 突破参考高点 | 确认该K线自身的低点 为波段低点 | 切换至“高”模式:追踪高点 = 本根K线的高点,参考低点 = 本根K线的低点 |
第1–4行和第5–8行完全对称,因此整个交易引擎仅需几十行代码。
罕见情况:单根K线同时突破两个方向
第4行和第8行需要单独说明。通常,一根K线要么延续趋势,要么突破参考位。而外包K线 可以同时做到这两点——它在同一根K线内既 创出新高,又 跌破参考低点。
此时两条规则都会将其纳入判定范围,从而产生矛盾。若将其视为趋势延伸,就会忽略一次真正的突破;若将其视为突破,又会确认一个已被该K线本身超越的高点。
解决方法是让该K线本身成为波段高点:
- 其自身的高点 被确认为波段高点——而非它刚刚突破的、此前追踪的高点。
- 随后,同一根K线 开启了反向走势:此前追踪的低点成为其低点,而参考低点则成为其高点。
因此,一根K线同时承载了摆动高点和低点走势的起点。在图表上,这表现为同一根K线上下各有一个 标记,两者之间有一条垂直线——这正是该K线内部发生的情况。
This is also why the legs are drawn as trend-line objects rather than a DRAW_SECTION buffer. A section plot stores one value per bar and could not hold two points on the same candle.
它不会重新绘制
被追踪的极端值仅 为临时标记,绝不会被绘制出来。一个波段仅在确认它的K线中写入图表,一旦写入就绝不会被移动、重新着色或移除。仅对已收盘的K线进行评估;正在形成的K线则完全被忽略。
其相应的取舍是客观的,且值得说明:确认滞后。最新的波段仅在验证其有效性的突破发生后才会显示。若您希望在新高形成瞬间立即显示标记,那么这并非合适的工具——因为该标记随后将不得不移动,这即为重绘。
输入参数
检测
| 输入 | 默认 | 功能说明 |
|---|---|---|
| 首先查找 | 寻找震荡高点 | 这是第一波段所寻找的方向。该设置仅影响图表上最旧的K线;首次确认后,方向将完全由突破情况决定。除非历史数据中的首次震荡走势看起来有误,否则请保持默认设置。 |
| 突破由以下条件确认 | 影线 | “影线”模式 采用K线的高/低点——这正是“Trading Hub”规则的字面含义,也是更敏感的设置。“收盘价”模式则 要求K线收盘价必须突破 参考位,该模式会忽略单根影线的短暂触及,从而产生明显更少但幅度更大的波动。 |
如何选择:建议 从“K线影线” 开始。若您交易的时间周期为M1–M15,或交易的是黄金或指数差价合约等带有长而杂乱影线的标的,请切换至“收盘价”——这能过滤掉大部分由单次价格飙升引发的波动,同时不改变其他任何逻辑。 使用更高时间周期是获取更大结构的另一种方法;该规则本身没有灵敏度或周期设置可供调整。
显示
| 输入 | 默认 | 功能说明 |
|---|---|---|
| 绘制波段标记 | true | 用于开启或关闭箭头显示。无论何种情况,缓冲区都会保持填充状态,因此iCustom 仍会返回每次摆动。 |
| 箭头代码 — 高点/低点 | 217/218 | Wingdings 代码。常用替代方案:234/233、241/242、159(用于圆点)。 |
| 箭头与柱线的距离 | 10 | K线与箭头之间的间距(以像素为单位)。在密集的图表中应增大该值。 |
| 在波段之间绘制连接线 | true | 连接连续波动点的虚线锯齿线。若已启用锯齿线功能,请将其关闭。 |
| 线段颜色/样式/宽度 | 银色,虚线,1 | 连线的样式。 |
同时 关闭标记和线段后,将仅保留纯粹的计算实例——当EA读取缓冲区且您不希望图表上显示任何内容时,此功能非常有用。
警报
| 输入 | 默认 | 功能说明 |
|---|---|---|
| 在确认的波段走势上弹出提示 | false | 当波段交易被确认时,终端会弹出提示。 |
| 在确认波段时发送推送通知 | false | 推送至“工具 → 选项 → 通知”中设置的MetaQuotes ID。 |
警报仅在实时更新时触发,绝不会在指标加载历史数据时触发,且每个波动仅触发一次。
在EA中使用
两个缓冲区,仅在确认的波段中才均为非空(空值即0.0):
| 缓冲区 | 内容 |
|---|---|
| 0 | 已确认波段高点 的价格 |
| 1 | 已确认摆动低点 的价格 |
int h = iCustom(_Symbol, _Period, "SMC_Pullback"); double buf[]; CopyBuffer(h, 0, 0, 100, buf); // 震荡高点
该检测引擎位于一个独立的类CPullbackDetector 中,不依赖任何图表或缓冲区——它接收价格数组并报告已确认的波段,因此如果您不想通过iCustom 进行操作,可以直接将其复制到 EA 中。
它刻意不做的事情
该指标仅在波动点处停止。它不会标注HH/HL/LH/LL,也不会推导BOS、CHoCH、IDM、订单区块或流动性水平。这些都是需要先有一组可靠波动点才能进行的独立步骤——而这正是该指标所提供的。
该项目在 MQL5 Algo Forge 上提供支持。您 可通过以下链接查看代码及后续更新。
代码库地址如下:https://forge.mql5.io/SandroBegashvil/SMC-Pullback-CodeBase
由MetaQuotes Ltd译自英文
原代码: https://www.mql5.com/en/code/76451
SuperTrend Indicator
一个基于第一性原理构建的自定义 SuperTrend 指标,它将基于 ATR 的波动带与棘轮机制相结合,从而生成一条清晰、不重绘的趋势线。 内部递归状态通过正确注册的计算缓冲区进行管理,从而避免了手动管理数组实现中常见的状态丢失错误。本文摘自《初学者自制自定义指标》系列文章。
Fisher Transform Indicator
一种基于统计第一性原理构建的费舍尔变换振荡指标——将价格归一化到一个有界范围内,然后进行对数变换,从而产生清晰、明确的反转信号,而非传统振荡指标中常见的渐进式转折。 通过适当的计算缓冲区处理内部递归状态,以确保在回测中表现可靠且准确。摘自文章系列《初学者自制指标指南》。
PropFirm Equity Protector - 机构风险管理器(开源)
一款专为自营交易公司风险管理设计的专业实用EA。其功能包括每日权益监控、对亏损头寸的分阶段风险缓释,以及通过自修复式图形化仪表盘实施的绝对强制止损。
离散
离散技术指标由价格和交易量的变化决定。




