Si votre application doit convertir des reals brésiliens en roupies indiennes, des couronnes norvégiennes en dollars de Singapour, ou n'importe quelle paire dans laquelle le dollar américain n'apparaît d'aucun côté, vous êtes sur le point de faire des calculs de taux de change croisés. La plupart des API de devises et des places forex cotent des milliers de paires contre le dollar, mais seules quelques rares paires se négocient directement entre deux devises non-USD. Tout le reste — et c'est la longue traîne — se calcule comme un cross rate.
Ce guide explique ce qu'est un taux de change croisé, la formule sous ses trois formes, des exemples chiffrés que vous pouvez vérifier à la calculatrice, et du code prêt pour la production en JavaScript, Python, PHP et cURL. Nous couvrirons également les pièges qui causent des écarts de l'ordre du pour cent dans les vrais systèmes : arrondi, spreads bid-ask, taux périmés et erreurs d'inversion.
Qu'est-ce qu'un taux de change croisé ?
Un taux de change croisé est le prix d'une devise exprimé dans une autre devise quand aucune des deux n'est la devise locale ou de référence dans les cotations d'origine. En pratique, cela signifie presque toujours une paire de devises qui n'inclut pas le dollar américain, dérivée de deux paires qui chacune incluent le dollar.
Par exemple, le taux EUR/JPY est techniquement un cross rate. Bien que EUR/JPY soit l'une des paires les plus activement négociées au monde et dispose de son propre marché coté, la logique sous-jacente reste la même : prendre EUR/USD, prendre USD/JPY, multiplier, et vous obtenez le même nombre qu'une banque tokyoïte vous coterait. La cotation de marché et le cross calculé sont arrimés l'un à l'autre par arbitrage — s'ils s'écartaient, des traders interviendraient jusqu'à ce qu'ils se réalignent.
Les devises sans marché direct liquide — disons le naira nigérian contre le peso philippin (NGN/PHP) — n'existent que sous forme de cross rates. Il n'y a pas de marché NGN/PHP au sens propre. Quiconque cote cette paire la calcule à partir de NGN/USD et USD/PHP.
La définition technique rend la distinction plus claire :
- Un taux direct est coté activement sur un marché ou un flux agrégé.
- Un taux croisé est calculé à partir de deux ou plusieurs taux directs partageant une devise de base commune (généralement USD).
La plupart des fournisseurs d'API, dont Finexly, servent les cross rates de manière transparente : vous demandez n'importe quelle paire et le moteur s'occupe des maths en coulisses. Comprendre comment ces maths fonctionnent reste important car cela influence votre gestion de la précision, des spreads et des cas limites.
Pourquoi les cross rates comptent pour les développeurs
Les cross rates apparaissent dans trois catégories d'applications :
Paiements transfrontaliers et envois de fonds. Un freelance philippin facturant un client brésilien veut savoir combien de BRL valent ses tarifs en PHP. Il n'y a pas de marché direct BRL/PHP — la plateforme calcule via USD.
E-commerce multidevises. Un commerçant norvégien affichant des prix à un client singapourien a besoin de NOK/SGD. Stripe, Adyen et la plupart des processeurs de paiement calculent ce cross en interne, puis ajoutent leur marge de FX par-dessus.
Analyse financière et trading. Les systèmes quantitatifs couvrent l'exposition de portefeuilles libellés dans de nombreuses devises. Pour connaître votre exposition nette en EUR, vous devez convertir des positions en MXN, INR, ZAR et BRL en EUR — toutes des opérations croisées.
Dans chaque cas, la qualité de votre cross rate dépend entièrement de la qualité et de la fraîcheur des deux paires USD sous-jacentes. Un EUR/USD vieux de 2 secondes combiné à un USD/JPY vieux de 60 secondes produit un cross faux du montant exact dont le JPY a bougé entre-temps. Pour comprendre comment les taux sont sourcés et mis à jour, voir notre guide sur le fonctionnement des taux de change.
La formule du cross rate
Il existe trois cas, selon la manière dont les deux paires sources sont cotées. Le principe général est simple : quand on écrit les taux comme des fractions, la devise commune doit s'annuler.
Cas 1 : USD est la devise cotée dans les deux paires
Supposons que vous ayez :
- EUR/USD = 1,0850 (1 EUR achète 1,0850 USD)
- GBP/USD = 1,2620 (1 GBP achète 1,2620 USD)
Vous voulez EUR/GBP. La formule est :
EUR/GBP = (EUR/USD) / (GBP/USD)
EUR/GBP = 1.0850 / 1.2620 = 0.8598Donc 1 euro achète 0,8598 livre. Les deux cotations sources ont USD à droite, donc on divise.
Cas 2 : USD est la devise de base dans les deux paires
Supposons que vous ayez :
- USD/JPY = 152,30
- USD/CHF = 0,8920
Vous voulez JPY/CHF. La formule est :
JPY/CHF = (USD/CHF) / (USD/JPY)
JPY/CHF = 0.8920 / 152.30 = 0.005857Donc 1 yen achète 0,005857 franc suisse. Les deux cotations ont USD à gauche, donc on divise, mais avec le rapport inversé.
Cas 3 : USD est base dans l'une et cotation dans l'autre (mixte)
C'est le cas le plus fréquent et celui où les erreurs surviennent. Supposons que vous ayez :
- EUR/USD = 1,0850 (USD est la cotation)
- USD/JPY = 152,30 (USD est la base)
Vous voulez EUR/JPY. La formule est :
EUR/JPY = (EUR/USD) × (USD/JPY)
EUR/JPY = 1.0850 × 152.30 = 165.25Donc 1 euro achète 165,25 yens. Les dollars s'annulent proprement : euros-par-dollar fois dollars-par-yen laisse euros-par-yen. On multiplie dans le cas mixte.
Règle pratique : écrivez les paires en fractions, alignez-les pour que l'USD s'annule, puis multipliez ou divisez en conséquence. La devise qui reste au numérateur devient la base de votre cross rate.
Exemples chiffrés que vous pouvez vérifier
Utilisez n'importe quel flux de devises sérieux pour vérifier ces nombres. Les valeurs exactes vont varier avec le marché ; ce qui compte, c'est la structure.
Exemple 1 : EUR/JPY (cas mixte)
Avec EUR/USD = 1,0850 et USD/JPY = 152,30 :
EUR/JPY = 1.0850 × 152.30 = 165.2455Exemple 2 : GBP/CHF (cas mixte)
Avec GBP/USD = 1,2620 et USD/CHF = 0,8920 :
GBP/CHF = 1.2620 × 0.8920 = 1.1257Exemple 3 : AUD/NZD (les deux cotés contre USD)
Avec AUD/USD = 0,6630 et NZD/USD = 0,6010 :
AUD/NZD = 0.6630 / 0.6010 = 1.1031Donc 1 dollar australien achète 1,1031 dollar néo-zélandais.
Exemple 4 : BRL/INR (les deux cotés avec USD comme base)
Avec USD/BRL = 5,0850 et USD/INR = 84,20 :
BRL/INR = (USD/INR) / (USD/BRL) = 84.20 / 5.0850 = 16.561Donc 1 real brésilien achète 16,561 roupies indiennes.
Pour un rappel sur les codes standardisés à trois lettres utilisés ici, voir notre guide des codes ISO 4217.
Taux réciproques et inversion de paires
Parfois, votre flux de données vous donne USD/EUR mais vous avez besoin de EUR/USD. La réciproque est :
EUR/USD = 1 / (USD/EUR)Si USD/EUR = 0,9217, alors EUR/USD = 1 / 0,9217 = 1,0850.
Deux points pratiques sur les réciproques :
D'abord, les arrondis se cumulent. Si vous arrondissez un taux à 4 décimales, prenez la réciproque, puis arrondissez encore, vous pouvez introduire des erreurs de 0,01 % ou plus. Pour les applications haute précision, gardez la réciproque en pleine précision flottante jusqu'à l'étape finale d'affichage. Nous traitons des stratégies de précision en détail dans notre article sur les bonnes pratiques de cache et gestion d'erreurs pour les API de devises.
Ensuite, bid et ask s'inversent à la réciprocation. Si GBP/USD a un bid de 1,2618 et un ask de 1,2622, alors USD/GBP a un bid de 1/1,2622 = 0,7923 et un ask de 1/1,2618 = 0,7925. Le bid d'une paire est la réciproque de l'ask de l'autre, pas du bid.
Spread bid-ask sur les cross rates
Quand vous construisez un cross rate à partir de deux paires sous-jacentes, les spreads s'empilent.
Supposons :
- EUR/USD a un bid de 1,0848 et un ask de 1,0852 (spread de 4 pips)
- USD/JPY a un bid de 152,27 et un ask de 152,33 (spread de 6 pips)
Le cross EUR/JPY implicite a :
Bid = 1.0848 × 152.27 = 165.183
Ask = 1.0852 × 152.33 = 165.309Cela fait un spread de 12,6 pips sur le cross — plus large que celui de chacune des paires sources. En pratique, le marché EUR/JPY directement coté a un spread plus serré que celui-ci, parce que les cross liquides ont leurs propres market makers.
À retenir pour les développeurs : les cross rates mid-market calculés à partir de deux paires USD sont des estimations du vrai marché direct. Largement suffisants pour afficher des prix dans un checkout, ok pour de l'analyse, mais pas ce que votre banque ou votre courtier vous exécutera. La distinction mid-market versus taux dealer est traitée dans notre guide du taux mid-market.
Comment calculer des cross rates avec l'API Finexly
Vous n'avez normalement pas besoin de calculer les cross rates à la main. L'API Finexly accepte n'importe quelle base et n'importe quelle liste de devises cibles, et sert le cross en interne avec une précision constante. Voici comment l'utiliser dans quatre stacks courants.
cURL
curl "https://api.finexly.com/v1/latest?base=BRL&symbols=INR,PHP,NGN" \
-H "Authorization: Bearer YOUR_API_KEY"Réponse :
{
"base": "BRL",
"date": "2026-05-09",
"rates": {
"INR": 16.561,
"PHP": 11.272,
"NGN": 312.45
}
}JavaScript (Node 20+, Fetch)
async function getCrossRates(base, targets) {
const url = `https://api.finexly.com/v1/latest?base=${base}&symbols=${targets.join(",")}`;
const res = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.FINEXLY_API_KEY}` }
});
if (!res.ok) throw new Error(`Finexly API error: ${res.status}`);
return res.json();
}
const data = await getCrossRates("BRL", ["INR", "PHP", "NGN"]);
console.log(`1 BRL = ${data.rates.INR} INR`);Python
import os
import requests
def get_cross_rates(base, targets):
url = "https://api.finexly.com/v1/latest"
params = {"base": base, "symbols": ",".join(targets)}
headers = {"Authorization": f"Bearer {os.environ['FINEXLY_API_KEY']}"}
response = requests.get(url, params=params, headers=headers, timeout=10)
response.raise_for_status()
return response.json()
data = get_cross_rates("BRL", ["INR", "PHP", "NGN"])
print(f"1 BRL = {data['rates']['INR']} INR")PHP
<?php
function getCrossRates(string $base, array $targets): array {
$symbols = implode(',', $targets);
$url = "https://api.finexly.com/v1/latest?base={$base}&symbols={$symbols}";
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('FINEXLY_API_KEY')],
CURLOPT_TIMEOUT => 10,
]);
$body = curl_exec($ch);
if (curl_errno($ch)) throw new RuntimeException(curl_error($ch));
curl_close($ch);
return json_decode($body, true);
}
$data = getCrossRates('BRL', ['INR', 'PHP', 'NGN']);
echo "1 BRL = {$data['rates']['INR']} INR\n";Dans les quatre exemples, l'API fait les maths du cross rate à votre place et renvoie des valeurs mid-market précises. Vous pouvez changer la base pour n'importe laquelle des 170+ devises supportées et demander n'importe quel nombre de cibles en un seul appel. Pour plus de patterns spécifiques par langage, voir notre tutoriel d'API de devises en Python, guide d'intégration Node.js et guide PHP.
Quand calculer les cross rates vous-même
Même avec une bonne API, il existe trois scénarios où vous calculez les cross rates sur vos propres données plutôt que de les récupérer :
Backtesting de stratégies historiques. Si vous avez des années de données tick à tick d'EUR/USD et USD/JPY sur vos serveurs, calculer EUR/JPY localement évite de taper sur une API externe des millions de fois. Utilisez les endpoints de taux historiques pour amorcer les données, puis dérivez les cross dans votre moteur de backtest.
Applications sensibles à la latence. Les systèmes de trading algorithmique pré-calculent souvent les cross à partir des paires USD sous-jacentes en mémoire parce qu'économiser un aller-retour réseau compte. Le revers, c'est que vous prenez la responsabilité de la synchronisation et de la fraîcheur.
Taux mixtes personnalisés. Certaines plateformes cotent des taux internes mélangeant plusieurs sources ou appliquant une marge. Faire les maths du cross en interne permet d'appliquer votre logique métier avant d'exposer le taux aux clients.
Si votre cas d'usage n'est aucun des précédents — une page de checkout, un outil de facturation, un dashboard interne — laissez l'API servir le cross directement. Ce sera plus précis, plus simple à maintenir et plus rapide à implémenter.
Pièges courants lors du calcul des cross rates
Voici les erreurs que nous voyons le plus souvent en relisant du code de développeurs.
Inverser la mauvaise paire. Quand les deux paires sources sont cotées dans des sens opposés (l'une avec USD comme base, l'autre avec USD comme cotation), il est facile de multiplier alors qu'il fallait inverser et diviser. Écrivez toujours les taux en fractions et confirmez que la devise commune s'annule.
Arrondir trop tôt. Bug classique : arrondir chaque taux source à quatre décimales puis multiplier. L'arrondi composé peut produire des erreurs de 0,01 % à 0,1 %. Pour des calculs financiers, gardez la pleine précision et arrondissez uniquement à l'affichage.
Utiliser des taux périmés. Si vos deux taux sources ont été récupérés à 30 secondes d'intervalle, le cross construit à partir d'eux est intrinsèquement incohérent. Récupérez les deux dans un seul appel d'API (c'est ce que fait ?symbols=A,B,C dans l'API Finexly) pour qu'ils aient le même timestamp.
Mélanger données de semaine et de week-end. Les marchés forex ferment le week-end. Si votre tâche planifiée a tiré EUR/USD vendredi à 17h01 EST et USD/JPY vendredi à 16h59 EST, vous mélangez peut-être données live et données figées. Standardisez toutes les récupérations de taux sur un unique timestamp de marché. Nous creusons cela dans notre guide des horaires du marché forex.
Ignorer le spread pour un usage transactionnel. Les cross rates calculés depuis des sources mid-market sont bons pour l'affichage, mais si du vrai argent bouge, il vous faut le bid ou l'ask selon le sens de l'opération. Modélisez explicitement le spread dans votre code plutôt que de vous fier au mid.
Foire aux questions
Qu'est-ce qu'un cross rate en termes simples ?
C'est le taux de change entre deux devises, calculé en utilisant le taux de chacune contre une troisième devise commune, typiquement le dollar américain. Par exemple, le taux EUR/JPY est dérivé d'EUR/USD et USD/JPY.
EUR/JPY et GBP/JPY sont-ils considérés comme des cross rates ?
Oui, techniquement. Ils n'incluent pas le dollar américain, donc selon la définition stricte, ce sont des cross. Néanmoins, ces deux paires sont tellement négociées en direct qu'elles ont leurs propres marchés cotés et se comportent comme des paires majeures en pratique.
Pourquoi les cross rates sont-ils importants ?
Les cross rates rendent possibles la cotation et la négociation de devises sans marché direct liquide entre elles — soit la majorité des paires mondiales. Ils sont essentiels aux paiements transfrontaliers, au commerce multidevises et à l'analyse financière mondiale.
Puis-je calculer un cross rate sans utiliser le dollar américain comme pont ?
Oui. N'importe quelle devise commune fait office de pont. EUR est parfois utilisé pour des calculs centrés sur l'Europe et JPY dans certains marchés asiatiques. USD est le choix par défaut parce que plus de paires y sont cotées, ce qui donne une meilleure qualité de données.
Quelle est la précision des cross rates calculés par rapport aux cotations de marché direct ?
Pour les cross liquides comme EUR/JPY ou GBP/CHF, les taux calculés et les cotations directes sont quasi identiques grâce à l'arbitrage. Pour les cross illiquides comme NGN/PHP, le taux calculé est l'unique référence disponible — il n'y a pas de marché direct séparé pour comparer.
Finexly calcule-t-il les cross rates automatiquement ?
Oui. Vous demandez n'importe quelle base et n'importe quelle liste de devises cibles, et l'API sert des cross rates mid-market cohérents. Vous n'avez rien à calculer ni à inverser.
Démarrer avec Finexly
Prêt à utiliser des cross rates en temps réel dans votre application ? Récupérez votre clé API Finexly gratuite — sans carte de crédit. Vous obtenez 1 000 requêtes par mois sur le plan gratuit et pouvez monter en gamme via nos plans tarifaires à mesure que votre trafic grandit. L'API supporte plus de 170 devises et calcule les cross rates pour n'importe quelle paire de manière transparente, vous laissant vous concentrer sur votre produit plutôt que sur les maths du FX.
Explore More
Vlado Grigirov
Senior Currency Markets Analyst & Financial Strategist
Vlado Grigirov is a senior currency markets analyst and financial strategist with over 14 years of experience in foreign exchange markets, cross-border finance, and currency risk management. He has wo...
View full profile →