Divergence des PMI et change: le chef de file de la tendance banner image

Trade Views

Market Analysis

Divergence des PMI et change: le chef de file de la tendance

La divergence entre les PMI des pays est l'un des indicateurs les plus fiables dans le macro-FX. Lorsque l'activité manufacturière et des services d'une économie devance celle d'un autre, le taux de change tend à suivre souvent des semaines avant que le mouvement ne s'enregistre dans les modèles traditionnels de différentiel de taux. Cet article explique la mécanique, montre comment construire le signal à l'aide de l'API FXMacroData et explore quelles paires répondent le mieux aux régimes dirigés par le PMI.

Également disponible en English

La plupart des modèles macro pour les devises se concentrent sur ce que les banques centrales ont déjà fait: les différentiels de taux, les écarts de rendement et la divergence de politique qui est déjà évaluée dans la courbe à terme. La divergence du PMI fonctionne différemment.

L'intuition est simple. Lorsque les usines et les bureaux de service d'une économie s'accélèrent tandis qu'un homologue se contracte, la demande sous-jacente pour la monnaie plus forte augmente: plus de production, plus d'exportations, plus de recrutement et plus de probabilité que sa banque centrale se penche sur le faucon. Les traders de devises qui attendent la confirmation officielle du PIB ont déjà raté l'entrée. Les commerçants qui suivent la divergence du PMI en temps réel en particulier l'écart entre les lectures composites du PMI peuvent se positionner plus tôt dans le mouvement.

Thèse de base

Lorsque le PMI composite d'une économie diffère sensiblement de celui d'un autre , en particulier lorsque l'un dépasse 50 (expansion) tandis que l'autre tombe en dessous , le taux de change correspondant tend à évoluer en faveur de l'économie plus forte au cours des 412 semaines suivantes.

Quelles sont les mesures du PMI et pourquoi il est le leader

L'indice des directeurs des achats est un indice de diffusion compilé mensuellement à partir d'enquêtes auprès de cadres supérieurs des approvisionnements et de la chaîne d'approvisionnement. Les lectures supérieures à 50 indiquent une expansion; inférieures a 50 indique une contraction.

Trois variantes sont pertinentes pour l'analyse des changes:

  • PMI dans le secteur manufacturier sensible au commerce, très réactif aux chocs de la demande mondiale, aux cycles tarifaires et aux phases de reconstruction/déstockage des stocks.
  • PMI dans le secteur des services reflète la force de la demande intérieure, la transmission de l'inflation salariale et la confiance des consommateurs.
  • PMI composé mélange pondéré du PIB entre les secteurs manufacturier et des services: il fournit le signal le plus large de l'activité économique et se corréle le plus systématiquement avec l'orientation de la tendance des changes sur des horizons de 1 à 3 mois.

L'avantage du délai de livraison des données PMI par rapport aux impressions du PIB est important: le PMI composite est publié le premier jour ouvrable de chaque mois pour le mois précédent, tandis que le PIB arrive généralement 36 semaines après la fin du trimestre et est ensuite révisé.

Couverture des PMI dans FXMacroData

Le point d'extrémité PMI FXMacroData renvoie les séries chronologiques composites du PMI pour chaque devise majeure , y compris les variantes pondérées par fabrication le cas échéant. /api/v1/announcements/{currency}/pmi L'indice non manufacturier (NMI) est disponible pour les USD et les CNY via le nmi Une balle d'indicateur.

Construire le signal de divergence des PMI

Le signal est construit à partir de l'écart entre les lectures composites des PMI de deux pays. Un écart positif lorsque le PMI du pays A dépasse le PMI de pays B favorise la monnaie A par rapport à la monnaia B. La force du signal augmente avec:

  • La grandeur absolue de l'écart (divergence plus grande = biais plus fort)
  • Direction du changement (élargissement de l'écart = accélération du biais)
  • Durée (différence persistante sur plusieurs mois = régime de tendance, pas une fois)
  • Le croisement de 50 niveaux (un côté au-dessus du seuil d'expansion tandis que l'autre se contracte)

L'exemple suivant fournit des données composites sur les PMI des États-Unis et de la zone euro et calcule l'écart de divergence relatif à l'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 composite 2020 à 2026

Les deux séries des PMI sont représentées par le niveau neutre 50.

EUR/USD: Paire de référence pour la divergence des PMI

EUR/USD est la paire de devises la plus négociée au monde et la plus étudiée pour l'analyse macro-fondamentale. C'est aussi la paires où la divergence des PMI a historiquement montré la relation le plus claire entre le délai de livraison en partie parce que les éditions US ISM/PMI et S&P Global PMI de la zone euro sont surveillées de près, largement distribuées et ont une longue histoire qui permet un backtesting.

La relation n'est pas mécanique EUR/USD est également fortement influencée par l'appétit pour le risque, les prix de l'énergie, les attentes de la BCE/Fed sur les taux et le positionnement. Mais la divergence des PMI fournit systématiquement un biais structurel qui recouvre tous ces facteurs à court terme.

Les taux de change sont les taux de référence de l'indice de change.

L'écart PMI (EUR moins USD) représenté par rapport au taux de change EUR/USD. Notez comment l'écard PMI a tendance à changer de direction avant que le taux au comptant ne suive. L'axe secondaire pour EUR/ USD est inversé pour aligner visuellement la divergence PMI sur la direction de change attendue.

Étendre le signal à travers les paires principales

Le même cadre de divergence s'applique à toutes les principales paires de devises où des séries PMI sont disponibles.

Indice de la force du signal de divergence du PMI par paire Corrélation avec le rendement des changes sur 8 semaines suivantes

Coefficients de corrélation illustratifs entre la divergence des PMI et la direction des changes de 8 semaines suivantes.

Les paires les plus fiables pour répondre à la divergence des PMI partagent certaines caractéristiques: les deux économies ont suivi de près les séries PMI de haute qualité; il existe un commerce bilatéral significatif entre les deux pays; et aucune des deux devises n'est principalement une monnaie de matières premières où les prix des ressources peuvent annuler les signaux de macro-activité. EUR/USD, GBP/USD , USD/JPY et EUR/GBP se situent systématiquement dans cette catégorie.

Récupération des données sur les PMI multi-monnaies

La construction d'un tableau de bord de signaux PMI multipares nécessite de tirer les données PMI de plusieurs devises et de les aligner sur une chronologie mensuelle commune. Points d'extrémité des PMI fournit des séries chronologiques mensuelles cohérentes pour toutes les principales devises.

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})")

Classement du régime AMP

Une seule lecture du spread PMI est instructive, mais le signal le plus négociable provient de la classification du régime: identifier quand la divergence franchit un seuil significatif et y reste pendant plusieurs mois.

Un A fort

Différence > +3 points, élargissement ou maintien A en expansion (> 50), B proche de la contraction

Neutre

Les taux de change sont les mêmes pour les deux pays, mais les taux de croissance sont plus faibles que pour les autres pays.

Un B fort

Diffusion < -3 points, élargissement ou maintien. B en expansion, A près de contraction.

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)")

Combiner la divergence des PMI avec le différentiel des taux

La divergence des PMI est plus forte lorsqu'elle s'aligne sur ou mène le différentiel des taux de référence entre deux pays. Lorsque la divergence du PMI s'élargit en faveur de la monnaie A en même temps que le différenciel des cours favorise également A, le biais structurel des changes est renforcé et tend à être maintenu plus longtemps. Lorsque les divergences des PMI et le différential de taux ne sont pas d'accord, un signal finira par gagner; le PMI a tendance à diriger la trajectoire des taux, car les banques centrales répondent aux données d'activité.

# 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())

Le taux de change est le taux de référence de l'indice de croissance annuel.

Le signal composite combine la divergence des PMI (60%) et le différentiel des taux directeurs (40%).

Temps de réalisation: quand la divergence des PMI porte ses fruits?

La question cruciale pour les traders est le délai: combien de semaines ou de mois après l'émergence de la divergence PMI la paire de devises a tendance à confirmer le mouvement?

Pour l'AUD et le CAD, la relation PMI-lead est moins fiable à tout décalage fixe car les prix des matières premières peuvent annuler le signal entièrement.

Cadre pratique des délais de réalisation

  • EUR/USD, GBP/USD et EUR/GBP: La divergence du PMI détermine la direction des changes de 48 semaines.
  • USD/JPY: La divergence des PMI détermine la direction des changes de 812 semaines.
  • Les prix à la vente sont les suivants: La divergence des PMI ne fonctionne que comme un biais de soutien. Exiger la confirmation du prix des matières premières (minerai de fer pour AUD, produits laitiers pour NZD) avant de positionner.
  • USD/CAD: Les PMI manufacturiers (pas composites) sont plus pertinents en raison de la structure des exportations du Canada.

Le mettre en place: un tableau de bord de signaux PMI en direct

La fonction suivante construit un tableau de bord de signaux de divergence PMI simple mais complet sur toutes les paires majeures, en affichant le régime actuel, le niveau de spread et sa direction de tendance de 3 mois.

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())

Radar de signal de divergence PMI Capture d'écran actuelle

Vue radar du niveau actuel de divergence des PMI par paire (normalisé à une échelle de ±10).

Principaux risques et défaillances du signal

La divergence des PMI n'est pas infaillible. Plusieurs conditions peuvent provoquer une défaillance ou une inversion du signal:

  • Événements de déduction du risque dans un épisode global de forte élimination des risques (par exemple, pandémie, contagion financière), toutes les lectures des PMI s'effondrent simultanément, rendant la divergence entre les pays peu informative.
  • Fatigue de l'enquête ou changement structurel les enquêtes sur les PMI ne reflètent pas la réalité économique rapportée en raison de changements structurels dans la façon dont les entreprises répondent aux enquêtes. production industrielle ou ... ventes au détail les points de fin.
  • Les banques centrales ne peuvent pas être soumises à des mesures de précaution lorsqu'une banque centrale intervient sur une grande échelle dans le domaine monétaire (Banque du Japon 20222024, Banque nationale suisse périodiquement), la paire de devises peut évoluer de manière agressive contre le signal PMI. taux de réglementation et les séries de réserves de change comme un contrôle de santé mentale.
  • Chocs des prix des matières premières pour l'AUD, le CAD et le NZD, une hausse ou un effondrement soudains des prix des matières premières peuvent complètement annuler même un fort signal de divergence PMI. point final des produits de base pour le contexte.

L'utilisation la plus robuste de la divergence PMI est comme un filtre de régime plutôt que comme un signal d'entrée autonome.

Intégration des PMI dans un cadre macro-FX

Le flux de travail pratique pour un analyste de macro FX ressemble à ceci: chaque mois, lorsque le PMI composite imprime, exécutez le calcul de la divergence sur toutes les paires. Mettez à jour la classification du régime. Vérifiez si le régime actuel est d'accord ou non avec vos vues existantes sur le différentiel de taux et le positionnement COT. Si le PMI, les taux et les positionnements sont tous d'accords , c'est une configuration macro de grande conviction. S'ils ne sont pas d' accord c' est le marché qui vous dit que quelque chose est en transition.

La divergence du PMI n'est pas une garantie d'une tendance des changes. Elle identifie le contexte d'activité économique dans lequel une tendance est susceptible d'émerger. Utilisée comme un filtre de biais structurel plutôt que comme un déclencheur mécanique du commerce, elle est l'un des outils les plus riches en informations, librement disponibles et opportuns de la boîte à outils macro FX.

Le FXMacroData Points d'extrémité des PMI Je suis désolé . Indice final des PMI de la zone euro Vous pouvez créer le signal de divergence en quelques lignes de Python, le superposer à votre macro framework existant, et vous avez un indicateur de pointe qui se met à jour tous les mois semaines avant que les données d'activité officielles confirment ce que le PMI vous a déjà dit.

Blogroll