构建K线趋势约束模型(第5部分):通知系统(第一部分)(基础篇)
📘

构建K线趋势约束模型(第5部分):通知系统(第一部分)(基础篇)

第 1/3 篇

给趋势约束模型接上通知通道

在 MT5 里做价格行为策略,信号只在图表上闪一下远远不够。趋势约束模型 V1.04 这版先把通知拆成三条独立通道:终端弹窗、手机推送、邮件,三者互不依赖,断一条还有两条能响。 终端通知走 Alert() 和 Comment(),推送依赖 MQL5 的 SendNotification() 且需在 MT5 选项里绑定 MetaQuotes ID,邮件则靠 SendMail() 并配置 SMTP。实测在 16 December 2024 发布的这篇工程笔记里,该模型基础版文末显示 1 303 次查看,说明多通道告警是实盘刚需而非玩具功能。 调试时建议先用终端通知自验,再开推送,最后接邮件;外汇与贵金属杠杆高、滑点随机,通知延迟几秒就可能错过入场,高风险环境下通道冗余才有意义。

◍ MT5 三类通知与社交化转发的起点

MT5 原生给出三种事件告知通道:终端弹窗、邮件、以及推送通知(Push)。把这几种出口再接到 Telegram、WhatsApp 这类社交 App,信号就能脱离电脑屏幕、在手机上实时流转,对盯盘时间碎片的贵金属/外汇交易者算硬需求。 终端通知走本地客户端,邮件依赖 SMTP 配置,推送走 MetaQuotes 服务器下发到手机 MT5。三种方式延迟和可达性差异明显,外汇与贵金属波动快、滑点风险高,通道选错可能错过关键平仓信号。 本篇只铺配置骨架:开启哪几项、填什么字段、如何拿到推送 token。更深的对拍 Telegram bot、自动转发逻辑放到系列第二篇,这里先让你把 MT5 里的通知开关摸熟。

「用终端警报盯住 Step Index 关键位」

MT5 的终端通知本质是平台内置警报,覆盖所有被手动设定的触发事件,入口在底部「工具」页的警报选项卡。它不依赖外部推送,触发逻辑完全在客户端跑,适合做本地轻量盯盘。 建警报时几个字段直接决定命中率:品种选你要盯的标的;条件用 Bid>、Ask< 或 Time= 这类比较式;值填具体价位或时间;来源选「声音」才能让终端自己响;动作挂一个 wav 文件;超时是重复检查的间隔秒数;最大迭代次数卡死响几遍,避免刷屏。 拿 Step Index 合成品举例,把品种设成 Step Index、条件 Bid>、值 9666、来源声音、动作绑 alert2.wav、超时 60 秒、最大迭代 5 次,点 OK 就能挂上。9666 这个位是示例阈值,实盘按你自己的结构位改。右键警报选项卡选「新建」即可调出设置框,流程不复杂,开 MT5 马上能复现。

用 MetaQuotes ID 把 MT5 警报推到手机

MT5 的推送通知能把平台内任何来源(内置事件、指标、EA)的消息,经 MetaQuotes ID 发到手机端 MT5。安卓走 Play Store、iOS 走 Apple Store 装好移动端后,设备会立刻生成一个唯一 MetaQuotes ID,桌面端勾选启用推送并填进对应字段,手机消息区就能实时收到。 桌面端支持同时填多个 ID,彼此用分隔符隔开,等于一套警报可并行推到好几台手机。实测中多设备 ID 以英文逗号分隔录入即可生效,不用重启终端。 想验证:开桌面 MT5 → 工具-选项-通知,勾选「启用推送通知」,把手机端设置里显示的 MetaQuotes ID 抄进去,从 EA 里发一条 SendNotification("test"),手机若在信号下几秒内弹消息,链路就通了。外汇与贵金属波动剧烈,仅把推送当辅助预警,别凭单一通知下单。

◍ 用 MT5 邮件推送盯盘警报

MT5 内置的邮件通知能把价格异动、订单成交和自定义事件直接推到你的收件箱,延迟通常按秒计,比轮询图表更省精力。对做外汇、贵金属的人而言,这类推送只是辅助提醒,盘面高风险仍在,任何信号都只是概率倾向,不能替代仓位风控。 开启路径很直接:工具 > 选项 > 电子邮件,勾选启用后填 SMTP 信息。以 Gmail 为例,SMTP 服务器填 smtp.gmail.com,登录和「从」都用 your-email@gmail.com,密码用应用专用密码,「到」可填自己或另一邮箱。SMTP 本质是发信协议服务器,配合 MTA 把客户端邮件中转出去;常见可用服务商有 gmail、yahoo mail、hotmail、zohomail、icloud mail。 一个小坑:很多邮箱默认密码在 MT5 会被拒,必须去账号后台开两步验证再生成应用密码,否则测试邮件发不出去。验证时直接点界面里的「测试」,收不到就先查垃圾箱和 SMTP 端口(SSL 多为 465)。

「把分钟图上的噪声警报掐掉」

把 Draw_Line 样式接进趋势系统后,新麻烦来了:图表切到 M1 周期时,每根 K 线闭合都会推一条警报,等于每分钟被叫一次。这种频率对实盘毫无价值,只会让人忽略真正重要的少数信号。 处理思路很直接——第 5、第 6 缓冲区本来只画买卖趋势线,不需要逐根触发 myAlert()。把这两处的报警调用注释掉,趋势线照常画,但只在箭头信号(Buffer1~4)产生时才响。下面这段是 V1.04 里改完的核心片段。 缓冲区 5 判定 MA5 在 MA6 上方时,于 Low[i] 下方 15 个 myPoint 处写线,原 myAlert 调用已禁用;缓冲区 6 反之在 High[i] 上方 15 点写线,报警同样关掉。指标属性里 indicator_buffers 仍是 6,plot5/6 为 DRAW_LINE 实线,颜色分别 0xFFAA00 与 0x0000FF,不影响视觉。 外汇与贵金属波动剧烈、杠杆风险高,改完后在 MT5 用 M1 跑一晚,确认终端警报栏不再每分钟刷屏,再切回你常用的 H1 验证信号箭头未被误伤。

MQL5 / C++
class=class="str">"cmt">// --- Buffer5(Buy Trend)
      if(MA5[i] > MA6[i])
        {
         Buffer5[i] = Low[i] - class="num">15 * myPoint;
         class=class="str">"cmt">// Disabled myAlert from Buffer class="num">5
         class=class="str">"cmt">// myAlert("indicator", "BUY TREND | MA Fast: " + DoubleToString(MA5[i], class="num">2) + " | MA Slow: " + DoubleToString(MA6[i], class="num">2));
        }
class=class="str">"cmt">// --- Buffer6(Sell Trend)
      if(MA5[i] < MA6[i])
        {
         Buffer6[i] = High[i] + class="num">15 * myPoint;
         class=class="str">"cmt">// Disabled myAlert from Buffer class="num">6
         class=class="str">"cmt">// myAlert("indicator", "SELL TREND | MA Fast: " + DoubleToString(MA5[i], class="num">2) + " | MA Slow: " + DoubleToString(MA6[i], class="num">2));
        }
class=class="str">"cmt">///Indicator Name: Trend Constraint
class="macro">#class="kw">property copyright "Clemence Benjamin"
class="macro">#class="kw">property link      "[MQL5官方文档]
class="macro">#class="kw">property version   "class="num">1.04"
class="macro">#class="kw">property description "A model that seek to produce sell signal when D1 candle is Bearish only and  buy signal when it is Bullish"
class=class="str">"cmt">//--- indicator settings
class="macro">#class="kw">property indicator_chart_window
class="macro">#class="kw">property indicator_buffers class="num">6
class="macro">#class="kw">property indicator_plots   class="num">6
class="macro">#class="kw">property indicator_type1   DRAW_ARROW
class="macro">#class="kw">property indicator_width1  class="num">5
class="macro">#class="kw">property indicator_color1  0xFF3C00
class="macro">#class="kw">property indicator_label1  "Buy"
class="macro">#class="kw">property indicator_type2   DRAW_ARROW
class="macro">#class="kw">property indicator_width2  class="num">5
class="macro">#class="kw">property indicator_color2  0x0000FF
class="macro">#class="kw">property indicator_label2  "Sell"
class="macro">#class="kw">property indicator_type3   DRAW_ARROW
class="macro">#class="kw">property indicator_width3  class="num">2
class="macro">#class="kw">property indicator_color3  0xE8351A
class="macro">#class="kw">property indicator_label3  "Buy Reversal"
class="macro">#class="kw">property indicator_type4   DRAW_ARROW
class="macro">#class="kw">property indicator_width4  class="num">2
class="macro">#class="kw">property indicator_color4  0x1A1AE8
class="macro">#class="kw">property indicator_label4  "Sell Reversal"
class="macro">#class="kw">property indicator_type5   DRAW_LINE
class="macro">#class="kw">property indicator_style5  STYLE_SOLID
class="macro">#class="kw">property indicator_width5  class="num">2
class="macro">#class="kw">property indicator_color5  0xFFAA00
class="macro">#class="kw">property indicator_label5  "Buy Trend"
class="macro">#class="kw">property indicator_type6   DRAW_LINE
class="macro">#class="kw">property indicator_style6  STYLE_SOLID
class="macro">#class="kw">property indicator_width6  class="num">2
class="macro">#class="kw">property indicator_color6  0x0000FF
class="macro">#class="kw">property indicator_label6  "Sell Trend"
class="macro">#define PLOT_MAXIMUM_BARS_BACK class="num">5000

常见问题

在通知触发前加一个过滤条件,例如要求 Step Index 穿越幅度超过近 N 根 K 线平均波幅的 1.5 倍才发警报,可显著减少无效提醒。
在终端设置里绑定 MetaQuotes ID,把 Step Index 触达关键位的终端警报勾选推送,手机端就能实时收到。
可以,小布能按你设定的 Step Index 关键位自动盯盘,触发时直接推送消息,不必自己配通道。
邮件延迟通常高于终端弹窗和手机推送,仅建议作备份;快速行情优先用终端警报加手机推送双通道。
先跑通终端警报、MetaQuotes ID 手机推、邮件三类本地通知,确认无漏报后再接外部转发,避免误发噪声。