TriZone Semafor
- 指标
-
Ahmed Hamed Hamed Eadwan
CHINESE TRANSLATION — 中文
============================
TITLE:
MQL5 开发者与交易者 | R protocols 创始人
ABOUT:
您好,我是 Ahmed,来自阿拉伯联合酋长国的交易者和 MQL5 开发者,
R protocols 的创始人。
我自 1984 年开始编写代码,自 2006 年开始交易市场。
多年来,我为自己开发交易工具,通过真实市场经验不断完善它们。
现在,我将这些工具与 MQL5 社区分享。 - 版本: 1.0
如果您曾经盯着一个布满ZigZag箭头的图表,想知道哪些才是真正重要的——这个指标正是为解决这个问题而设计的。
TriZone Semafor 同时运行三个独立的ZigZag算法:快速(Period 5)、中速(Period 13)和慢速(Period 34)。当它们在同一根K线上检测到转折点时,只有最重要的信号会被保留。第3级别总是覆盖第2级别,第2级别总是覆盖第1级别。每个方向每根K线一个清晰的箭头——没有叠加,没有重复计数。
为什么用三个级别而不是一个
单一的ZigZag对所有波动一视同仁。同一个指标用相同的箭头标记两根K线的回调和重大趋势反转。TriZone按重要性对每个转折点进行分类,让您一眼就能看清图表的层级结构。
- 第1级别——快速: 小幅回调和次要转折点。结构中的结构。
- 第2级别——中速: 日内波动和有意义的反应。交易日记中引用的转折点。
- 第3级别——慢速: 重大结构性转折。趋势延续真正受到质疑的关键点位。
每个级别都有独特的箭头形状和颜色,无需查看图例即可立即识别层级。
独占信号系统
每根K线都遵循一条规则:如果更高级别在该K线上标记了转折点,所有较低级别的标记都会被移除——不是隐藏,是移除。这发生在指标缓冲区内部,在任何内容显示到图表之前。图表反映的是真实状态,而不是叠加的层次。
防重绘模式
当 AntiRepaint = ON 时,信号只有在经过配置的确认K线数后才会显示。您看到的箭头已经通过了稳定性窗口,不会移动。指标在图表标题栏显示当前模式和确认深度——对您正在查看的内容完全透明。
当 AntiRepaint = OFF 时,信号会在形成中的K线上立即出现。适合视觉参考。不建议用于自动化逻辑。
提醒系统
提醒在计算过程中排队,只有在独占性检查确认信号存活后才会发送。您永远不会收到一个稍后被第3级别覆盖的第1级别信号的弹窗。一个确认的转折点——一个提醒。可按级别独立配置。
包含内容
- 三个ZigZag检测级别,具有完全独立的参数
- 缓冲区级别的独占信号优先级——最高级别在每根K线上胜出
- 仅在确认的转折点上弹出提醒——无虚假信号
- 防重绘模式,每个级别可配置确认K线数
- 任何品种,任何时间周期——MetaTrader 5
- 单文件——零外部依赖,无DLL,无自定义包含文件
推荐的起步设置
在H1或H4上使用默认参数。默认深度 5 / 13 / 34 遵循标准斐波那契数列——适合大多数品种和时间周期的自然选择。
第3级别的转折点是您的结构性参考。第2级别是日内参考点。第1级别显示两者之间的细微结构调整。根据您的风格调整深度(Period)和确认K线数(ConfirmBars)。
兼容性
MetaTrader 5——任何经纪商,任何品种,任何时间周期。无外部库。无DLL导入。单个 .ex5 文件,完全独立运行。
iCustom 参考 — TriZone_Semafor
输出缓冲区
每根K线上只有最高活跃级别为非空。
EMPTY_VALUE = 该K线/级别无转折点。
当 AntiRepaint ON 时,请在 shift ≥ max(ConfirmBars1, ConfirmBars2, ConfirmBars3) 处读取 — 默认值:shift ≥ 4。
| 缓冲区 | 索引 | 信号 | 内容 |
|---|---|---|---|
| BufLow1 | 0 | BUY | 第1级别低转折点价格——快速ZigZag |
| BufHigh1 | 1 | SELL | 第1级别高转折点价格——快速ZigZag |
| BufLow2 | 2 | BUY | 第2级别低转折点价格——中速ZigZag |
| BufHigh2 | 3 | SELL | 第2级别高转折点价格——中速ZigZag |
| BufLow3 | 4 | BUY | 第3级别低转折点价格——慢速ZigZag |
| BufHigh3 | 5 | SELL | 第3级别高转折点价格——慢速ZigZag |
输入参数
# = iCustom() 调用中的位置(从0开始,在 Symbol / Period / FileName 之后)
| # | 名称 | 类型 | 默认值 | 范围 | 描述 |
|---|---|---|---|---|---|
| 第1级别——快速ZigZag | |||||
| 0 | Period1 | int | 5 | 2–500 | 转折点回溯深度(K线数) |
| 1 | Deviation1 | int | 1 | 1–100 | 最小偏差(点数) |
| 2 | Backstep1 | int | 3 | 1–(P-1) | 连续转折点之间的最小K线数 |
| 3 | HighSymbol1 | int | 159 | Wingdings | 高点箭头(159=点, 108=圆, 116=菱形) |
| 4 | LowSymbol1 | int | 159 | Wingdings | 低点箭头 |
| 5 | ConfirmBars1 | int | 2 | 1–50 | 信号确认前的K线数 |
| 第2级别——中速ZigZag | |||||
| 6 | Period2 | int | 13 | 2–500 | 转折点回溯深度 |
| 7 | Deviation2 | int | 8 | 1–100 | 最小偏差(点数) |
| 8 | Backstep2 | int | 5 | 1–(P-1) | 连续转折点之间的最小K线数 |
| 9 | HighSymbol2 | int | 108 | Wingdings | 高点箭头 |
| 10 | LowSymbol2 | int | 108 | Wingdings | 低点箭头 |
| 11 | ConfirmBars2 | int | 3 | 1–50 | 确认K线数 |
| 第3级别——慢速ZigZag | |||||
| 12 | Period3 | int | 34 | 2–500 | 转折点回溯深度 |
| 13 | Deviation3 | int | 21 | 1–100 | 最小偏差(点数) |
| 14 | Backstep3 | int | 12 | 1–(P-1) | 连续转折点之间的最小K线数 |
| 15 | HighSymbol3 | int | 108 | Wingdings | 高点箭头 |
| 16 | LowSymbol3 | int | 108 | Wingdings | 低点箭头 |
| 17 | ConfirmBars3 | int | 4 | 1–50 | 确认K线数 |
| 实例管理 | |||||
| 18 | InstanceID | string | "A" | 任意 | 唯一标签——必须与图表上的任何副本不同 |
| 19 | DebugMode | ENUM_ONOFF | OFF (0) | 0 / 1 | 将诊断信息输出到日志 |
| 20 | HeadlessMode | ENUM_ONOFF | OFF (0) | 0 / 1 | 通过iCustom使用时设为1 (ON)——禁用所有界面和提醒 |
| 防重绘 | |||||
| 21 | AntiRepaint | ENUM_ONOFF | ON (1) | 0 / 1 | ON = 仅显示确认信号——稳定EA逻辑所必需 |
| 22 | SafeArrows | ENUM_ONOFF | OFF (0) | 0 / 1 | ON = 箭头使用完整的回溯安全偏移(更严格) |
| 提醒系统 | |||||
| 23 | AlertMode | ENUM_ALERT_MODE | 1 (弹窗) | 0–3 | 0=无 1=弹窗 2=推送 3=全部——在EA内设为0 |
| 24 | AlertLevel1 | ENUM_ONOFF | OFF (0) | 0 / 1 | 第1级别转折点提醒 |
| 25 | AlertLevel2 | ENUM_ONOFF | ON (1) | 0 / 1 | 第2级别转折点提醒 |
| 26 | AlertLevel3 | ENUM_ONOFF | ON (1) | 0 / 1 | 第3级别转折点提醒 |
共计:27个参数(索引 0–26)
iCustom 代码示例
// iCustom handle — TriZone_Semafor int g_tzsHandle = INVALID_HANDLE; int OnInit() { g_tzsHandle = iCustom( _Symbol, PERIOD_CURRENT, "TriZone_Semafor", 5, 1, 3, 159, 159, 2, // Level 1 13, 8, 5, 108, 108, 3, // Level 2 34, 21, 12, 108, 108, 4, // Level 3 "EA1", false, true, // Instance + Headless true, false, // AntiRepaint + SafeArrows 0, false, false, false // Alerts OFF ); if(g_tzsHandle == INVALID_HANDLE) { PrintFormat("[EA] handle failed: err=%d", GetLastError()); return INIT_FAILED; } return INIT_SUCCEEDED; }
常见错误
| 错误 | 症状 | 修复 |
|---|---|---|
| 与图表副本使用相同的 InstanceID | INIT_PARAMETERS_INCORRECT | 唯一ID: "EA1" 、 "EA2" … |
| EA中 HeadlessMode = false | 指标为每个EA实例绘制图表对象并触发提醒 | 将参数 #20 设为 true |
| AntiRepaint ON 时读取 shift = 0 | 始终返回 EMPTY_VALUE ——K线尚未确认 | 在 shift ≥ 4 处读取 |
| EA中 AlertMode ≠ 0 | Alert() 弹窗阻塞测试器执行 | 将参数 #23 设为 0 |
| iCustom中文件名错误 | INVALID_HANDLE | 使用确切名称: "TriZone_Semafor" |
| OnDeinit中没有 IndicatorRelease | EA重载时内存泄漏 | 调用 IndicatorRelease(g_tzsHandle) |
