← Volver a los artículos
February 26, 2026
5 min de lectura

Matrices, tensores y álgebra tropical: álgebra lineal para la detección de arbitraje

Matrices, tensores y álgebra tropical: álgebra lineal para la detección de arbitraje
#arbitrage
#linear algebra
#tropical algebra
#matrices
#tensors
#rust
#cryptocurrency
#optimization
#PCA
#eigenvalues
🔗
Part 3 of 6 · Collection
Complex Arbitrage in Rust

Parte 4 de la serie "Cadenas de arbitraje complejas entre futuros y spot"

Imagina un salón enorme donde cientos de traders intercambian divisas simultáneamente. Cada uno tiene sus propias tasas, comisiones y peculiaridades. Tú estás en el centro con un cuaderno, tratando de encontrar una ruta de cambio que genere beneficio: dólares a euros, euros a yenes, yenes de vuelta a dólares—y salir con más de lo que entraste. Es fácil perderse. Pero si anotas todas las tasas en una tabla—una matriz—de repente el caos adquiere estructura. Los autovalores de esta matriz te dirán si existe arbitraje. El álgebra tropical encontrará la ruta óptima. Y las descomposiciones tensoriales revelarán patrones invisibles a simple vista.

En este artículo recorreremos el camino desde una simple tabla de tipos de cambio hasta métodos avanzados de análisis multidimensional—y cada paso estará respaldado por una implementación en Rust.

Matriz de tipos de cambio y ciclos de arbitraje Visualización de la matriz de tipos de cambio entre criptomonedas: las aristas del grafo representan pares de trading, y el ciclo resaltado representa una oportunidad de arbitraje detectada.

Matriz de tipos de cambio con descomposición espectral de autovalores

1. La matriz de tipos de cambio: los fundamentos

1.1 Del caos a la tabla

Supongamos que tenemos n activos: BTC, ETH, USDT, SOL, etc. Cada par puede intercambiarse a una tasa determinada. La Matriz de Tipos de Cambio R es una tabla n × n donde el elemento R[i][j] indica cuántas unidades del activo j obtenemos por una unidad del activo i.

Propiedades de una matriz bien formada:

  • Diagonal: R[i][i] = 1—cambiar un activo por sí mismo no cambia nada.
  • Positividad: R[i][j] > 0 para todos los pares.
  • Reciprocidad (en un mercado ideal): R[i][j] * R[j][i] = 1.

En Rust, podemos representar esto usando nalgebra:

use nalgebra::DMatrix;

/// Builds an exchange rate matrix from a set of trading pairs
fn build_exchange_rate_matrix(
    assets: &[&str],
    rates: &[((usize, usize), f64)],
) -> DMatrix<f64> {
    let n = assets.len();
    let mut matrix = DMatrix::from_element(n, n, 0.0);

    // Diagonal: exchange for self = 1
    for i in 0..n {
        matrix[(i, i)] = 1.0;
    }

    // Fill known rates
    for &((i, j), rate) in rates {
        matrix[(i, j)] = rate;
        // Reciprocal rate (if there is no direct one)
        if matrix[(j, i)] == 0.0 {
            matrix[(j, i)] = 1.0 / rate;
        }
    }

    matrix
}

1.2 La condición de no arbitraje

Este es el teorema clave sobre el que se construye todo lo demás.

Teorema. Un mercado está libre de arbitraje si y solo si, para cualquier ciclo de activos (i₁, i₂, ..., iₖ, i₁), el producto de los tipos de cambio a lo largo del ciclo es igual a uno:

R[i₁][i₂] * R[i₂][i₃] * ... * R[iₖ][i₁] = 1

Formulación equivalente: una matriz R está libre de arbitraje si y solo si su rango es 1 (en sentido multiplicativo). Esto significa que existe un vector de precios p = (p₁, p₂, ..., pₙ) tal que:

R[i][j] = pj / pi   para todo i, j

La matriz R se descompone como un producto externo R = (1/p) * pᵀ—y esto es una matriz de rango 1. Si la matriz real se desvía del rango 1—hay una oportunidad de arbitraje escondida en algún lugar.

2. El método de autovalores: arbitraje en O(n³)

2.1 El teorema de Ming Ma

Uno de los enfoques más elegantes para la detección de arbitraje fue propuesto por Ming Ma en 2007. La idea es brillantemente simple.

Teorema (Ming Ma). Sea R una matriz de tipos de cambio n × n. Si el mercado está libre de arbitraje, entonces:

  1. El mayor autovalor λ_max = n.
  2. Todos los demás autovalores son iguales a cero.
  3. El autovector correspondiente v representa los precios de equilibrio.

¿Por qué funciona? Una matriz libre de arbitraje tiene rango 1, y su traza (la suma de los elementos diagonales) es igual a n (porque cada R[i][i] = 1). Para una matriz de rango 1, el único autovalor distinto de cero es igual a la traza. Por lo tanto, λ_max = n.

Criterio de arbitraje: existe arbitraje si y solo si λ_max > n. La desviación δ = λ_max - n estima cuantitativamente la magnitud de la oportunidad de arbitraje.

Visualización del álgebra tropical (max-plus)

3. Álgebra tropical (max-plus): el método más elegante

3.1 Cuando la suma se convierte en máximo

Este es quizás el hallazgo más hermoso de nuestro estudio. El álgebra tropical es un sistema algebraico donde las operaciones familiares se redefinen:

  • "Suma": a ⊕ b = max(a, b)
  • "Multiplicación": a ⊗ b = a + b

La multiplicación de matrices en esta álgebra busca automáticamente el camino con la suma máxima de pesos. Esto es exactamente lo que se necesita para encontrar el ciclo de arbitraje más rentable.

3.2 Autovalor tropical y arbitraje

Tomemos la matriz logarítmica de tasas L[i][j] = ln(R[i][j]). Calculemos el autovalor tropical λ de la matriz L.

Teorema. λ > 0 si y solo si existe arbitraje. Además, exp(λ) es el multiplicador de beneficio del mejor ciclo.

/// Tropical (max-plus) matrix multiplication
fn tropical_matmul(a: &DMatrix<f64>, b: &DMatrix<f64>) -> DMatrix<f64> {
    let n = a.nrows();
    let m = b.ncols();
    let k = a.ncols();
    let mut result = DMatrix::from_element(n, m, f64::NEG_INFINITY);

    for i in 0..n {
        for j in 0..m {
            for l in 0..k {
                // Tropical multiplication: max instead of sum, + instead of *
                let val = a[(i, l)] + b[(l, j)];
                if val > result[(i, j)] {
                    result[(i, j)] = val;
                }
            }
        }
    }
    result
}

4. PCA y modelos factoriales: arbitraje estadístico

Pasamos del arbitraje determinista (discrepancias directas de precios) al arbitraje estadístico—la búsqueda de desviaciones sistemáticas respecto a un modelo factorial.

El Análisis de Componentes Principales (PCA) descompone los rendimientos de los activos en factores sistemáticos y residuos idiosincráticos:

ri(t) = αi + Σk βik * Fk(t) + εi(t)

donde Fk(t) es el k-ésimo factor, βik es la carga (loading) y εi(t) es el residuo—la señal de arbitraje.

4.1 Teoría de matrices aleatorias (RMT)

Pregunta clave: ¿cuántos factores conservar? La distribución de Marchenko-Pastur describe el espectro de autovalores para una matriz de covarianza aleatoria. Los autovalores por encima del límite superior λ+λ_+ contienen señales reales, mientras que los que están dentro del límite son ruido.

Visualización de tensor 3D para arbitraje multidimensional

5. Métodos tensoriales: la tercera dimensión del arbitraje

El arbitraje de criptomonedas involucra múltiples dimensiones simultáneamente. La matriz de tasas es solo un corte 2D. La imagen real es un Tensor:

T(a, e, i) = precio/tasa para el activo a en el exchange e para el instrumento i

Dimensiones:

  • Modo 1 (Activos): BTC, ETH, SOL, ...
  • Modo 2 (Exchanges): Binance, Kraken, Coinbase, ...
  • Modo 3 (Instrumentos): Spot, Perpetual, Futures, ...

La descomposición CP (CANDECOMP/PARAFAC) factoriza el tensor en una suma de tensores de rango 1. Los residuos T - T_approx revelan anomalías donde combinaciones específicas de activo/exchange/instrumento tienen un precio incorrecto respecto a la estructura factorial general del mercado.

Conclusión

De simples tablas a tensores multidimensionales, el álgebra lineal proporciona un lenguaje formal para el mercado de criptomonedas. Rust nos permite ejecutar estos modelos complejos con la velocidad requerida para el HFT.

En la próxima parte exploraremos GNN, Transformers y RL para arbitraje, viendo cómo las redes neuronales aprenden a operar.


¿Procesando señales de alta dimensionalidad? Consulta nuestro motor de trading basado en tensores en GitHub.

blog.disclaimer

Authors

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

Mantente a la vanguardia

Suscríbete a nuestro boletín para recibir información exclusiva sobre trading con IA, análisis de mercado y actualizaciones de la plataforma.

Respetamos tu privacidad. Puedes darte de baja en cualquier momento.