由于购买经理指数调查在官方GDP或CPI打印中显示之前捕捉到商业活动的实时变化,因此两国之间的扩大PMI差距是几个始终先于汇率趋势变化的信号之一,而不是确认它们.
直觉很简单.当一个经济体的工厂楼层和服务台在同行收缩的同时加速时,对更强的货币的潜在需求会上升:产出更多,出口更多,招聘更多,以及其央行倾向于的可能性更大.等待官方GDP确认的外汇交易者已经错过了入口.实时跟踪PMI差异的交易者,特别是PMI复合读数之间的差距,可以在此举中更早定位.
核心论点
当一个经济体的综合PMI与同行PMI明显不同时,特别是当一个经济比率超过50 (扩张),而另一个经济增长下降时,相应的汇率往往在接下来的4~12周内有利于强经济体.这种领先差距关系使PMI差异成为结构性预警信号,而不是巧合指标.
什么是PMI措施,为什么它引领
采购经理指数是根据对高级采购和供应链高管的调查每月编制的传播指数. 50以上的读数表明扩张;50以下表明收缩.指数捕捉到新订单,产出,就业,供应商交付时间和库存. 未来的组件 (特别是新订购) 提供了30至90天前的经济活动的真正前.
对于外汇分析有三个变体:
- 制造业PMI 贸易敏感,对全球需求冲击,关税周期和库存重建/卸货阶段反应强.最适用于澳元,加元,新元和重出口经济体.
- 服务业的PMI 反映了国内需求强度,工资通胀的转移和消费者信心.
- 复合PMI 制造业和服务业的GDP加权组合.提供最广泛的经济活动信号,并且与1~3个月的外汇趋势方向相关.
总体PMI数据的时间优势显著:复合PMI每月的前一个工作日发布,而GDP通常在季度结束后3~6周到来,随后进行修订. 一个在1月份观察欧元/美元货币对的交易者可以在发布任何季度GDP数据之前看到12月份的美国和欧元区复合PI数据.
在FXMacroData中PMI覆盖
FXMacroData PMI终点返回每个主要货币的综合PMI时间序列,包括适用时的制造业加权变体. /api/v1/announcements/{currency}/pmi 通过 美国美元和中国人民币 提供NMI (非制造业指数). nmi 指示弹.
建立PMI差异信号
信号由两个国家的综合PMI读数之间的差距构建.一个正差距,当国家A的PMI超过B的PAMI时,有利于货币A相对于货币B.信号强度增加:
- 差距的绝对大小 (较大的分歧=更强的偏差)
- 变化的方向 (扩散扩大 =加速偏差)
- 持续时间 (持续多个月的差异=趋势模式,不是一次性)
- 跨界50级 (一边在扩张值之上,另一边收缩)
下面的例子采集了美国和欧元区的综合PMI数据,并计算了与EUR/USD相关的差异差距.
import requests
import pandas as pd
BASE = "https://fxmacrodata.com/api/v1"
KEY = "YOUR_API_KEY"
def get_pmi(currency: str, start: str = "2020-01-01") -> pd.Series:
r = requests.get(
f"{BASE}/announcements/{currency}/pmi",
params={"api_key": KEY, "start_date": start}
)
r.raise_for_status()
df = pd.DataFrame(r.json()["data"])
df["date"] = pd.to_datetime(df["date"])
df = df.set_index("date").sort_index()
return df["val"].rename(currency.upper())
usd_pmi = get_pmi("usd")
eur_pmi = get_pmi("eur")
# EUR minus USD composite PMI spread (positive = EUR favoured)
spread = (eur_pmi - usd_pmi).dropna()
spread.name = "EUR_minus_USD_PMI"
print(spread.tail(6).to_string())
print(f"\nCurrent spread: {spread.iloc[-1]:.1f} pts")
欧元与美元复合PMI 2020年至2026年
这两系列PMI均与中性50级相对应.EUR PMI领先美元PMI的时期与EUR/USD势紧密相符.
欧元/美元:PMI差异的基准对
欧元/美元是世界上交易量最多的货币对,也是对宏观基本面分析的研究量最广泛的货物对.也是PMI分歧历史上显示最清楚的领先时间关系的货幣对,部分原因是美国ISM/PMI和欧元区标准普尔全球PMI发布都受到密切关注,分布广泛,并且具有长期的历史,允许后台测试.
欧元/美元的关系不是机械的欧元美元对比也受到风险欲望,能源价格,欧洲央行/美联储利率预期和定位的影响.但PMI分歧始终提供了一个结构偏差,覆盖所有这些短期驱动因素.在2024年上半年等时期,当美国数据表现优于欧元区,欧元地区在能源成本冲击后扎时,美国的持续PMI优势与持续的美元出价相关,这使得多个欧元正面的欧洲央行的通信事件被掩盖.
欧元/美元PMI差异与欧元美元现货 2020年至2026年
按EUR/USD汇率图绘制的PMI差 (EUR减美元). 注意PMI的差距在现货汇率发生之前往往会改变方向. 对于EUR/ USD,二级轴是逆转的,以视觉地将PMI分歧与预期的汇率方向相一致.
扩展信号到主要对
在所有主要的PMI系列货币对中,同样的分歧框架适用.不同的货币组显示出不同的敏感度,具体取决于底层经济的贸易导向,商品链接或服务主导程度.
按对计算PMI差异信号强度 与随后8周外汇收益相关性
PMI 差异与随后8周的外汇行情方向之间的说明性相关系数.欧元/美元和英/美元显示最强的信号;澳元/USD更受商品周期的影响.
对于PMI差异最可靠的货币对有着某些共同特征:两国经济都密切关注高质量的PMI系列;两国之间存在重要的双边贸易;两种货币都不是主要的商品货币,资源价格可以抵制宏观活动信号.欧元/美元,英/美元.美元/日元,欧元 / 英一直属于这个类别.澳元/USD和新西兰元/美金显示较弱的PMI信号,因为商品价格 (特别是铁矿石,铜矿石和乳制品) 经常抵制这些货币的制造业活动信号
获取多货币PMI数据
建立一个多对PMI信号仪表板需要从多种货币中获取PMI数据并将其与一个共同的月度时间表相匹配. PMI终点 提供所有主要货币的一致月度时间序列.
import requests
import pandas as pd
BASE = "https://fxmacrodata.com/api/v1"
KEY = "YOUR_API_KEY"
currencies = ["usd", "eur", "gbp", "jpy", "aud", "cad"]
def get_pmi(currency: str, start: str = "2022-01-01") -> pd.Series:
r = requests.get(
f"{BASE}/announcements/{currency}/pmi",
params={"api_key": KEY, "start_date": start}
)
r.raise_for_status()
df = pd.DataFrame(r.json()["data"])
df["date"] = pd.to_datetime(df["date"])
df = df.set_index("date").sort_index()
return df["val"].rename(currency.upper())
pmi = pd.concat([get_pmi(c) for c in currencies], axis=1)
# Compute all cross-spreads relevant to major pairs
divergence = {
"EUR_vs_USD": pmi["EUR"] - pmi["USD"],
"GBP_vs_USD": pmi["GBP"] - pmi["USD"],
"USD_vs_JPY": pmi["USD"] - pmi["JPY"],
"USD_vs_AUD": pmi["USD"] - pmi["AUD"],
"USD_vs_CAD": pmi["USD"] - pmi["CAD"],
"EUR_vs_GBP": pmi["EUR"] - pmi["GBP"],
}
div_df = pd.DataFrame(divergence)
print(div_df.tail(3).to_string())
print("\nCurrent divergence snapshot:")
for pair, val in div_df.iloc[-1].items():
direction = "favours first currency" if val > 0 else "favours second currency"
print(f" {pair:15s}: {val:+.1f} pts ({direction})")
利制度的分类
单一的PMI差值是有信息性的,但最易交易的信号来自制度分类:识别分歧跨越有意义的门并保持在那里几个月.三种制度状态在实践中最有用:
强大的A
幅> +3点,扩大或持有. A在扩张 (> 50),B接近收缩. 强烈的结构偏向货币A.
没有
差距在±3点,或两种经济体在类似的地区.
强大的B
幅<-3点,扩大或保持. B在扩张,A接近收缩. 强烈的结构偏向B货币.
def classify_pmi_regime(spread: pd.Series, threshold: float = 3.0) -> pd.Series:
"""
Returns regime labels: 'strong_A', 'neutral', or 'strong_B'.
threshold: minimum spread magnitude to declare a directional regime.
"""
regimes = []
for val in spread:
if val > threshold:
regimes.append("strong_A")
elif val < -threshold:
regimes.append("strong_B")
else:
regimes.append("neutral")
return pd.Series(regimes, index=spread.index, name="regime")
# Apply to EUR-USD divergence
eur_usd_spread = pmi["EUR"] - pmi["USD"]
regime = classify_pmi_regime(eur_usd_spread, threshold=2.5)
# Summarise regime tenure
for r in ["strong_A", "neutral", "strong_B"]:
count = (regime == r).sum()
pct = 100 * count / len(regime)
print(f" {r:12s}: {count:3d} months ({pct:.0f}% of history)")
结合PMI差异与利率差异
当PMI与两国政策利率差异一致或导致PMI变化时,PMI差异最强大.当PMI的差异扩大到有利于A货币,同时利率区别也有利于 A时,结构性外汇偏差会加强,并倾向于持续更长时间.当 PMI差异和利率分差不一致时,最终有一个信号会获胜;PMI倾向於引领利率路径,因为央行对活动数据作出反应.
# Fetch policy rates for EUR and USD
def get_indicator(currency: str, indicator: str, start: str = "2022-01-01") -> pd.Series:
r = requests.get(
f"{BASE}/announcements/{currency}/{indicator}",
params={"api_key": KEY, "start_date": start}
)
r.raise_for_status()
df = pd.DataFrame(r.json()["data"])
df["date"] = pd.to_datetime(df["date"])
df = df.set_index("date").sort_index()
return df["val"].rename(f"{currency.upper()}_{indicator}")
eur_rate = get_indicator("eur", "policy_rate")
usd_rate = get_indicator("usd", "policy_rate")
# Resample to monthly end-of-period, forward-fill
monthly_idx = pd.date_range(start="2022-01-01", end=pd.Timestamp.today(), freq="ME")
eur_rate_m = eur_rate.reindex(monthly_idx, method="ffill")
usd_rate_m = usd_rate.reindex(monthly_idx, method="ffill")
rate_spread = (eur_rate_m - usd_rate_m).rename("EUR_minus_USD_rate")
# Composite signal: PMI divergence weighted with rate differential
pmi_weight = 0.6
rate_weight = 0.4
composite = (
pmi_weight * eur_usd_spread.reindex(monthly_idx, method="ffill") +
rate_weight * rate_spread
).rename("composite_eur_bias")
print("Composite EUR/USD bias signal (last 6 months):")
print(composite.tail(6).to_string())
综合PMI+利率信号与欧元/美元 2022年至2026年
复合信号结合PMI分差 (60%) 和政策利率差 (40%). 当PMI和利率分差都朝同一个方向走时,随后12周的外汇回报率是最强的.
预期时间:PMI差异何时会产生收益?
对于交易者来说,关键问题是:PMI分歧出现后,外汇对往往在几周或几个月后确认这一动作?从实验上看,PMI 分歧与随后的外汇方向之间最强的相关性是EUR/USD和GBP/USD的48周滞后.美元/日元往往有稍长的滞后 (812周),因为日本央行的干预行为即使PMI 差异明显,也可能会延迟或中断外汇趋势.
对于澳元和加元,PMI-领先关系在任何固定滞后时不太可靠,因为商品价格可以完全取代信号.一种实用方法是将商品货币PMI分歧视为必要但不够的条件:它设定了结构方向,但在产生贸易偏见之前需要商品价值确认.
实用的时间框架
- 欧元/美元,英/美元: 按PMI差异,汇率方向将提升48周.使用具有±2.5pt值的复合PMI波动作为主要偏差过器.
- 美元/日元: 波动指数指数的差异导致外汇走向812周.
- 澳元/美元,新西兰元/USD: 仅作为支持偏见,PMI差异只能发挥作用.在定位之前需要商品价格确认 (澳元对铁矿石,新西兰对乳制品).
- 美元/加元: 由于加拿大出口结构,制造业PMI (不是复合型) 更为重要. 石油价格趋势必须与PMI偏见一致,以获得可靠的信号.
组合起来:一个实时的PMI信号仪表板
下面的函数构建了一个简单但完整的 PMI 差异信号仪表板,在所有主要对中显示当前的模式,波幅水平和其3个月的趋势方向.这是一个实用的早晨工作流程模板,运行时间不到60秒.
def pmi_signal_dashboard(start: str = "2023-01-01") -> pd.DataFrame:
"""
Build a cross-pair PMI divergence signal table.
Returns a DataFrame with current regime and trend for each pair.
"""
currencies = ["usd", "eur", "gbp", "jpy", "aud", "cad"]
pmi = pd.concat([get_pmi(c, start=start) for c in currencies], axis=1)
pair_definitions = [
("EUR/USD", "EUR", "USD", 2.5),
("GBP/USD", "GBP", "USD", 2.5),
("USD/JPY", "USD", "JPY", 4.0),
("AUD/USD", "AUD", "USD", 3.0),
("USD/CAD", "USD", "CAD", 3.0),
("EUR/GBP", "EUR", "GBP", 2.0),
]
rows = []
for pair, base_ccy, quote_ccy, thresh in pair_definitions:
spread = pmi[base_ccy] - pmi[quote_ccy]
spread = spread.dropna()
if spread.empty:
continue
current = spread.iloc[-1]
prior_3m = spread.iloc[-4] if len(spread) >= 4 else float("nan")
trend = "widening" if current > prior_3m else "narrowing" if current < prior_3m else "flat"
if current > thresh:
regime = f"FAVOURS {base_ccy}"
elif current < -thresh:
regime = f"FAVOURS {quote_ccy}"
else:
regime = "NEUTRAL"
rows.append({
"Pair" : pair,
"Spread" : round(current, 1),
"Trend" : trend,
"Regime" : regime,
})
return pd.DataFrame(rows).set_index("Pair")
dashboard = pmi_signal_dashboard()
print(dashboard.to_string())
当前快照
雷达图像显示当前PMI分对差异水平 (以±10的尺度进行规范). 值在零以上有利于每个对标签的基币.
主要风险和信号故障
PMI 差异并非不可避免. 几个条件可能导致信号失败或反转:
- 风险排除事件 在全球风险严重时 (例如,流行病,金融感染),所有PMI读数同时崩,使得跨国差异变得不具备信息性.在这些环境中,安全避险流 (美元,日元,瑞郎) 取代了基本信号.
- 调查疲劳或结构变化 偶尔,由于企业对调查的反应结构性变化,PMI调查无法反映报告的经济现实.通过相关的FXMacroData与实数据 (工业生产,零售销售) 交叉参考 工业生产 没有 零售业 终点
- 中央银行覆盖 当中央银行进行大规模货币干预 (日本银行20222024年,瑞士国家银行定期),外汇货币对可能会积极反对PMI信号. 政策利率 作为一个精神健康检查.
- 商品价格冲击 对于澳元,加元和新西兰元,突然的商品价格升或崩甚至可以完全推翻强烈的PMI分歧信号. 商品终点 为了背景.
率差异的最强大的用途是作为一个模式过器而不是一个独立的入口信号.当率区别和利率差距一致并加强相同的货币方向时,合并信号的成功率比单独的两个更高.
整合PMI到宏观外汇框架
宏观外汇分析师的实际工作流程是这样的:每月,当复合PMI打印时,在所有对中运行分歧计算.更新模式分类.检查当前模式是否与您现有的利率差异和COT定位观点一致或不同.如果PMI,利率和定位都一致,那么这是一个高信念的宏观设置.如果他们不一致那么市场告诉你有什么正在转变.
PMI 差异不保证外汇趋势.它确定了趋势可能出现的经济活动背景.它作为结构偏见过器而不是机械贸易触发器,是宏观外汇工具包中最富有信息,最自由可用的和最及时的工具之一.
据外汇行业数据 PMI终点 现在我 欧元区PMI终点 通过一个单纯的JSON调用,让您访问所有主要货币的全月历史. 在Python的几行中构建分歧信号,将其叠加到现有的宏观框架上,