2026 年 10 月 24 日,美联储 10 月 28 日会议维持利率不变的概率为 91.9%。按计划运行的简短脚本会将赔率与上一次的读数比较,变动达到阈值时输出提醒。对于美联储的政策路径,请把 p_hold(利率不变的概率)与上一次运行保存的值进行比较。
使用 API 完成操作
轮询 GET /v1/predictions/policy-paths/federal-reserve,并把上一次的读数保存在一个 JSON 文件中。脚本读取响应中第一场会议的 p_hold。提醒跟随的是该场会议维持不变的概率,所以选择阈值时请记住这一点。
- 设置你的 API 密钥 获取免费密钥,并保存在环境变量
NARWHAL_API_KEY中。请求以Authorization: Bearer YOUR_KEY的形式发送到https://api.narwhalapi.com。 - 保存轮询脚本 使用阈值为 10 个百分点的 Python 脚本。它比较的是差值的绝对值,因此上升或下降都可能触发输出的提醒。
import json, os, pathlib import requests STATE = pathlib.Path("fed_hold.json") MOVE = 0.10 # alert when the chance of "no change" moves by 10 points or more path = requests.get( "https://api.narwhalapi.com/v1/predictions/policy-paths/federal-reserve", headers={"Authorization": f"Bearer {os.environ['NARWHAL_API_KEY']}"}, timeout=10, ).json() hold = float(path["meetings"][0]["p_hold"]) if STATE.exists(): before = json.loads(STATE.read_text())["hold"] if abs(hold - before) >= MOVE: print( f"ALERT: chance of no change moved from {before:.1%} to {hold:.1%}" ) # email or chat message here STATE.write_text(json.dumps({"hold": hold})) print(f"hold {hold:.1%}") - 在两次运行之间保留状态文件 第一次运行会把读数保存在
fed_hold.json中;之后的运行会先读取这个文件,再比较赔率。每次运行都会把读数写回文件,包括没有输出提醒的那些运行。 - 让脚本按计划运行 让脚本按计划运行,例如每小时或每天一次;每次运行消耗一次调用。代码只负责输出提醒;如果希望提醒通过邮件或聊天消息送达,请使用脚本中标注的位置。
要通过邮件或聊天接收,请把发送消息的代码放在注释标明的阈值条件内部。如果放在条件之外,即使没有任何变动达到阈值,消息也会被发送。
无需代码
在 Zapier、Make 或 n8n 中,先添加一个定时触发器,以及一个指向同一政策路径的 HTTP 请求。保存 p_hold 的读数,使工作流再次运行时有可供比较的值。再添加一个针对新读数与已存读数之差的过滤器,然后为达到所选阈值的变动加上邮件或聊天步骤。
请把比较放在替换已存值的步骤之前。提醒需要两个读数:上一次运行保存的值,以及新请求返回的值。比较之后,无论过滤器是否发出消息,都要保存新的读数供下一次运行使用。n8n 教程和 Zapier 教程是 Narwhal 教程中的无代码方式。
不同情况应选哪种方法
| 情况 | 最合适的方法 | 原因 |
|---|---|---|
| 定期查看赔率 | 按计划运行的脚本 | 赔率是实时的;每次运行消耗一次调用。 |
| 市场关闭或结算时的提醒 | Webhook(网络钩子) | Webhook 会针对预测事件发送 prediction.event.closed 和 prediction.event.settled。 |
| 要跟踪的问题很多 | 遍历 /v1/predictions/events 中的事件 | 把同样的比较应用到你关注的事件上。 |
Webhook 报告的是预测事件的关闭或结算,不会发送赔率变动通知,所以这里介绍的阈值提醒要使用轮询和已保存的读数。关闭或结算提醒回答的,与某个结果的概率是否发生变动是不同的问题。
阈值应该设多少?
请选择与你所关注问题相符的阈值。对于概率很高的结果,10 个百分点的变动已经很大;而波动较小的问题则需要更小的阈值。选择时请以百分点来思考,因为比较的是概率本身的变化。在脚本中,MOVE = 0.10 表示 10 个百分点的阈值。修改时请让这个设置保持为小数。提醒文本会把变动前后的概率格式化为百分比,所以保存的小数与输出的概率形式不同。上升或下降都可能达到阈值。
为什么要与已保存的值比较?
API 返回的是请求时刻的赔率,而上一次的读数保存在你的状态文件中。脚本需要这个已保存的值来计算变动。第一次运行时文件中没有更早的读数,所以它只保存该值,并输出维持不变的概率,不发出变动提醒。
比较对象是上一次运行,即使那次运行没有触发提醒也是如此。小于阈值的变动同样会替换已保存的读数。因此,几次较小的变动不会相对于脚本最初保存的值累积起来。请让定时运行的脚本始终能访问 fed_hold.json,以便读取它保存的基准值。如果文件不存在,脚本会重新走第一次运行的流程,并保存新的基准值。定时运行请使用同一个工作目录,让 fed_hold.json 每次都指向同一个文件。
可以多久运行一次?
只要你的额度允许,就可以随时运行。赔率是实时的,每天检查一次,每月约产生 30 次调用。运行更频繁则调用更多,每个新读数都会与文件中的上一个值比较。
每个账户也可以在 /v1/predictions/stream 打开预测 WebSocket 流;每个连接消耗一次调用。这是接收预测更新的另一种方式;这里的轮询脚本则在保存状态的工作流中自行保留比较逻辑和阈值。
实例:阈值 10 个百分点
数字取自 2026 年 10 月 24 日。第二个读数仅作示例。第一次运行读取到维持不变的概率 91.9%,将其保存并输出 hold 91.9%。例如,假设第二天的读数是 79.0%。用已保存的读数减去它,得到的变动为 12.9 个百分点。
| 步骤 | 数值或结果 |
|---|---|
| 保存第一个读数 | 91.9% |
| 读取第二天的示例值 | 79.0% |
| 计算变动的绝对值 | 从 91.9% 到 79.0% 的变动是 12.9 个百分点 |
| 与阈值比较 | 12.9 个百分点超过 10 个百分点 |
变动超过了阈值,所以脚本会输出提醒,然后把这个示例读数保存为下一次比较使用的值。
ALERT: chance of no change moved from 91.9% to 79.0%发布于。