比较此处使用的九个国家代码需要发起九次政策利率请求,每次请求按一个计量单位计费。跨国比较政策利率时,请为每个数值保留对应的利率工具、币种和来源日期。
使用 API 完成操作
所有套餐均提供政策利率实时数据,包括 Free。每次请求返回一个国家的最新观测数据,其来源日期不晚于 UTC 当天。比较使用 USA、CAN、AUS、SWE、NOR、BRA、CZE、MYS 和 DEU。DEU 代表欧洲中央银行(ECB)的存款便利利率。
- 设置你的 API 密钥 在 shell 中使用
export NARWHAL_API_KEY="your_api_key"设置NARWHAL_API_KEY环境变量。使用python -m pip install requests pandas安装 Python 依赖。脚本从环境变量读取密钥,并通过 Authorization 请求头发送。 - 请求各国最新利率 使用一个
requests.Session,循环遍历大写国家代码。为每个代码调用一次/v1/economics/{country}/central-bank/policy-rate。请将响应字段一同保留,使每个利率都保留其币种、利率工具和日期。 - 计算用于比较的单一数值 对于单点响应,读取
rate。对于区间响应,使用十进制运算计算(lower_bound + upper_bound) / 2。该中点由你自行计算:Narwhal API 返回已发布的上下限,从不计算中点。数值为十进制字符串,以年利率百分比表示。 - 构建表格并排序 创建包含
country、currency、instrument、rate和date的 pandas DataFrame。从effective_on或observed_on读取日期;每个响应仅包含其中一个字段。按计算出的利率排序。保留 Decimal 数值可保留所提供字符串的精度。 - 运行完整脚本 将其保存为
compare_rates.py,在公共访问开放后运行python compare_rates.py。脚本按从低到高的顺序打印利率。HTTP 错误会通过raise_for_status()停止脚本,因此数据不可用的国家不会在没有提示的情况下从比较中消失。import os from decimal import Decimal import pandas as pd import requests api_key = os.environ["NARWHAL_API_KEY"] base_url = "https://api.narwhalapi.com" countries = ["USA", "CAN", "AUS", "SWE", "NOR", "BRA", "CZE", "MYS", "DEU"] rows = [] with requests.Session() as session: session.headers.update({"Authorization": f"Bearer {api_key}"}) for country in countries: response = session.get( f"{base_url}/v1/economics/{country}/central-bank/policy-rate", timeout=10, ) response.raise_for_status() observation = response.json() if observation["rate_type"] == "point": rate = Decimal(observation["rate"]) elif observation["rate_type"] == "range": rate = ( Decimal(observation["lower_bound"]) + Decimal(observation["upper_bound"]) ) / Decimal("2") else: raise ValueError(f"Unexpected rate_type for {country}") date = ( observation["effective_on"] if "effective_on" in observation else observation["observed_on"] ) rows.append({ "country": observation["country"], "currency": observation["currency"], "instrument": observation["instrument"], "rate": rate, "date": date, }) comparison = pd.DataFrame( rows, columns=["country", "currency", "instrument", "rate", "date"], ).sort_values("rate") print(comparison.to_string(index=False))
各国利率衡量什么?
这些利率只能作大致比较。隔夜利率目标、回购利率和存款利率描述的是不同的利率工具。它们各自对应的币种也有各自的通胀率。仅凭数值排名,无法判断哪个国家的货币政策更紧。
| 国家代码 | 币种 | 政策利率工具 |
|---|---|---|
| USA | USD | 联邦基金利率目标区间;早期历史采用单点目标 |
| CAN | CAD | 隔夜目标利率 |
| AUS | AUD | 现金利率目标;早期历史包含目标区间 |
| SWE | SEK | 政策利率,在 8 June 2022 之前称为回购利率 |
| NOR | NOK | 活期存款利率 |
| BRA | BRL | Selic 目标利率 |
| CZE | CZK | 两周期回购利率 |
| MYS | MYR | 隔夜政策利率 |
| DEU | EUR | ECB 存款便利利率 |
保存的美国示例中,联邦基金利率目标区间为 3.50 至 3.75 百分比,生效日期为 11 December 2025。计算出的中点为 (3.50 + 3.75) / 2 = 3.625 百分比。该数值是根据示例得出的比较值,并非已发布的单点目标,也不表示当日利率。
如果保留比较结果,请同时保留原始上下限。仅使用中点会使打印表格不再体现目标区间的宽度。对于巴西,请使用 BRA 返回的 Selic 目标利率。
这些观测记录的来源声明如下:
- Source: Board of Governors of the Federal Reserve System
- 来源:加拿大银行。此信息可在加拿大银行网站免费获取:https://www.bankofcanada.ca。Narwhal 对格式进行了标准化处理。
- Source: Reserve Bank of Australia 2026. This information is available free of charge on the RBA website: https://www.rba.gov.au. No endorsement is implied.
- Source: Sveriges Riksbank, with the date of the data.
- Source: Norges Bank
- Source: Banco Central do Brasil (SGS 432), Open Data Commons Open Database License (ODbL).
- Source: the CNB
- Source: Bank Negara Malaysia. Data and information are subject to Terms of Use for BNM Datasets. https://www.bnm.gov.my/terms-of-use-bnm-datasets
- 来源:欧洲中央银行(ECB)。此信息可在 ECB 网站免费获取:https://www.ecb.europa.eu。Narwhal 仅修改了格式。
如何比较实际利率
一种简单的实际利率近似算法,是从名义政策利率中减去通胀率:real rate ≈ policy rate − inflation。相减的两个数值均应使用百分比。对于目标区间,请明确名义利率输入值是自行计算的中点。
对于提供通胀路由的国家,请请求 /v1/economics/{country}/inflation 并读取 year_over_year。这些国家包括 USA、CAN、AUS 和 DEU。404 表示没有数据;请让该国的实际利率结果保持缺失,不要将通胀率替换为零。
请在政策利率日期旁保留通胀时期,因为两项观测记录可能对应不同时间。实际利率计算说明了这一减法。即使经过通胀调整,底层政策利率工具之间的差异仍然存在。
为什么欧元区只有一行?
任何受支持的欧元区成员国代码都会返回相同的 ECB 存款便利利率。仅使用一次 DEU,可避免在比较中重复同一利率工具。对于历史请求,覆盖范围从各成员国采用欧元的日期开始,因此不同成员国代码的可用历史可能不同。
为什么各国的日期不同?
effective_on 是利率生效日期。observed_on 是来源记录该数值的日期。各来源发布观测记录的规律也不同,因此最新响应的日期不一定相同。未来生效的利率不会提前替换当前利率。
进行历史比较时,请为每次请求添加相同的 date=YYYY-MM-DD。每次请求都会返回该日期当天或之前最新的源观测记录。不会为没有源观测记录的日期编造数据,因此请保留每次返回的日期。
发布于。
后续步骤
创建免费密钥,在自己的代码中调用 API。 获取免费 API 密钥
