Si tu aplicación necesita convertir reales brasileños a rupias indias, coronas noruegas a dólares de Singapur o cualquier par donde el dólar estadounidense no esté en ninguno de los dos lados, estás a punto de hacer matemáticas de tipo de cambio cruzado. La mayoría de las APIs de divisas y los mercados forex cotizan miles de pares contra el dólar, pero solo unos pocos pares se negocian directamente entre dos monedas no-USD. Todo lo demás —y esa es la cola larga— se calcula como una tasa cruzada.
Esta guía explica qué es un tipo de cambio cruzado, la fórmula en sus tres formas, ejemplos prácticos que puedes verificar con una calculadora y código de calidad de producción en JavaScript, Python, PHP y cURL. También cubriremos los errores que provocan desviaciones del 1% en sistemas reales: redondeo, spreads bid-ask, tasas obsoletas y errores de inversión.
¿Qué es un tipo de cambio cruzado?
Un tipo de cambio cruzado es el precio de una moneda expresado en otra moneda cuando ninguna de ellas es la moneda local o de referencia en las cotizaciones originales. En la práctica, casi siempre significa un par de divisas que no incluye el dólar estadounidense, derivado de dos pares que sí lo incluyen.
Por ejemplo, la tasa EUR/JPY es técnicamente una tasa cruzada. Aunque EUR/JPY es uno de los pares más activamente negociados del mundo y tiene su propio mercado cotizado, la lógica subyacente sigue siendo: toma EUR/USD, toma USD/JPY, multiplica, y obtienes el mismo número que un banco de Tokio te cotizaría. La cotización de mercado y la cruzada calculada están ancladas entre sí mediante arbitraje: si alguna vez se separaran, los traders intervendrían hasta volver a igualarlas.
Las monedas sin un mercado directo líquido —digamos, naira nigeriano frente a peso filipino (NGN/PHP)— existen únicamente como tasas cruzadas. No hay un mercado NGN/PHP en ningún sentido significativo. Quien cotice ese par lo está calculando a partir de NGN/USD y USD/PHP.
La definición técnica aclara la distinción:
- Una tasa directa es la que se cotiza activamente en un mercado o feed agregado.
- Una tasa cruzada es la que se calcula a partir de dos o más tasas directas que comparten una moneda base común (normalmente USD).
La mayoría de los proveedores de API, incluido Finexly, sirven tasas cruzadas de forma transparente: pides cualquier par que quieras y el motor maneja la matemática internamente. Aun así, conocer cómo funciona esa matemática importa porque afecta a cómo manejas la precisión, los spreads y los casos límite.
Por qué importan las tasas cruzadas para los desarrolladores
Las tasas cruzadas aparecen en tres categorías de aplicaciones:
Pagos transfronterizos y remesas. Un freelancer filipino que factura a un cliente brasileño quiere saber cuántos BRL valen sus tarifas denominadas en PHP. No hay un mercado directo BRL/PHP: la plataforma lo calcula a través de USD.
E-commerce multidivisa. Un comerciante noruego que muestra precios a un cliente de Singapur necesita NOK/SGD. Stripe, Adyen y la mayoría de los procesadores de pago calculan ese cruce internamente y luego añaden su margen de FX.
Análisis financiero y trading. Los sistemas cuantitativos cubren exposiciones en carteras denominadas en muchas monedas. Para conocer tu exposición neta en EUR, necesitas convertir posiciones en MXN, INR, ZAR y BRL a EUR: todos cálculos cruzados.
En cada caso, la calidad de tu tasa cruzada depende enteramente de la calidad y frescura de los dos pares USD subyacentes. Un EUR/USD de hace 2 segundos combinado con un USD/JPY de hace 60 segundos produce un cruce que está equivocado por todo lo que el JPY se haya movido en ese intervalo. Para una introducción a cómo se obtienen y actualizan las tasas, consulta nuestra guía sobre cómo funcionan los tipos de cambio.
La fórmula del tipo de cambio cruzado
Hay tres casos, dependiendo de cómo se coticen los dos pares de origen. El principio general es simple: cuando escribes las tasas como fracciones, la moneda común debe cancelarse.
Caso 1: USD es la moneda cotizada en ambos pares
Supongamos que tienes:
- EUR/USD = 1.0850 (1 EUR compra 1.0850 USD)
- GBP/USD = 1.2620 (1 GBP compra 1.2620 USD)
Quieres EUR/GBP. La fórmula es:
EUR/GBP = (EUR/USD) / (GBP/USD)
EUR/GBP = 1.0850 / 1.2620 = 0.8598Por lo tanto, 1 euro compra 0.8598 libras. Ambas cotizaciones de origen tienen USD a la derecha, así que dividimos.
Caso 2: USD es la moneda base en ambos pares
Supongamos que tienes:
- USD/JPY = 152.30
- USD/CHF = 0.8920
Quieres JPY/CHF. La fórmula es:
JPY/CHF = (USD/CHF) / (USD/JPY)
JPY/CHF = 0.8920 / 152.30 = 0.005857Por lo tanto, 1 yen compra 0.005857 francos suizos. Ambas cotizaciones de origen tienen USD a la izquierda, así que dividimos, pero con la razón invertida.
Caso 3: USD es base en uno y cotizado en el otro (mixto)
Este es el caso más común y donde ocurren los errores. Supongamos que tienes:
- EUR/USD = 1.0850 (USD es la cotización)
- USD/JPY = 152.30 (USD es la base)
Quieres EUR/JPY. La fórmula es:
EUR/JPY = (EUR/USD) × (USD/JPY)
EUR/JPY = 1.0850 × 152.30 = 165.25Por lo tanto, 1 euro compra 165.25 yenes. Los dólares se cancelan limpiamente: euros-por-dólar multiplicado por dólares-por-yen deja euros-por-yen. Multiplica en el caso mixto.
La regla práctica: escribe los pares como fracciones, alinéalos para que el USD se cancele y multiplica o divide en consecuencia. La moneda que quede como numerador se convierte en la base de tu tasa cruzada.
Ejemplos prácticos que puedes verificar
Usa cualquier feed de divisas importante para verificar estos números. Los valores exactos varían con el mercado; lo que importa es la estructura.
Ejemplo 1: EUR/JPY (caso mixto)
Dados EUR/USD = 1.0850 y USD/JPY = 152.30:
EUR/JPY = 1.0850 × 152.30 = 165.2455Ejemplo 2: GBP/CHF (caso mixto)
Dados GBP/USD = 1.2620 y USD/CHF = 0.8920:
GBP/CHF = 1.2620 × 0.8920 = 1.1257Ejemplo 3: AUD/NZD (ambos cotizados contra USD)
Dados AUD/USD = 0.6630 y NZD/USD = 0.6010:
AUD/NZD = 0.6630 / 0.6010 = 1.1031Por lo tanto, 1 dólar australiano compra 1.1031 dólares neozelandeses.
Ejemplo 4: BRL/INR (ambos cotizados con USD como base)
Dados USD/BRL = 5.0850 y USD/INR = 84.20:
BRL/INR = (USD/INR) / (USD/BRL) = 84.20 / 5.0850 = 16.561Por lo tanto, 1 real brasileño compra 16.561 rupias indias.
Para un repaso de los códigos estandarizados de tres letras usados aquí, consulta nuestra guía de códigos de divisas ISO 4217.
Tasas recíprocas e inversión de pares
A veces tu feed de datos te da USD/EUR pero necesitas EUR/USD. La recíproca es:
EUR/USD = 1 / (USD/EUR)Si USD/EUR = 0.9217, entonces EUR/USD = 1 / 0.9217 = 1.0850.
Dos puntos prácticos sobre las recíprocas:
Primero, el redondeo se acumula. Si redondeas una tasa a 4 decimales, luego tomas su recíproca y vuelves a redondear, puedes introducir errores del 0.01% o más. Para aplicaciones de alta precisión, mantén la recíproca en precisión flotante completa hasta el paso final de visualización. Cubrimos estrategias de precisión en detalle en nuestro post sobre mejores prácticas de caché y manejo de errores en APIs de divisas.
Segundo, bid y ask se invierten al recíproco. Si GBP/USD tiene un bid de 1.2618 y un ask de 1.2622, entonces USD/GBP tiene un bid de 1/1.2622 = 0.7923 y un ask de 1/1.2618 = 0.7925. El bid de un par es el recíproco del ask del otro, no del bid.
Spread bid-ask en tasas cruzadas
Cuando construyes una tasa cruzada a partir de dos pares subyacentes, los spreads se acumulan.
Supongamos:
- EUR/USD tiene un bid de 1.0848 y un ask de 1.0852 (spread de 4 pips)
- USD/JPY tiene un bid de 152.27 y un ask de 152.33 (spread de 6 pips)
El cruce EUR/JPY implícito tiene:
Bid = 1.0848 × 152.27 = 165.183
Ask = 1.0852 × 152.33 = 165.309Eso es un spread de 12.6 pips en el cruce, más amplio que cualquiera de los pares de origen. En la práctica, el mercado cotizado directamente de EUR/JPY tiene un spread más ajustado que este calculado porque los pares cruzados líquidos tienen sus propios formadores de mercado.
La conclusión para los desarrolladores es que las tasas cruzadas mid-market calculadas a partir de dos pares USD son estimaciones del verdadero mercado directo. Suficientemente buenas para mostrar precios en un checkout, correctas para análisis, pero no lo que tu banco o broker realmente te ejecutará. La distinción mid-market versus tasa de dealer está cubierta en nuestra guía de tasa mid-market.
Cómo calcular tasas cruzadas con la API de Finexly
Normalmente no necesitas calcular tasas cruzadas a mano. La API de Finexly acepta cualquier base y cualquier lista de monedas objetivo y sirve el cruce internamente con precisión consistente. Aquí cómo usarla en cuatro stacks comunes.
cURL
curl "https://api.finexly.com/v1/latest?base=BRL&symbols=INR,PHP,NGN" \
-H "Authorization: Bearer YOUR_API_KEY"Respuesta:
{
"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";En los cuatro ejemplos, la API hace los cálculos cruzados por ti y devuelve valores mid-market precisos. Puedes cambiar la base a cualquiera de las más de 170 monedas soportadas y solicitar cualquier número de objetivos en una sola llamada. Para más patrones específicos por lenguaje, consulta nuestro tutorial de API de divisas en Python, guía de integración de Node.js y guía de PHP.
Cuándo deberías calcular tasas cruzadas tú mismo
Incluso con una buena API, hay tres escenarios donde calculas tasas cruzadas sobre tus propios datos en lugar de obtenerlas:
Backtesting de estrategias históricas. Si tienes años de datos tick a tick de EUR/USD y USD/JPY en tus propios servidores, calcular EUR/JPY localmente evita golpear una API externa millones de veces. Usa los endpoints de tasas históricas para sembrar los datos y luego deriva los cruces en tu motor de backtesting.
Aplicaciones sensibles a la latencia. Los sistemas de trading algorítmico a menudo precalculan cruces a partir de pares USD subyacentes en memoria porque ahorrar un round-trip de red importa. La compensación es que asumes la responsabilidad de la sincronización y la frescura.
Tasas mezcladas personalizadas. Algunas plataformas cotizan tasas internas que mezclan múltiples fuentes o aplican un margen. Hacer las cuentas cruzadas internamente te permite aplicar tu lógica de negocio antes de exponer la tasa a los clientes.
Si tu caso de uso no es ninguno de los anteriores —una página de checkout, una herramienta de facturación, un panel interno— deja que la API sirva el cruce directamente. Será más preciso, más fácil de mantener y más rápido de implementar.
Errores comunes al calcular tasas cruzadas
Estos son los errores que vemos con más frecuencia al revisar código de desarrolladores.
Invertir el par equivocado. Cuando los dos pares de origen se cotizan en direcciones opuestas (uno con USD como base, otro con USD como cotización), es fácil multiplicar cuando deberías haber invertido y dividido. Siempre escribe las tasas como fracciones y confirma que la moneda común se cancela.
Redondear demasiado pronto. Un bug común: redondear cada tasa de origen a cuatro decimales y luego multiplicar. El redondeo compuesto puede producir errores del 0.01% al 0.1%. Para cálculos financieros, mantén la precisión completa y redondea solo en el momento de mostrar.
Usar tasas obsoletas. Si tus dos tasas de origen se obtuvieron con 30 segundos de diferencia, el cruce construido a partir de ellas es internamente inconsistente. Obtén ambas en una sola llamada API (que es lo que hace ?symbols=A,B,C en la API de Finexly) para que tengan la misma marca temporal.
Mezclar datos entre semana y fin de semana. Los mercados forex cierran los fines de semana. Si tu trabajo programado obtuvo EUR/USD el viernes a las 5:01 PM EST y USD/JPY el viernes a las 4:59 PM EST, podrías estar mezclando datos vivos y obsoletos. Estandariza todas las obtenciones de tasas contra una única marca temporal de mercado. Profundizamos en esto en nuestra guía de horarios del mercado forex.
Ignorar el spread para uso transaccional. Las tasas cruzadas calculadas a partir de fuentes mid-market son buenas para mostrar, pero si se mueve dinero real, necesitas el bid o el ask según la dirección del trade. Construye el modelado de spread explícitamente en tu código en lugar de confiar en el mid.
Preguntas frecuentes
¿Qué es un tipo de cambio cruzado en términos simples?
Es el tipo de cambio entre dos monedas, calculado usando el tipo de cambio de cada una contra una tercera moneda común, normalmente el dólar estadounidense. Por ejemplo, la tasa EUR/JPY se deriva de EUR/USD y USD/JPY.
¿Se consideran EUR/JPY y GBP/JPY tasas cruzadas?
Sí, técnicamente. No incluyen el dólar estadounidense, así que por la definición estricta son cruces. Sin embargo, ambos pares son tan negociados directamente que tienen sus propios mercados cotizados y se comportan como pares principales en la práctica.
¿Por qué son importantes las tasas cruzadas?
Las tasas cruzadas hacen posible cotizar y operar monedas que no tienen un mercado directo líquido entre ellas: la mayoría de los pares del mundo. Son esenciales para pagos transfronterizos, comercio multidivisa y análisis financiero global.
¿Puedo calcular una tasa cruzada sin usar el dólar estadounidense como puente?
Sí. Cualquier moneda común funciona como puente. EUR se usa a veces en cálculos centrados en Europa, y JPY se usa en algunos mercados asiáticos. USD es el predeterminado porque más pares se cotizan contra él, dando mejor calidad de datos.
¿Qué tan precisas son las tasas cruzadas calculadas en comparación con las cotizaciones de mercado directas?
Para cruces líquidos como EUR/JPY o GBP/CHF, las tasas calculadas y directas son casi idénticas debido al arbitraje. Para cruces ilíquidos como NGN/PHP, la tasa calculada es el único punto de referencia disponible: no hay un mercado directo separado para comparar.
¿Finexly calcula las tasas cruzadas automáticamente?
Sí. Solicitas cualquier base y cualquier lista de monedas objetivo, y la API sirve tasas cruzadas mid-market consistentes. No necesitas calcular ni invertir nada por tu cuenta.
Empieza con Finexly
¿Listo para usar tasas cruzadas en tiempo real en tu aplicación? Obtén tu clave gratuita de la API de Finexly: sin tarjeta de crédito. Obtienes 1.000 solicitudes al mes en el plan gratuito y puedes escalar a través de nuestros planes de precios a medida que tu tráfico crece. La API soporta más de 170 monedas y calcula tasas cruzadas para cualquier par sin problemas, para que te enfoques en tu producto en lugar de en matemáticas 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 →