Single Arrow MTF
- 指标
-
Ahmed Hamed Hamed Eadwan
CHINESE TRANSLATION — 中文
============================
TITLE:
MQL5 开发者与交易者 | R protocols 创始人
ABOUT:
您好,我是 Ahmed,来自阿拉伯联合酋长国的交易者和 MQL5 开发者,
R protocols 的创始人。
我自 1984 年开始编写代码,自 2006 年开始交易市场。
多年来,我为自己开发交易工具,通过真实市场经验不断完善它们。
现在,我将这些工具与 MQL5 社区分享。 - 版本: 1.0
- 激活: 5
一个文件。一个箭头。一个决策。
SingleArrow MTF 是面向 MetaTrader 5 的专业级自包含背离信号指标。它将专用线性时间 ZigZag 引擎、带腿部分离的 Williams %R 背离过滤器、可选枢轴保护层、多时间框架一致性面板与自动支撑/阻力集成于一体——全部编译为单个文件,无需外部指标、库或 DLL。
适用人群
- 主观交易者:希望获得干净、基于规则的背离箭头,而非原始振荡器读数。
- EA 开发者:需要机器可读、重绘透明的信号源(缓冲 + GlobalVariable 通道)。
- 回测与策略研究者:需要已确认、历史稳定的信号流(Confirm 模式)。
一张图看架构
- 结构层:内置 ZigZag 引擎从价格中提取枢轴。
- 分析层:Williams %R 背离过滤器以腿部分离校验每个枢轴对。
- 呈现层:箭头、MTF 面板、S/R 级别、警报与透明计数器。
1)内置 ZigZag 引擎(为何不用平台自带?)
- 线性时间 O(n):整段已加载历史单遍处理;每个新 tick 仅 O(1) 工作量,快速 tick 与深历史下依然轻量。
- 经典三参数,现代内核:Deviation / Depth / Backstep 保持熟悉含义,而内部枢轴管理(有界 Backstep 抑制、安全的枢轴前插)从零实现并针对边界情况加固。
- 无 iCustom、无缺失缓冲:引擎内置,信号管线永不依赖图表或终端目录中的其他指标。编译后的 EX5 在任何环境均可运行,包括 Market 租用。
- 确定性:相同参数在任意图表、品种与终端版本上产生相同枢轴。
2)带腿部分离的 Williams %R 背离
振荡器单纯穿越某个水平在这里并不是信号。指标在相同区间内比较价格腿(枢轴到枢轴的移动)与振荡器腿:
- 看跌背离:价格创出更高的高点,而 Williams %R 腿创出更低的高点 → 在已确认枢轴高点处生成卖出箭头。
- 看涨背离:价格创出更低的低点,而 Williams %R 腿创出更高的低点 → 在已确认枢轴低点处生成买入箭头。
- 腿部分离:腿内部的摆动不参与比较,因此腿中的噪声尖峰无法伪造或掩盖背离——且永不比较两个连续的同方向枢轴(廉价 ZigZag/背离组合的经典假信号来源)。
- 只有同时满足 ZigZag 结构规则与 WPR 背离测试的枢轴才会产生箭头。每个箭头都是完整决策,而非原始提示。
3)信号模式:Confirm 与 Live(请务必阅读)
Confirm(默认,InpConfirmBars > 0)——历史稳定流。指标在打印箭头前等待 N 根K线(InpConfirmBars):候选背离保持待定,直到触发枢轴被后续价格行为确认。一旦提交,箭头即被冻结:永不移动、永不消失、永不改变方向*。将 InpConfirmBars 设为 0 即切换到 Live 模式。
Live——尽可能最早的读数。箭头在形成中的K线内显示。按设计,在K线未完成前它可能移动或消失;内置透明计数器会报告每一次此类事件(第 7 节)。
*不重绘保证矩阵(Confirm 模式):
- Deviation/Depth/Backstep = 手动 → 无条件保证。
- ATR 自适应 Depth/Backstep + 枢轴锁定开启 → 保证。
- ATR 自适应 Depth/Backstep + 枢轴锁定关闭 → 指标将自动开启锁定并通知您,正是为了维持该保证。
该条件性保证在产品元数据中如实声明,并在启动时通过输入校验强制执行。
4)枢轴锁定
已确认枢轴被冻结在内部登记表中;之后的重算、波动率尖峰或参数修改都无法移动它们。正是该机制使自适应模式保证成为可能;凡运行 Live 模式均建议使用。
5)ATR 自适应 ZigZag 参数
波动率随会话与品种变化。自适应模式按当前 ATR 在可配置范围内缩放 Deviation/Depth/Backstep(例如 DepthMax 为自适应 Depth 设上限),无需逐品种手动调参,即可让结构在黄金、加密、指数与外汇上保持有效。
6)多时间框架面板
同一引擎在后台运行于最多 23 个附加时间框架(默认 M5/M15/H1/H4/D1,可通过 InpMTFTimeframes 完全配置,InpMTFLookback 为分析窗口)。图表面板显示每个时间框架的实时/确认信号、背离状态与枢轴状态,让您只在自身周期与大局一致时交易——例如当 H1/H4 显示看涨背离背景时才采纳 M15 看涨箭头。
7)透明工具(面向 EA 开发者)
- SA_RepaintBars(缓冲 5):Live 模式重绘事件的滚动计数器——Confirm 模式下按设计为 0。
- SA_PostCommitBars(缓冲 6):确认后调整的滚动计数器——它对 Confirm 模式本身进行审计。
- 二者是实时单调计数器而非历史序列:只有当前值(最近 2–3 根K线)有意义。请读取第 0 根K线,或镜像的全局变量 SA_REP_ / SA_POST_ + 品种 + 周期;切勿历史扫描。
- SA_PivotState(缓冲 3)额外告知当前K线的枢轴已确认(1)还是仍在形成(0)。
8)自动支撑/阻力
指标将枢轴(来自图表周期,或经 InpSRUseAllTF 来自所有被监控周期)聚类为带触摸计数标签的分级支撑/阻力级别,可以水平线、射线或阴影区域绘制(InpSRMode 0/1/2)。级别提供即时语境:在分级支撑处形成的看涨背离箭头,比"半空中"的箭头包含更多信息。
9)警报
可选警报在新确认信号出现时通过平台 alert/push/mail 钩子触发。警报文本按设计仅英文,与 Market 合规规则保持一致。
10)完整设置参考(分组)
- 信号引擎:InpConfirmBars(0 = Live,N = Confirm)、InpLiveMargin、InpLockPivots + InpLockAfterBars、InpShowDiag。
- ZigZag:InpDepth / InpBackstep / InpDeviation;经 InpDevMode / InpDepthMode / InpBackstepMode 逐参数选择手动或 ATR 自适应,另有 InpATRPeriod、InpATRMult、InpDepthATRMult、InpDepthMin/InpDepthMax、InpBackstepATRMult、InpBackstepMin/InpBackstepMax。
- 背离:InpWPRPeriod、InpUseDivergence、InpLookback——对照引擎内部下限校验;非法值在启动时被拒绝并给出清晰英文提示。
- MTF 面板:InpMTFEnabled、InpMTFTimeframes(如 "M5,M15,H1,H4,D1",最多 23 个)、InpMTFLookback、InpDashEnabled、InpDashCorner、InpDashX/Y、InpDashFontSize。
- S/R:InpSREnabled、InpSRLevelsCount、InpSRTolPts、InpSRMinTouches、InpSRSupportClr/InpSRResistClr、InpSRShowLabel、InpSRMode(0=水平线,1=射线,2=区域)、InpSRUseAllTF。
11)安装与首次运行
- 在终端的 Market 标签页安装(租用与终身授权由 MetaTrader 5 管理)。
- 附加到任意图表、任意时间框架。
- 以 Confirm 模式默认值开始,观察面板,然后调整 ZigZag 三参数或开启 ATR 自适应模式。
12)实战手册
- 日内:M15 箭头经 H1 面板一致性过滤;Confirm 模式在回撤至投影 S/R 时入场。
- 波段:H4 枢轴作背景,H1 箭头作触发。
- EA:在第 1 根K线读取信号缓冲获取已提交箭头;在第 0 根K线用透明计数器监控 Live 活动。
13)性能与要求
- MetaTrader 5,任意品种、任意时间框架。无 DLL、无外部文件、无额外指标。
- 线性时间内核 + 增量 tick 处理——为快速 tick 流设计,不冻结图表。
- 干净的反初始化:分离/切换周期时移除图表对象。
14)本产品不是什么
它不下单、不管理资金、不保证盈利。背离是概率性、语境化的读数。Live 模式下的重绘属设计行为,且始终由计数器报告。
15)更新日志
- v1.03:统一 Lookback 校验并与引擎内部下限对齐(消除静默无信号的边界情况);强化枢轴前插;强化 S/R 重建。
- v1.01:首个 Market 公开发布版。
16)常见问题
- 会重绘吗?在满足保证条件(第 3 节)的 Confirm 模式下不会。Live 模式下的变化属设计行为并被透明计数。
- 适用于所有品种吗?是;ATR 自适应正是为跨品种保持结构有效而设计。
- 我的 EA 能用吗?能——信号缓冲、GlobalVariable 通道与重绘计数器使其对 EA 友好。
- 为何一个箭头而非许多提示?每个箭头都通过了结构 + 背离校验;更少但更高质量,系有意设计。
- 需要在图表上放置平台 ZigZag 吗?不需要。引擎已内置。
17)iCustom 与 EA 集成(缓冲、代码、Global Variables)
SingleArrow MTF 发布 7 个缓冲,任何 EA 均可通过 iCustom() + CopyBuffer() 读取——MetaTrader 在首次 iCustom 调用时自动加载指标,无需手动挂图。
// BUFFER MAP (index -> content) // 0 SA_Buy BUY arrow price (0.0 = none) // 1 SA_Sell SELL arrow price (0.0 = none) // 2 SA_Signal +1 buy / -1 sell / 0 none // 3 SA_PivotState 1 = confirmed pivot, 0 = still forming // 4 SA_WPR Williams %R value // 5 SA_RepaintBars live-repaint counter (0 by design in Confirm) // 6 SA_PostCommitBars post-commit counter (audits Confirm mode) int h = iCustom(_Symbol, PERIOD_CURRENT, "SingleArrow_MTF", 34, // InpDepth 8, // InpBackstep 13, // InpDeviation 14, // InpWPRPeriod 5000, // InpLookback false, // InpUseDivergence 1); // InpConfirmBars (0 = Live, 1+ = Confirm) double sig[]; ArraySetAsSeries(sig, true); CopyBuffer(h, 2, 0, 3, sig); // buffer 2 = SA_Signal if(sig[1] == 1) { /* confirmed buy on last closed bar */ } if(sig[1] == -1) { /* confirmed sell on last closed bar */ } // Repaint counters via Global Variables (no CopyBuffer needed): double rep = GlobalVariableGet("SA_REP_" + _Symbol + "_" + IntegerToString((int)PERIOD_CURRENT)); double post = GlobalVariableGet("SA_POST_" + _Symbol + "_" + IntegerToString((int)PERIOD_CURRENT));
// FULL iCustom SIGNATURE (positional order - every declared input) iCustom(symbol, timeframe, "SingleArrow_MTF", 34, // InpDepth int default 34 8, // InpBackstep int default 8 13, // InpDeviation int default 13 14, // InpWPRPeriod int default 14 5000, // InpLookback int default 5000 false, // InpUseDivergence bool default false 1, // InpConfirmBars int default 1 (0 = Live) 12, // InpLiveMargin int default 12 true, // InpShowDiag bool default true 0, // InpDevMode enum 0=Manual 1=ATR-Adaptive 14, // InpATRPeriod int default 14 0.15, // InpATRMult double default 0.15 0, // InpDepthMode enum 0=Manual 1=ATR-Adaptive 1.0, // InpDepthATRMult double default 1.0 15, // InpDepthMin int default 15 80, // InpDepthMax int default 80 0, // InpBackstepMode enum 0=Manual 1=ATR-Adaptive 1.0, // InpBackstepATRMult double default 1.0 3, // InpBackstepMin int default 3 30, // InpBackstepMax int default 30 false, // InpLockPivots bool default false 3, // InpLockAfterBars int default 3 true, // InpMTFEnabled bool default true "M5,M15,H1,H4,D1", // InpMTFTimeframes string 1200, // InpMTFLookback int default 1200 true, // InpSREnabled bool default true 5, // InpSRLevelsCount int default 5 15, // InpSRTolPts int default 15 2, // InpSRMinTouches int default 2 clrDodgerBlue, // InpSRSupportClr clrOrangeRed, // InpSRResistClr true, // InpSRShowLabel bool default true 0, // InpSRMode int 0=HLine 1=Ray 2=Zone false, // InpSRUseAllTF bool default false true, // InpDashEnabled bool default true CORNER_LEFT_UPPER, // InpDashCorner 10, // InpDashX int default 10 30, // InpDashY int default 30 7); // InpDashFontSize int default 7
- 句柄生命周期:在 OnInit 中创建一次句柄,并在 OnDeinit 中 IndicatorRelease();不要逐 tick 调用 iCustom。
- 第 1 根K线的已提交信号流:在最后收盘K线读取 SA_Signal / SA_Buy / SA_Sell,获得稳定且与回测一致的流;SA_PivotState 区分已确认枢轴(1)与形成中的尖端(0)。
- 计数器为实时单调值:缓冲 5/6(及 SA_REP_/SA_POST_ 全局变量)仅在最近 2–3 根K线有意义——读第 0 根K线,切勿扫描历史。
- 纯 EA 性能提示:传入 InpDashEnabled=false 与 InpSREnabled=false,跳过全部图表对象绘制,让 iCustom 句柄保持纯计算。
- 同一品种+周期上运行两个实例会共享同一个 Global Variable 通道;这只影响便捷读取,绝不影响信号计算。
