Als je applicatie Braziliaanse real moet omrekenen naar Indiase rupee, Noorse kroon naar Singaporese dollar of een willekeurig paar waarbij de Amerikaanse dollar aan geen van beide kanten staat, ga je rekenen met kruiswisselkoersen. De meeste valuta-API's en forexplatforms noteren duizenden paren tegen de dollar, maar slechts een handvol paren wordt direct verhandeld tussen twee niet-USD-valuta's. Al het andere — en dat is de long tail — wordt berekend als cross rate.
Deze gids legt uit wat een cross rate is, geeft de formule in haar drie vormen, uitgewerkte voorbeelden die je met een rekenmachine kunt verifiëren en productiekwaliteit code in JavaScript, Python, PHP en cURL. We behandelen ook de valkuilen die in echte systemen afwijkingen van een procent veroorzaken: afronden, bid-ask-spreads, verouderde koersen en omkeerfouten.
Wat is een kruiswisselkoers?
Een kruiswisselkoers is de prijs van één valuta uitgedrukt in een andere valuta wanneer geen van beide de lokale of referentievaluta is in de oorspronkelijke noteringen. In de praktijk betekent dat bijna altijd een valutapaar zonder de Amerikaanse dollar, afgeleid uit twee paren die elk de dollar bevatten.
Het EUR/JPY-koers is bijvoorbeeld technisch gezien een cross rate. Hoewel EUR/JPY een van de meest verhandelde paren ter wereld is en een eigen genoteerde markt heeft, blijft de onderliggende logica hetzelfde: neem EUR/USD, neem USD/JPY, vermenigvuldig en je krijgt hetzelfde getal dat een bank in Tokio je zou noteren. De marktnotering en de berekende cross zijn aan elkaar verankerd via arbitrage — als ze uit elkaar zouden lopen, stappen traders in tot ze weer overeenkomen.
Valuta zonder liquide directe markt — bijvoorbeeld Nigeriaanse naira tegen Filipijnse peso (NGN/PHP) — bestaan alleen als cross rates. Er is geen NGN/PHP-markt in enige zinvolle zin. Wie dat paar noteert, berekent het uit NGN/USD en USD/PHP.
De technische definitie maakt het onderscheid duidelijker:
- Een directe koers wordt actief genoteerd op een markt of geaggregeerde feed.
- Een kruiskoers wordt berekend uit twee of meer directe koersen die een gemeenschappelijke basisvaluta delen (meestal USD).
De meeste API-aanbieders, waaronder Finexly, serveren cross rates naadloos: je vraagt om een willekeurig paar en de engine doet de wiskunde achter de schermen. Toch blijft het belangrijk om te weten hoe die wiskunde werkt, omdat het invloed heeft op hoe je omgaat met precisie, spreads en randgevallen.
Waarom cross rates belangrijk zijn voor ontwikkelaars
Cross rates duiken op in drie soorten applicaties:
Grensoverschrijdende betalingen en remittances. Een Filipijnse freelancer die een Braziliaanse klant factureert, wil weten hoeveel BRL zijn tarieven in PHP waard zijn. Er is geen directe BRL/PHP-markt — het platform berekent het via USD.
Multi-currency e-commerce. Een Noorse webwinkel die prijzen toont aan een Singaporese klant heeft NOK/SGD nodig. Stripe, Adyen en de meeste betaaldienstverleners berekenen die cross intern en zetten er hun FX-marge bovenop.
Financiële analyse en trading. Quantitatieve systemen hedgen risico's op portefeuilles in vele valuta's. Om je netto-exposure in EUR te kennen, moet je posities in MXN, INR, ZAR en BRL omrekenen naar EUR — allemaal cross-berekeningen.
In elk geval is de kwaliteit van je cross rate volledig afhankelijk van de kwaliteit en versheid van de twee onderliggende USD-paren. Een EUR/USD van 2 seconden oud gecombineerd met een USD/JPY van 60 seconden oud levert een cross op die er precies zoveel naast zit als de JPY in dat venster heeft bewogen. Voor een primer over hoe koersen tot stand komen en worden bijgewerkt, zie onze gids over hoe wisselkoersen werken.
De cross-rate-formule
Er zijn drie gevallen, afhankelijk van hoe de twee bronparen worden genoteerd. Het algemene principe is simpel: schrijf je de koersen als breuken, dan moet de gemeenschappelijke valuta wegvallen.
Geval 1: USD is in beide paren de quote-valuta
Stel je hebt:
- EUR/USD = 1,0850 (1 EUR koopt 1,0850 USD)
- GBP/USD = 1,2620 (1 GBP koopt 1,2620 USD)
Je wilt EUR/GBP. De formule is:
EUR/GBP = (EUR/USD) / (GBP/USD)
EUR/GBP = 1.0850 / 1.2620 = 0.8598Dus 1 euro koopt 0,8598 pond. Beide bronnoteringen hebben USD aan de rechterkant, dus we delen.
Geval 2: USD is in beide paren de basisvaluta
Stel je hebt:
- USD/JPY = 152,30
- USD/CHF = 0,8920
Je wilt JPY/CHF. De formule is:
JPY/CHF = (USD/CHF) / (USD/JPY)
JPY/CHF = 0.8920 / 152.30 = 0.005857Dus 1 yen koopt 0,005857 Zwitserse frank. Beide bronnoteringen hebben USD aan de linkerkant, dus we delen, maar met de verhouding omgekeerd.
Geval 3: USD is in één paar basis en in het andere quote (gemengd)
Dit is het meest voorkomende geval en de plek waar fouten ontstaan. Stel je hebt:
- EUR/USD = 1,0850 (USD is de quote)
- USD/JPY = 152,30 (USD is de basis)
Je wilt EUR/JPY. De formule is:
EUR/JPY = (EUR/USD) × (USD/JPY)
EUR/JPY = 1.0850 × 152.30 = 165.25Dus 1 euro koopt 165,25 yen. De dollars vallen netjes weg: euro's-per-dollar maal dollars-per-yen levert euro's-per-yen op. In het gemengde geval vermenigvuldig je.
Eenvoudige vuistregel: schrijf de paren als breuken, lijn ze zo uit dat USD wegvalt en vermenigvuldig of deel daarna. De valuta die als teller overblijft, wordt de basis van je cross rate.
Uitgewerkte voorbeelden om te verifiëren
Gebruik een willekeurige grote valuta-feed om deze getallen te verifiëren. De exacte waarden bewegen mee met de markt; het gaat om de structuur.
Voorbeeld 1: EUR/JPY (gemengd)
Met EUR/USD = 1,0850 en USD/JPY = 152,30:
EUR/JPY = 1.0850 × 152.30 = 165.2455Voorbeeld 2: GBP/CHF (gemengd)
Met GBP/USD = 1,2620 en USD/CHF = 0,8920:
GBP/CHF = 1.2620 × 0.8920 = 1.1257Voorbeeld 3: AUD/NZD (beide tegen USD genoteerd)
Met AUD/USD = 0,6630 en NZD/USD = 0,6010:
AUD/NZD = 0.6630 / 0.6010 = 1.1031Dus 1 Australische dollar koopt 1,1031 Nieuw-Zeelandse dollar.
Voorbeeld 4: BRL/INR (beide met USD als basis genoteerd)
Met USD/BRL = 5,0850 en USD/INR = 84,20:
BRL/INR = (USD/INR) / (USD/BRL) = 84.20 / 5.0850 = 16.561Dus 1 Braziliaanse real koopt 16,561 Indiase rupee.
Voor een opfrisser van de gestandaardiseerde drielettercodes die hier worden gebruikt, zie onze ISO 4217-valutacodesgids.
Wederkerige koersen en paren omkeren
Soms levert je datafeed USD/EUR, terwijl je EUR/USD nodig hebt. De wederkerige is:
EUR/USD = 1 / (USD/EUR)Als USD/EUR = 0,9217, dan EUR/USD = 1 / 0,9217 = 1,0850.
Twee praktische punten over wederkerigen:
Ten eerste: afronding stapelt op. Rond je een koers af op 4 decimalen, neem je daarna de wederkerige en rond je opnieuw af, dan kan je fouten van 0,01% of meer introduceren. Voor toepassingen met hoge precisie houd je de wederkerige in volledige floating-point-precisie tot de laatste weergavestap. Precisiestrategieën behandelen we uitgebreid in onze post over best practices voor caching en foutafhandeling bij valuta-API's.
Ten tweede: bid en ask wisselen om bij wederkerige berekening. Als GBP/USD een bid van 1,2618 en een ask van 1,2622 heeft, dan heeft USD/GBP een bid van 1/1,2622 = 0,7923 en een ask van 1/1,2618 = 0,7925. De bid van het ene paar is de wederkerige van de ask van het andere paar, niet van de bid.
Bid-ask-spread bij cross rates
Wanneer je een cross rate bouwt uit twee onderliggende paren, stapelen de spreads op.
Stel:
- EUR/USD heeft bid 1,0848 en ask 1,0852 (4-pip-spread)
- USD/JPY heeft bid 152,27 en ask 152,33 (6-pip-spread)
De impliciete EUR/JPY-cross heeft:
Bid = 1.0848 × 152.27 = 165.183
Ask = 1.0852 × 152.33 = 165.309Dat is een spread van 12,6 pips op de cross — breder dan beide bronparen. In de praktijk heeft de direct genoteerde EUR/JPY-markt een krappere spread dan deze berekende, omdat liquide cross-paren eigen market makers hebben.
De les voor ontwikkelaars: mid-market cross rates die uit twee USD-paren worden berekend zijn schattingen van de echte directe markt. Goed genoeg om prijzen in een checkout te tonen, prima voor analytics, maar niet wat je bank of broker daadwerkelijk uitvoert. Het verschil mid-market versus dealer-koers behandelen we in onze mid-market-koersgids.
Cross rates berekenen met de Finexly-API
Doorgaans hoef je cross rates niet handmatig te berekenen. De Finexly-API accepteert elke basis en elke lijst doelvaluta's en levert de cross intern met consistente precisie. Hieronder hoe je hem in vier veelgebruikte stacks aanroept.
cURL
curl "https://api.finexly.com/v1/latest?base=BRL&symbols=INR,PHP,NGN" \
-H "Authorization: Bearer YOUR_API_KEY"Antwoord:
{
"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";In alle vier de voorbeelden doet de API de cross-rate-wiskunde voor je en levert nauwkeurige mid-market-waarden. Je kunt de basis veranderen in elk van de 170+ ondersteunde valuta's en in één call willekeurig veel doelen opvragen. Voor meer taalspecifieke patronen, zie onze Currency-API Python-tutorial, Node.js-integratiegids en PHP-gids.
Wanneer je cross rates beter zelf berekent
Zelfs met een goede API zijn er drie scenario's waarin je cross rates op je eigen data berekent in plaats van ze op te halen:
Backtesten van historische strategieën. Heb je jarenlange tick-data van EUR/USD en USD/JPY op je eigen servers, dan voorkomt lokaal EUR/JPY-berekenen miljoenen aanroepen naar een externe API. Gebruik de historische wisselkoers-endpoints om data te seedden en bereken de cross daarna in je backtest-engine.
Latency-gevoelige toepassingen. Algoritmische tradingsystemen rekenen cross rates vaak in het geheugen voor uit de onderliggende USD-paren omdat één bespaarde netwerk-roundtrip telt. De afweging is dat je verantwoordelijk wordt voor synchronisatie en versheid.
Eigen blended koersen. Sommige platforms noteren interne koersen die meerdere bronnen mengen of een markup toevoegen. De cross-berekening intern doen laat je je business-logica toepassen voordat de koers naar de klant gaat.
Past je use-case in geen van bovenstaande — een checkoutpagina, factuurtool, intern dashboard — laat de API de cross dan direct serveren. Het is nauwkeuriger, makkelijker te onderhouden en sneller te implementeren.
Veelvoorkomende valkuilen bij het berekenen van cross rates
Dit zijn de fouten die we het vaakst zien bij code reviews van ontwikkelaars.
Het verkeerde paar omkeren. Worden de twee bronparen in tegengestelde richting genoteerd (één met USD als basis, de ander met USD als quote), dan vermenigvuldig je makkelijk waar je had moeten omkeren en delen. Schrijf de koersen altijd uit als breuken en controleer dat de gemeenschappelijke valuta echt wegvalt.
Te vroeg afronden. Klassieke bug: rond elke bronkoers af op vier decimalen en vermenigvuldig dan. Cumulatieve afronding kan fouten van 0,01% tot 0,1% opleveren. Houd voor financiële berekeningen volledige precisie aan en rond pas op weergaveniveau af.
Verouderde koersen gebruiken. Zijn je twee bronkoersen 30 seconden uit elkaar opgehaald, dan is de daaruit opgebouwde cross intern inconsistent. Haal beide in één API-aanroep op (?symbols=A,B,C in de Finexly-API) zodat ze dezelfde tijdstempel hebben.
Door-de-week-data en weekenddata mengen. Forexmarkten zijn in het weekend dicht. Heeft je geplande job EUR/USD op vrijdag 17:01 EST opgehaald en USD/JPY op vrijdag 16:59 EST, dan meng je mogelijk live met bevroren data. Standaardiseer alle koersopvragingen op één markttijdstempel. We gaan hier dieper op in in onze forex-marktopeningstijdengids.
De spread negeren bij transacties. Cross rates op basis van mid-market-bronnen zijn prima voor weergave, maar zodra echt geld beweegt, heb je de bid of de ask nodig, afhankelijk van de richting van de transactie. Modelleer de spread expliciet in je code in plaats van te vertrouwen op de mid.
Veelgestelde vragen
Wat is een cross rate in eenvoudige termen?
Het is de wisselkoers tussen twee valuta's, berekend met behulp van de koers van elk tegen een derde gezamenlijke valuta — meestal de Amerikaanse dollar. Bijvoorbeeld: de EUR/JPY-koers wordt afgeleid uit EUR/USD en USD/JPY.
Worden EUR/JPY en GBP/JPY beschouwd als cross rates?
Ja, technisch wel. Ze bevatten de Amerikaanse dollar niet, dus volgens de strikte definitie zijn het cross rates. Beide paren worden echter zo veel direct verhandeld dat ze hun eigen genoteerde markten hebben en zich in de praktijk gedragen als major-paren.
Waarom zijn cross rates belangrijk?
Cross rates maken het mogelijk om valuta's te prijzen en te verhandelen waarvoor onderling geen liquide directe markt bestaat — het overgrote deel van alle wereldparen. Ze zijn essentieel voor grensoverschrijdende betalingen, multi-currency commerce en wereldwijde financiële analyse.
Kan ik een cross rate berekenen zonder de Amerikaanse dollar als brug?
Ja. Elke gezamenlijke valuta kan dienen als brug. EUR wordt soms gebruikt in Europees gerichte berekeningen, JPY in sommige Aziatische markten. USD is de standaard omdat er meer paren tegen worden genoteerd, wat een betere datakwaliteit oplevert.
Hoe nauwkeurig zijn berekende cross rates ten opzichte van directe marktnoteringen?
Voor liquide cross rates zoals EUR/JPY of GBP/CHF zijn berekende en directe koersen vrijwel identiek dankzij arbitrage. Voor illiquide cross rates zoals NGN/PHP is de berekende koers het enige beschikbare referentiepunt — er is geen aparte directe markt om mee te vergelijken.
Berekent Finexly cross rates automatisch?
Ja. Je vraagt een willekeurige basis en een willekeurige lijst doelvaluta's en de API levert consistente mid-market cross rates. Je hoeft zelf niets te berekenen of om te keren.
Aan de slag met Finexly
Klaar om realtime cross rates in je applicatie te gebruiken? Vraag je gratis Finexly-API-sleutel aan — geen creditcard nodig. In het gratis plan krijg je 1.000 requests per maand en je kunt opschalen via onze prijsplannen zodra je verkeer groeit. De API ondersteunt 170+ valuta's en berekent cross rates voor elk paar naadloos, zodat jij je kunt richten op je product in plaats van op FX-wiskunde.
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 →