如果你交易——或者只是持有任何以美元计价的资产——你已经知道:FOMC 决议、CPI 数据和 NFP 发布能在几秒钟内撼动市场,而你唯一能得到的预警就是你恰好留在某个标签页里的信息。本文将带你构建一个小型 n8n 工作流,它每天早上轮询经济日历,并将高影响力的美元事件直接推送到 Telegram。总构建时间:约 15 分钟。总成本:在免费额度下为 $0。
手动查 ForexFactory 的问题
ForexFactory 的日历是散户交易者的实际标准,但它是为人类设计的,而不是为机器设计的:
- 没有官方 API。 日历是渲染后的 HTML,客户端负责处理时区。有一个非官方的每周 XML 订阅源,但它粗糙、被缓存,且曾无预警地失效。
- 手动检查无法规模化。 你可能虔诚地检查一周,然后因为那天没看而错过唯一重要的 CPI 数据。
- 自己抓取很麻烦。 该网站使用 Cloudflare、依赖会话的时区 Cookie,且标记经常变化,以至于简单的抓取器需要定期维护。
你可以为商业经济日历 API 付费——大多数包含预测/前值数据的层级起步价在 $30–100/月。如果你只想“在有大事安排时 ping 我”,这就太贵了。
Actor
提前声明:本文所用的 actor 由我开发,因此在采纳建议时请自行斟酌。
economic-calendar-pro 是一个 Apify actor,它抓取 ForexFactory 日历并返回干净的 JSON。它处理了烦人的部分(时区、会话 Cookie、标记漂移),并提供货币和影响级别的筛选器,以及可选的 webhook 提醒。每个事件输出格式如下:
{
"title": "CPI m/m",
"country": "USD",
"currency": "USD",
"impact": "High",
"date_utc": "2026-08-12T12:30:00Z",
"forecast": "0.2%",
"previous": "0.3%",
"actual": "",
"week": "this",
"source": "forexfactory"
}
Enter fullscreen mode Exit fullscreen mode
因为它运行在 Apify 上,所以你无需托管任何东西——只需调用一个 HTTP 端点即可同步获取数据集项目。
我们正在构建的内容
Schedule (weekdays 07:00)
→ HTTP Request (run actor, get this week's USD high-impact events)
→ Filter (belt-and-suspenders: impact == high, currency == USD)
→ Telegram (one message per event)
Enter fullscreen mode Exit fullscreen mode
如果没有符合条件的事件,筛选器会丢弃所有内容,不会发送任何消息。平静的日子依然平静。
前置条件
- 一个 n8n 实例(云端或自托管——
docker run -p 5678:5678 n8nio/n8n即可正常工作) - 一个免费的 Apify 账户——在设置 → 集成中获取 API 令牌
- 一个 Telegram 机器人:向 @BotFather 发送消息,输入
/newbot,保存令牌。然后向你的机器人发送一次消息,并从https://api.telegram.org/bot<TOKEN>/getUpdates获取聊天 ID
步骤 1:计划触发器
添加一个 Schedule Trigger 节点,将其切换为 cron 表达式:
0 7 * * 1-5
Enter fullscreen mode Exit fullscreen mode
即每个工作日的 07:00,这比 08:30 ET 的发布(CPI、NFP)和下午的 FOMC 声明早很多。如果尚未设置,请在 n8n 设置中设置实例时区——cron 以实例时间运行。
步骤 2:使用 HTTP Request 节点调用 actor
添加一个 HTTP Request 节点(typeVersion 4.x):
- 方法: POST
- URL:
https://api.apify.com/v2/acts/ichigowa~economic-calendar-pro/run-sync-get-dataset-items
Enter fullscreen mode Exit fullscreen mode
- 请求头:
Authorization: Bearer YOUR_APIFY_TOKEN
Content-Type: application/json
Enter fullscreen mode Exit fullscreen mode
- 正文(JSON):
{
"weeks": ["this"],
"currencies": ["USD"],
"impacts": ["High"]
}
Enter fullscreen mode Exit fullscreen mode
run-sync-get-dataset-items 端点在这里非常有用:它启动 actor,等待其完成,并直接在响应正文中返回数据集项目。无需轮询运行状态,也无需第二次请求来获取结果。将节点的超时时间提高到约 120 秒,因为冷启动的 actor 运行可能需要 30–60 秒。
点击 Execute step。在有 CPI 数据的日子里,你会得到类似这样的结果:
[
{
"title": "CPI m/m",
"currency": "USD",
"impact": "High",
"date_utc": "2026-08-12T12:30:00Z",
"forecast": "0.2%",
"previous": "0.3%"
},
{
"title": "Core CPI m/m",
"currency": "USD",
"impact": "High",
"date_utc": "2026-08-12T12:30:00Z",
"forecast": "0.3%",
"previous": "0.3%"
}
]
Enter fullscreen mode Exit fullscreen mode
n8n 会自动将数组拆分为每个事件一个项目,这正是我们下游所需的。
步骤 3:筛选(纵深防御)
actor 已经在服务端进行了筛选,但我还是喜欢在这里添加一个 Filter 节点——如果以后你将 actor 输入扩大到所有货币并忘记此工作流会推送 Telegram,它可以保护你。两个条件,用 AND 组合:
-
{{ $json.impact }}等于High -
{{ $json.currency }}等于USD
廉价的保险,零成本。
步骤 4:Telegram 消息
添加一个 Telegram 节点,操作选择 Send Message,使用你创建的机器人凭据。设置聊天 ID,启用 Markdown 解析模式,并使用:
🔔 *{{ $json.title }}*
Currency: {{ $json.currency }} | Impact: {{ $json.impact }}
Time (UTC): {{ $json.date_utc }}
Forecast: {{ $json.forecast || 'n/a' }} | Previous: {{ $json.previous || 'n/a' }}
Enter fullscreen mode Exit fullscreen mode
因为筛选器为每个事件输出一个项目,所以你会收到每个事件一条消息。在 FOMC 日,通常会有两条或三条消息(利率决定、声明、新闻发布会);大多数日子是零条或一条。
运行
手动执行整个工作流一次以进行健全性检查,然后将其切换为 Active。Telegram 中的示例输出:
🔔 Consumer Price Index (CPI) m/m
Currency: USD | Impact: High
Time (UTC): 2026-08-12T12:30:00Z
Forecast: 0.2% | Previous: 0.3%
成本
- n8n: 自托管免费;云端起步价约为 €20/月,但此工作流适用于任何层级。
- Apify: 免费计划每月提供 $5 的平台信用额度。此 actor 的每日一次运行只需几分钱的信用额度——工作日早上的计划可以轻松保持在免费额度内。无需信用卡。
- Telegram: 免费。
故障排除
我见过人们在使用此确切设置时遇到的一些故障模式:
-
来自 Apify 的 HTTP 401。 请求头必须是字面上的
Authorization: Bearer apify_api_xxx...——一个常见的错误是粘贴令牌时没有Bearer前缀,或者使用了账户密码而不是 API 令牌。 -
同步端点的 HTTP 408 / 超时。
run-sync-get-dataset-items将等待时间上限设为 300 秒。如果 actor 运行时间超过你的 HTTP 节点超时时间,请先提高节点超时时间;actor 本身很少超过一分钟。 -
预期有事件时返回空数组。
weeks参数获取整个日历周(“this”、“next”、“last”),所以空结果通常意味着你的筛选条件过于严格——例如,在只有中影响力的美元事件的周里使用impacts: ["High"]。影响值首字母大写:High、Medium、Low、Holiday。 -
Telegram 未发送任何内容,也没有错误。 通常是因为机器人之前从未被消息过(机器人无法发起聊天),或者聊天 ID 是一个缺少前导
-的群组 ID。 - 编辑后出现重复提醒。 如果你重新激活工作流,n8n 可能会根据你的设置触发追赶执行;如果收到意外的凌晨 2 点消息,请检查 工作流设置 → 时区/执行。
值得尝试的变体
-
更宽的网: 设置
"currencies": ["USD", "EUR", "GBP"]并删除筛选器的货币条件。 -
同小时预警: 添加第二个每 30 分钟运行一次的计划,并添加一个筛选条件,如
{{ $json.date_utc }}在接下来的一小时内,这样你可以在发布前而不是在早餐时收到提醒。 - 不同的接收端: 将 Telegram 节点替换为 Discord/Slack——actor 的输出不会改变。
- 推而不是拉: actor 原生支持 webhook 提醒,如果你想完全跳过计划并使用 n8n Webhook 触发器。
链接
- Actor: apify.com/ichigowa/economic-calendar-pro
- 此确切工作流的现成模板(通过工作流 → 从文件导入导入):在 apify-datafeeds 仓库中的
fomc-cpi-telegram-alert.json。
如果有问题或损坏的边缘案例,请在评论区留言——此 actor 正在积极维护,问题报告确实有帮助。
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.