每个警报都会向您勾选的所有接收位置发送同一条消息。默认情况下,消息会说明发生了什么、当时的价格以及警报是否继续开启。您还可以附上一条关于交易计划的备注,这样在打开图表前就能看到原定计划。设置警报及其消息既简单、快速又准确:您可以在编辑器中直接输入,也可以通过语音或文字告诉或询问 AI Trading Assistant。
如果您使用自己的软件、Discord 或 Slack,Webhook 还能自动将每次触发的警报发送到这些地方,无需手动复制。本指南将同时介绍这两项功能。
示例:一个 EURUSD 警报,当 5m 图表上的价格上穿 1.09 时触发。
自动消息的内容
当 Message 字段为空时,警报会在触发时自动生成消息。以本例而言,消息内容如下:
EURUSD crossed above 1.09
Price 1.0901.
This alert is now off. It was set to fire once.
第一行用警报编辑器的措辞说明发生了什么。第二行给出触发那一刻的数值。最后一行说明警报是否继续开启。本例使用了 Once only,因此警报现已关闭。如果选择其他触发方式,最后一行会显示 “This alert stays on.”(此警报保持开启)。
其他类型的警报也遵循相同的顺序。以下是几个首行示例及其下方的数值行:
线条警报:“GBPJPY touched 1h Resistance R1” 以及 “Price 210.16, line at 210.20.”
线条突破警报:“GBPJPY broke above 1h Resistance R1” 以及 “The 1h candle closed at 210.32, above the line at 210.20.”
指标警报:“BTCUSD: 1h RSI(14) crossed above 70” 以及 “RSI(14) was 71.4 when the 1h candle closed at 105240.50.”
预测变化警报:“GBPJPY: 1h forecast turned bearish” 以及 “Before: bullish above 209.80. Now: bearish below 209.40.”
包含多个条件的警报会先说明满足了几个条件,然后为每个已满足的条件单独列出一行:
BTCUSD: both conditions met
• Price crossed above 105000: the 1h candle closed at 105240.50
• 1h RSI(14) is above 55 (now 58.2)
This alert stays on.
如果条件更多,第一行会显示如 “all 3 conditions met”(全部 3 个条件均已满足)或 “2 of 3 conditions met”(3 个条件中已满足 2 个)。如果只满足了一个条件(例如使用 or 连接词时),第一行会直接写出该条件,并在下方列出相应数值。
编写自定义消息
打开警报编辑器,切换到 Options 标签页。
点击 Message 行。留空时该行显示为 Auto,点击后下方会展开一个文本输入框。
输入您的消息。输入框最多可容纳 400 个字符。
如需插入实时数值,请展开输入框下方的 Available variables 列表,连同双花括号一起完整复制所需变量。

Automatic message:空白输入框。可在此输入您自己的文字,也可留空。
输入框下方的说明:“Leave it blank and the alert says what happened and at what price. A message of your own is sent first, with that under it.”(留空时,警报会说明发生了什么以及当时的价格。如果输入自定义消息,您的文字会排在最前面,自动文本附在下方。)
Available variables:可添加到消息中的实时数值变量。
您输入的文字会成为第一行,自动生成的文本则跟在下方。以本例而言,以下消息:
{{symbol}} on {{timeframe}}: check the 1h trend before entering.
送达时显示如下:
EURUSD on 5m: check the 1h trend before entering.
EURUSD crossed above 1.09. Price 1.0901.
This alert is now off. It was set to fire once.
价格和条件已经包含在您文字下方的几行中。建议在自定义消息中写下自动文本无法涵盖的内容,例如您的交易计划。
您输入的消息还会作为该警报在警报列表中的名称。如果不输入消息,列表会显示由条件生成的名称。对于价格水平警报,名称很简短,例如 “EURUSD crossing up 1.09”;对于线条警报或多条件警报,名称则按编辑器的表述显示,例如 “GBPJPY: 1h Price touches 1h Resistance R1”。当您修改条件时,该名称也会随之更新。再次打开该警报时,Message 字段仍为空。您此前保存的未填写消息的警报也会以此格式显示名称。
各接收位置的显示方式
每个勾选的位置都会收到相同的消息,并按该位置的格式进行排版:
| 接收位置 | 显示内容 |
|---|---|
| 应用内提示 | 第一行加粗显示,下方列出数值行。 |
| Notify my devices | 第一行作为标题,其余各行显示在下方。 |
| Send to MetaTrader | 第一行作为标题,其余各行显示在下方。MetaTrader 会在消息旁显示其自身的时间。 |
| Telegram | 警报消息、您所在时区的时间,以及指向图表的链接。 |
| Send email | 警报消息,以及您所在时区的日期和时间。 |
| Webhook URL | Discord 和 Slack 会收到带有 UTC 时间的消息。选择 Raw JSON 时,您的软件会收到下表中的各个变量。 |
Telegram 会以 “24 Sep, 11:02 London time” 这样的格式显示时间。如果时区不对,请在 Your profile 页面的 Timezone 设置中选择您的时区。当 ForecastCity 无法识别您的时区时,时间会以 UTC 显示。
点击 Telegram 消息、电子邮件、手机通知或 MetaTrader 弹出窗口中的链接,即可打开对应代码的图表及 Alerts 面板。对于大多数 4CM-AI 警报,该链接会打开图表并显示当次触发的 Alert observation。
使用变量添加实时数值
警报触发时,变量会被替换为对应的实时数值。以下是 Available variables 中的可用变量:
| 变量 | 输出内容 | 示例 |
|---|---|---|
{{symbol}} |
代码 | EURUSD |
{{price}} 和 {{close}} |
警报触发时的价格 | 1.0901 |
{{condition_text}} |
发生的事件(不含代码) | Price crossed above 1.09 |
{{condition}} |
条件的简短代码 | CROSSING_UP 1.09 |
{{timeframe}} |
警报的时间周期 | 5m |
{{time_iso}} |
UTC 日期和时间 | 2026-09-24 10:02 UTC |
{{time}} |
以秒数表示的同一时间,供软件读取 | 1790244120 |
{{time_now}} |
消息发送时刻的秒数时间戳 | 1790244121 |
{{exchange}} |
价格数据源 | TwelveData |
{{status}} |
警报是否继续开启 | This alert stays on. |
{{alert_url}} |
指向该代码图表及警报列表的链接 | 网址链接 |
{{name}} |
替换所有变量后的自定义消息,或警报列表中显示的名称 | EURUSD crossing up 1.09 |
对于线条警报,{{condition_text}} 会显示为类似 “Price touched 1h Resistance R1” 的内容。如果有多个条件,它会用单词 and 将已满足的条件连接起来。当设为 Once only 的警报触发后,{{status}} 会显示 “This alert is now off. It was set to fire once.”。对于包含多个条件、线条或指标的警报,{{condition}} 会显示为 TREE,该变量是供软件读取的代码。
对于 4CM-AI 警报,{{forecast_summary}} 会汇总预测的变化情况,{{forecast_symbol}} 会写出预测对应的代码,而 {{forecast_cycle}} 则是一个计数器,每当警报重新开始监控时就会加一。包含 {{forecast_summary}} 的消息下方不会再附加自动文本,因为该摘要已经说明了发生的情况。
大多数 4CM-AI 警报没有单一触发价格,因此 {{price}} 和 {{close}} 会保持为空。{{time_iso}} 使用 UTC 时间,因此可能与您屏幕上的时钟不同。不存在的变量会原样保留:例如拼写错误的 {{prices}} 送达时仍显示为 {{prices}}。
将警报发送到 Webhook
Webhook 会将每次触发的警报发送到一个网址,由您自己的软件、Discord 频道或 Slack 频道接收。您的订阅套餐必须包含 Webhook 功能。
在 Options 标签页的 Notifications 下方,勾选 Webhook URL 复选框。随后会出现地址输入框、Format 选择器以及正文输入框。
粘贴您的接收方所监听的网址。网址必须以
http://或https://开头。将 Format 设为 Raw JSON,并将正文输入框留空。
点击 Create 按钮(如果是编辑现有警报,则点击 Save 按钮)。

您的接收方所监听的网址。请使用标准端口 80 或 443。
Format:如果是发送给您自己的软件,请选择 Raw JSON;如果是发送给对应平台,请选择 Discord 或 Slack。
当正文输入框留空时,接收方会收到一个 JSON 对象,其中包含上表中的所有变量以及 alertId 和 triggerId。这两个字段分别用于标识该警报和当次触发。在编写依赖这些字段的程序之前,建议先查看一次实际收到的请求。
在输入框下方,编辑器会显示我们发送请求所用的服务器地址。如果您的接收方只接受已知地址的请求,请将该地址加入白名单。
Webhook 地址的要求
使用标准端口的公网地址:http 为 80 端口,https 为 443 端口。系统不会向其他端口、localhost 或私有网络地址发送消息。
网址中不得包含用户名或密码。
该地址本身必须在 3 秒内返回响应。重定向到其他地址会被视为发送失败。
编辑器仅检查地址是否以 http:// 或 https:// 开头。其余要求会在实际发送消息时进行验证,因此请使用真实警报测试您的地址。对于价格警报和技术警报,如果接收方出现临时错误,系统最多会再重试两次。对于 4CM-AI 警报,如果出现超时或服务器错误,消息不会重新发送,因为您的接收方可能已经根据该消息执行了操作。
编写自定义 Webhook 正文
正文输入框支持使用与警报消息相同的变量编写模板,最多可容纳 2000 个字符。输入框允许输入更多字符,但超过长度限制的正文在保存时会被拒绝。
当格式设为 Raw JSON 时,如果接收方只需要一个精简对象,可以使用如下正文:
{"symbol":"{{symbol}}","condition":"{{condition_text}}","time":"{{time_iso}}","source":"ForecastCity"}
变量会以纯文本形式填入。如果某个变量的值包含引号或换行符,可能会破坏 JSON 格式。不是有效 JSON 的正文会作为纯文本发送。
如果发送到 Discord 频道,请将 Format 设为 Discord 并填入该频道的 Webhook 地址,然后在正文输入框中写一行简短文字,例如:
{{symbol}}: {{condition_text}}. Open your alerts: {{alert_url}}
如果使用 Slack,请选择 Slack 并以同样方式编写。ForecastCity 会将您的文本包装成对应服务所需的格式。如果正文输入框留空,这两个平台都会收到如上所示的警报消息,并在最后一行附上 UTC 时间。
检查发送结果
等待警报触发后,打开 Alerts 面板的 Log 标签页。
将接收方收到的内容与触发日志中的记录进行核对:发生的事件、代码以及触发时间。
触发日志只表明警报已经触发,并不显示接收方是否成功接收了消息,因此请同时检查接收方自身的日志。如果看到类似 {{prices}} 的花括号,说明变量名拼写有误。如果接收方拒绝了请求正文,请检查 JSON 格式是否正确。
实用提示
警报消息会发送到您勾选的每一个位置,而 Webhook 正文仅发送给 Webhook。
Discord 最多显示 1900 个字符,Slack 最多显示 3000 个字符,超出部分会被截断。