MetalAPI
XAU3 997,89−1,54 %XAG53,936−1,51 %XPT1 554,47−0,83 %XPD1 047,03−0,44 %XCU6,5080+2,29 %WTI103,27+3,82 %BRENT111,70−1,30 %EUR1,120400−0,01 %GBP1,337500−0,01 %JPY0,0063761+0,14 %CHF1,213445−0,25 %TRY0,020125−0,12 %BTC80 640,30−0,17 %ETH2 353,99−0,08 %
Tous les articles
OrArgentMarchésDonnées historiques

Ratio or/argent : ce que c'est et comment le calculer

Ce que mesure le ratio or/argent, comment le calculer avec les cours en direct de l'or et de l'argent, et tracer son historique par API en Python et JavaScript.

Par MetalAPI Team··11 min de lecture

Qu'est-ce que le ratio or/argent ?

Le ratio or/argent est le nombre d'onces troy d'argent nécessaires pour acheter une once troy d'or. On l'obtient en divisant le cours de l'or par celui de l'argent, tous deux dans la même devise et pour le même poids. Avec les prix d'exemple utilisés dans toute la documentation MetalAPI, l'or à 3 997,89 dollars américains et l'argent à 53,94 dollars américains l'once troy, le ratio vaut environ 74,1 : à ces prix, une once d'or vaut à peu près 74 onces d'argent.

Comme les deux prix sont dans la même devise, celle-ci s'annule et le ratio n'a pas d'unité, ce qui en fait un moyen compact de comparer directement les deux métaux. Il se lit ainsi :

  • Un ratio en hausse signifie que l'or s'est apprécié par rapport à l'argent : soit l'or a davantage monté que l'argent, soit il a moins baissé.
  • Un ratio en baisse signifie que l'argent s'est apprécié par rapport à l'or.
  • Le ratio ne dit rien, à lui seul, de la direction de chacun des prix. Les deux métaux peuvent baisser pendant que le ratio monte, et les deux peuvent monter pendant qu'il baisse.

Les sections suivantes expliquent comment calculer correctement le ratio, pourquoi la devise de base n'a pas d'importance, et comment le suivre et le représenter en graphique avec l'API REST de MetalAPI.

Cet article a une vocation pédagogique et porte sur la définition et le calcul du ratio. Il ne constitue pas un conseil financier ou en investissement, et les prix qu'il contient sont des valeurs d'exemple de la documentation MetalAPI, pas des données de marché.

Comment calculer le ratio or/argent

La formule tient en une division :

Exemple chiffré
ratio or/argent = prix de l'or ÷ prix de l'argent   (même devise, même unité)

3 997,89 ÷ 53,94 ≈ 74,12

ratio argent/or = 1 ÷ 74,12 ≈ 0,0135   (onces d'or par once d'argent)

La division est triviale ; c'est dans les données d'entrée que se glissent les erreurs :

  • Même unité pour les deux métaux. Divisez un prix à l'once par un prix à l'once, ou un prix au gramme par un prix au gramme. Le prix de l'or au gramme divisé par celui de l'argent à l'once troy est faux d'un facteur 31,1, le nombre de grammes dans une once troy (31,1034768).
  • Même moment. Prenez les deux prix dans la même réponse ou à la même clôture quotidienne. Diviser un cours de l'or en direct par la clôture de l'argent de la veille mélange deux états du marché différents.
  • Même type de prix. Divisez un prix mid par un prix mid, ou une clôture par une clôture. Mélanger le prix de vente d'un négociant pour un métal et un prix spot pour l'autre ajoute au ratio le spread et la prime du négociant.
  • Arrondissez à la fin. Divisez les prix non arrondis et n'arrondissez le ratio qu'à l'affichage, généralement à une ou deux décimales.

Dans une réponse de MetalAPI, les prix sont les clés préfixées par la devise de base : USDXAU et USDXAG avec la base par défaut USD. Les clés simples XAU et XAG sont des inverses (des onces par dollar). Diviser XAG par XAU donne le même ratio, mais lire les clés préfixées évite de prendre un inverse pour un prix.

Pourquoi la devise de base n'a pas d'importance

L'or et l'argent sont généralement cotés en dollars américains, mais le ratio est le même dans toutes les devises. Avec base=EUR, MetalAPI exprime les deux prix en euros en divisant les prix en dollars par le prix en dollars d'un euro, et ce facteur commun s'annule dans la division :

text
EURXAU = USDXAU ÷ USDEUR
EURXAG = USDXAG ÷ USDEUR

EURXAU ÷ EURXAG = USDXAU ÷ USDXAG

MetalAPI calcule tous les taux croisés à partir d'un même instantané : base=EUR, base=INR ou base=JPY donnent donc le même ratio qu'en dollars, à l'arrondi près sur le dernier des dix chiffres significatifs. Il en va de même pour unit : avec unit=gram, les deux prix des métaux sont divisés par 31,1034768 et le ratio ne change pas.

La devise compte en revanche lorsque les deux prix proviennent de sources ou de moments différents, par exemple un cours de l'or dans une devise et un cours de l'argent relevé quelques heures plus tard dans une autre : le taux de change ne s'annule alors plus exactement. Prendre les deux prix dans une même réponse évite ce problème.

Vous pouvez aussi laisser l'API faire la division. base accepte n'importe quel symbole pris en charge, métaux compris. Avec base=XAG, chaque prix est exprimé en onces troy d'argent : XAGXAU, le prix d'une once d'or en argent, est donc le ratio lui-même :

bash
curl "https://metalapi.com/api/v1/latest?base=XAG&currencies=XAU" \
  -H "X-API-Key: $METALAPI_KEY"

Dans cette réponse, la clé simple XAU est l'inverse : des onces d'or par once d'argent. La suite de cet article calcule plutôt le ratio à partir des prix en dollars, car vous voudrez généralement afficher ou stocker les deux prix à côté.

Obtenir le ratio or/argent actuel depuis l'API

Une seule requête /latest avec currencies=XAU,XAG renvoie les deux prix issus du même instantané et compte pour une seule requête. Avec Node.js 18 ou plus récent, enregistrez ceci sous ratio.mjs et exécutez node ratio.mjs :

ratio.mjs
const params = new URLSearchParams({ currencies: "XAU,XAG" });
const res = await fetch(`https://metalapi.com/api/v1/latest?${params}`, {
  headers: { "X-API-Key": process.env.METALAPI_KEY },
  signal: AbortSignal.timeout(10_000),
});
const data = await res.json();
if (!data.success) {
  throw new Error(`MetalAPI ${data.error.code} (${data.error.type}): ${data.error.info}`);
}

const gold = data.rates[`${data.base}XAU`];
const silver = data.rates[`${data.base}XAG`];
const ratio = gold / silver;
const asOf = new Date(data.timestamp * 1000).toISOString();

console.log(`Gold:   ${gold} ${data.base} per troy ounce`);
console.log(`Silver: ${silver} ${data.base} per troy ounce`);
console.log(`Gold/silver ratio: ${ratio.toFixed(2)} (data from ${asOf})`);

Avec les prix d'exemple, la dernière ligne affiche un ratio de 74,12. La fraîcheur suit l'intervalle de mise à jour de votre plan : quotidienne sur Free, toutes les 30 minutes sur Lite, toutes les 10 minutes sur Standard, toutes les 60 secondes sur Advanced et Pro, et jusqu'à 5 secondes sur Enterprise. Du vendredi 17:00 au dimanche 17:00, heure de New York, le marché spot est fermé et le ratio reste à sa valeur de clôture du vendredi.

Le ratio issu de /latest est un ratio de prix mid. Si vous voulez le taux auquel le métal peut réellement être échangé, utilisez les prix bid et ask, disponibles à partir du plan Standard en ajoutant XAU-BID, XAU-ASK, XAG-BID et XAG-ASK à currencies :

  • Vendre une once d'or au bid permet d'acheter USDXAU-BID ÷ USDXAG-ASK onces d'argent.
  • Acheter une once d'or avec de l'argent coûte USDXAU-ASK ÷ USDXAG-BID onces d'argent.

Ces deux nombres sont moins favorables que le ratio mid, de la valeur des deux spreads, et les primes propres au négociant s'y ajoutent. Spot, bid, ask et spread explique comment ces cotations sont construites.

Représenter l'historique du ratio or/argent en graphique

Pour un graphique historique, il vous faut les clôtures quotidiennes des deux métaux. /timeframe (alias /timeseries) les renvoie pour une période en une requête : jusqu'à 30 jours par requête sur le plan Free et 365 jours sur les plans payants. L'historique quotidien des métaux commence en 2000 et tous les plans peuvent l'interroger en entier ; les plans ne diffèrent que par le nombre de jours qu'une requête peut couvrir.

Ce script Python télécharge les cinq dernières années par tranches de 365 jours (cinq requêtes), calcule le ratio pour chaque jour où les deux prix existent, écrit un fichier CSV, affiche quelques statistiques et enregistre un graphique avec une moyenne mobile sur 50 jours. Sur le plan Free, définissez MAX_DAYS = 30 et DAYS_BACK = 90, ce qui demande trois requêtes.

ratio_history.py
import csv
import os
import statistics
from datetime import date, datetime, timedelta, timezone

import matplotlib.pyplot as plt
import requests

API = "https://metalapi.com/api/v1"
MAX_DAYS = 365       # période maximale par requête : 365 sur les plans payants, 30 sur Free
DAYS_BACK = 5 * 365  # sur Free, limitez-vous à quelques mois

session = requests.Session()
session.headers["X-API-Key"] = os.environ["METALAPI_KEY"]


def daily_closes(start: date, end: date) -> dict:
    """Clôtures quotidiennes de l'or et de l'argent de start à end (inclus), indexées par date."""
    rates = {}
    while start <= end:
        chunk_end = min(start + timedelta(days=MAX_DAYS), end)
        r = session.get(
            f"{API}/timeframe",
            params={"start_date": start.isoformat(), "end_date": chunk_end.isoformat(), "currencies": "XAU,XAG"},
            timeout=30,
        )
        data = r.json()
        if not data["success"]:
            err = data["error"]
            raise RuntimeError(f"MetalAPI {err['code']} ({err['type']}): {err['info']}")
        rates.update(data["rates"])
        start = chunk_end + timedelta(days=1)
    return rates


end = datetime.now(timezone.utc).date() - timedelta(days=1)  # la clôture de la veille est définitive
rates = daily_closes(end - timedelta(days=DAYS_BACK), end)

rows = []
for day in sorted(rates):
    values = rates[day]
    if "USDXAU" in values and "USDXAG" in values:  # ignore les jours où il manque l'un des métaux
        gold, silver = values["USDXAU"], values["USDXAG"]
        rows.append((day, gold, silver, gold / silver))

with open("gold-silver-ratio.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(["date", "gold_usd_oz", "silver_usd_oz", "ratio"])
    writer.writerows(rows)

ratios = [r[3] for r in rows]
print(f"{len(rows)} trading days, {rows[0][0]} to {rows[-1][0]}")
print(f"latest {ratios[-1]:.2f}, min {min(ratios):.2f}, max {max(ratios):.2f}, median {statistics.median(ratios):.2f}")

window = 50
days = [date.fromisoformat(r[0]) for r in rows]
moving = [sum(ratios[i - window + 1 : i + 1]) / window for i in range(window - 1, len(ratios))]

plt.figure(figsize=(10, 4))
plt.plot(days, ratios, linewidth=1, label="Gold/silver ratio")
plt.plot(days[window - 1 :], moving, linewidth=1, label=f"{window}-day moving average")
plt.ylabel("Ounces of silver per ounce of gold")
plt.legend()
plt.tight_layout()
plt.savefig("gold-silver-ratio.png", dpi=150)

Quelques détails sont délibérés :

  • Il parcourt les dates renvoyées, pas le calendrier. /timeframe omet les week-ends et les jours fériés des marchés.
  • Il s'arrête à la date UTC de la veille. La barre du jour bouge encore, et une end_date future renvoie l'erreur 205.
  • Il stocke les deux prix à côté du ratio, pour que vous puissiez vérifier n'importe quelle ligne sans tout retélécharger.
  • Les statistiques ne décrivent que la période téléchargée. Modifiez DAYS_BACK et elles changent avec elle.

En JavaScript, la même série se résume à un map sur l'objet rates d'une réponse /timeframe, par exemple obtenue avec l'utilitaire de périodes du guide des données historiques :

javascript
// rates = l'objet "rates" de /timeframe?currencies=XAU,XAG
const series = Object.entries(rates)
  .filter(([, r]) => r.USDXAU && r.USDXAG)
  .sort(([a], [b]) => a.localeCompare(b))
  .map(([day, r]) => ({ day, gold: r.USDXAU, silver: r.USDXAG, ratio: r.USDXAU / r.USDXAG }));

Les cours de clôture des jours passés ne changent pas : téléchargez une période une fois, puis complétez-la avec une courte requête pour les derniers jours. Pour un rattrapage complet jusqu'en 2000 (environ 27 requêtes sur un plan payant), une archive SQLite et un graphique matplotlib de l'or avec le ratio, consultez Cours historiques de l'or et de l'argent par API.

Les prix des métaux antérieurs à octobre 2026 sont dérivés des contrats à terme de première échéance : ils peuvent donc légèrement différer des prix spot du même jour. Les deux métaux sont dérivés de la même façon, mais gardez-le à l'esprit quand vous comparez votre série avec un graphique du ratio provenant d'une autre source.

Comment le ratio or/argent est utilisé

Le ratio est une mesure relative. Il décrit comment l'or et l'argent ont évolué l'un par rapport à l'autre, pas la direction que prendra l'un ou l'autre. Usages courants :

  • Performance relative. Le ratio en fin de période divisé par le ratio en début de période est égal au facteur de croissance de l'or divisé par celui de l'argent. Un ratio en hausse de 5 % signifie que l'or a gagné 5 % par rapport à l'argent sur la période, quelle qu'ait été l'évolution des deux prix en valeur absolue.
  • Contexte dans les tableaux de bord et les rapports. Les suivis de prix, les sites de négociants et les newsletters affichent le ratio à côté des deux prix ; la même requête /latest le fournit sans coût supplémentaire.
  • Comparaison avec son propre passé. Certains comparent le ratio actuel à sa moyenne, sa médiane ou sa fourchette sur une période de leur choix, pour indiquer s'il est élevé ou bas par rapport à cette période. Le script ci-dessus affiche ces chiffres pour la période que vous téléchargez.
  • Échanges entre métaux. Certains détenteurs de métal physique échangent de l'or contre de l'argent, ou l'inverse, quand le ratio atteint un niveau fixé à l'avance. Que cela leur laisse davantage de métal dépend d'une évolution ultérieure du ratio dans le sens attendu, ce que rien ne garantit, et chaque échange supporte les spreads et primes des négociants décrits plus haut.
  • Autres ratios. La même division fonctionne pour deux prix quelconques dans une même devise : or/platine (USDXAU ÷ USDXPT), ou or/pétrole (USDXAU ÷ USDWTI, des barils de pétrole par once d'or). Pour les ratios entre classes d'actifs, laissez unit à sa valeur par défaut, car unit modifie les prix des métaux mais pas ceux de l'énergie.

Aucun de ces usages n'est une prévision. Le ratio n'a pas de niveau normal fixe vers lequel il devrait revenir, et une valeur haute ou basse n'est pas, à elle seule, une raison d'acheter ou de vendre l'un ou l'autre métal. Si vous prenez des décisions d'investissement, consultez un conseiller financier qualifié.

Suivre le ratio or/argent dans votre application

Créez un compte gratuit pour obtenir une clé API. Les 100 requêtes par mois, les prix quotidiens et les périodes de 30 jours du plan Free suffisent pour un ratio quotidien et quelques mois d'historique. Les plans payants ajoutent des prix plus frais, des périodes de 365 jours pour les longs rattrapages et, à partir de Standard, les prix bid/ask ; comparez-les sur la page des tarifs. Pour les prix de l'argent seuls, consultez le guide de l'API du cours de l'argent.

Questions fréquentes

Que signifie un ratio or/argent de 74 ?

Cela signifie qu'une once troy d'or coûte autant qu'environ 74 onces troy d'argent aux prix utilisés. Il décrit uniquement le prix relatif des deux métaux. Il ne dit pas si l'un ou l'autre est cher ou bon marché dans l'absolu.

Le ratio or/argent est-il le même dans toutes les devises et unités ?

Oui, tant que les deux prix proviennent du même moment et portent sur le même poids, car la devise et l'unité s'annulent dans la division. MetalAPI dérive toutes les devises et unités d'un même instantané : n'importe quelle base et n'importe quelle unit donnent donc le même ratio, à d'infimes écarts d'arrondi près.

À quelle fréquence le ratio or/argent change-t-il ?

Chaque fois que l'un des deux prix bouge, c'est-à-dire en continu pendant les heures d'ouverture des marchés. Par l'API, vous le voyez à l'intervalle de mise à jour de votre plan, de quotidien sur Free à toutes les 5 secondes sur Enterprise. Il reste à sa valeur du vendredi pendant le week-end.

Sur quelle profondeur d'historique puis-je calculer le ratio ?

Les clôtures quotidiennes de l'or et de l'argent remontent à 2000 sur tous les plans. Une seule requête /timeframe couvre jusqu'à 30 jours sur Free et 365 jours sur les plans payants : l'historique complet demande donc environ 27 requêtes sur un plan payant. Les prix antérieurs à octobre 2026 sont dérivés des contrats à terme de première échéance.

Un ratio or/argent élevé est-il un signal d'achat pour l'argent ?

Cet article ne donne pas de conseil en investissement. Un ratio élevé signifie seulement que l'or est cher par rapport à l'argent, comparé à la période que vous prenez pour référence. Il ne prédit pas l'évolution de l'un ou l'autre prix, ni celle du ratio.

Essayez avec vos propres données

Créez un compte gratuit et envoyez votre première requête en moins de deux minutes. 100 requêtes par mois, sans carte bancaire.

À lire aussi