← Voltar aos artigos
February 26, 2026
5 min read

Matrizes, tensores e álgebra tropical: álgebra linear para detecção de arbitragem

Matrizes, tensores e álgebra tropical: álgebra linear para detecção de arbitragem
#arbitrage
#linear algebra
#tropical algebra
#matrices
#tensors
#rust
#cryptocurrency
#optimization
#PCA
#eigenvalues
🔗
Part 3 of 6 · Collection
Complex Arbitrage in Rust

Parte 4 da série "Cadeias complexas de arbitragem entre futuros e spot"

Imagine um salão enorme onde centenas de traders trocam moedas simultaneamente. Cada um tem suas próprias taxas, tarifas e particularidades. Você está no centro com um caderno, tentando encontrar uma rota de troca que traga lucro: dólares para euros, euros para ienes, ienes de volta para dólares—e sair com mais do que começou. É fácil se perder. Mas, se você anotar todas as taxas em uma tabela—uma matriz—o caos de repente ganha estrutura. Os autovalores dessa matriz dirão se existe arbitragem. A álgebra tropical encontrará a rota ótima. E as decomposições tensoriais revelarão padrões invisíveis a olho nu.

Neste artigo, faremos uma jornada de uma simples tabela de taxas de câmbio até métodos avançados de análise multidimensional—e cada etapa será apoiada por uma implementação em Rust.

Matriz de taxas de câmbio e ciclos de arbitragem Visualização da matriz de taxas de câmbio entre criptomoedas: as arestas do grafo representam pares de negociação, e o ciclo destacado representa uma oportunidade de arbitragem detectada.

Matriz de taxas de câmbio com decomposição espectral de autovalores

1. A matriz de taxas de câmbio: os fundamentos

1.1 Do caos à tabela

Suponha que temos n ativos: BTC, ETH, USDT, SOL, etc. Cada par pode ser trocado a uma determinada taxa. A Matriz de Taxas de Câmbio R é uma tabela n × n na qual o elemento R[i][j] mostra quantas unidades do ativo j obtemos por uma unidade do ativo i.

Propriedades de uma matriz bem formada:

  • Diagonal: R[i][i] = 1—trocar um ativo por si mesmo não altera nada.
  • Positividade: R[i][j] > 0 para todos os pares.
  • Reciprocidade (em um mercado ideal): R[i][j] * R[j][i] = 1.

Em Rust, podemos representar isso 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 A condição de ausência de arbitragem

Aqui está o teorema-chave sobre o qual tudo o mais é construído.

Teorema. Um mercado está livre de arbitragem se e somente se, para qualquer ciclo de ativos (i₁, i₂, ..., iₖ, i₁), o produto das taxas de câmbio ao longo do ciclo for igual a um:

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

Formulação equivalente: uma matriz R está livre de arbitragem se e somente se seu posto é 1 (em sentido multiplicativo). Isso significa que existe um vetor de preços p = (p₁, p₂, ..., pₙ) tal que:

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

A matriz R se decompõe como um produto externo R = (1/p) * pᵀ—e essa é uma matriz de posto 1. Se a matriz real se desvia do posto 1—há uma oportunidade de arbitragem escondida em algum lugar.

2. O método dos autovalores: arbitragem em O(n³)

2.1 O teorema de Ming Ma

Uma das abordagens mais elegantes para a detecção de arbitragem foi proposta por Ming Ma em 2007. A ideia é brilhantemente simples.

Teorema (Ming Ma). Seja R uma matriz de taxas de câmbio n × n. Se o mercado está livre de arbitragem, então:

  1. O maior autovalor λ_max = n.
  2. Todos os demais autovalores são iguais a zero.
  3. O autovetor correspondente v representa os preços de equilíbrio.

Por que isso funciona? Uma matriz livre de arbitragem tem posto 1, e seu traço (a soma dos elementos diagonais) é igual a n (porque cada R[i][i] = 1). Para uma matriz de posto 1, o único autovalor não nulo é igual ao traço. Portanto, λ_max = n.

Critério de arbitragem: existe arbitragem se e somente se λ_max > n. O desvio δ = λ_max - n estima quantitativamente a magnitude da oportunidade de arbitragem.

Visualização da álgebra tropical (max-plus)

3. Álgebra tropical (max-plus): o método mais elegante

3.1 Quando a soma se torna máximo

Esta é talvez a descoberta mais bela do nosso estudo. A álgebra tropical é um sistema algébrico em que operações familiares são redefinidas:

  • "Adição": a ⊕ b = max(a, b)
  • "Multiplicação": a ⊗ b = a + b

A multiplicação de matrizes nessa álgebra busca automaticamente o caminho com a maior soma de pesos. Isso é exatamente o que é necessário para encontrar o ciclo de arbitragem mais lucrativo.

3.2 Autovalor tropical e arbitragem

Tome a log-matriz das taxas L[i][j] = ln(R[i][j]). Calcule o autovalor tropical λ da matriz L.

Teorema. λ > 0 se e somente se existir arbitragem. Além disso, exp(λ) é o multiplicador de lucro do melhor 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 e modelos de fatores: arbitragem estatística

Passamos da arbitragem determinística (discrepâncias diretas de preço) para a arbitragem estatística—a busca por desvios sistemáticos em relação a um modelo de fatores.

A Análise de Componentes Principais (PCA) decompõe os retornos dos ativos em fatores sistemáticos e resíduos idiossincráticos:

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

onde Fk(t) é o k-ésimo fator, βik é a carga (loading) e εi(t) é o resíduo—o sinal de arbitragem.

4.1 Teoria das matrizes aleatórias (RMT)

Pergunta-chave: quantos fatores manter? A distribuição de Marchenko-Pastur descreve o espectro de autovalores de uma matriz de covariância aleatória. Autovalores acima do limite superior λ+λ_+ carregam sinais reais, enquanto os que estão dentro do limite são ruído.

Visualização de tensor 3D para arbitragem multidimensional

5. Métodos tensoriais: a terceira dimensão da arbitragem

A arbitragem de criptomoedas envolve múltiplas dimensões simultaneamente. A matriz de taxas é apenas um corte 2D. A imagem real é um Tensor:

T(a, e, i) = preço/taxa para o ativo a na exchange e para o instrumento i

Dimensões:

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

A decomposição CP (CANDECOMP/PARAFAC) fatoriza o tensor em uma soma de tensores de posto 1. Os resíduos T - T_approx revelam anomalias em que combinações específicas de ativo/exchange/instrumento estão mal precificadas em relação à estrutura fatorial geral do mercado.

Conclusão

De tabelas simples a tensores multidimensionais, a álgebra linear fornece uma linguagem formal para o mercado de criptomoedas. O Rust nos permite executar esses modelos complexos com a velocidade exigida pelo HFT.

Na próxima parte, exploraremos GNN, Transformers e RL para arbitragem, observando como as redes neurais aprendem a negociar.


Processando sinais de alta dimensionalidade? Confira nosso motor de trading baseado em tensores no 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

Fique à frente do mercado

Assine nossa newsletter para insights exclusivos sobre trading com IA, análises de mercado e atualizações da plataforma.

Respeitamos sua privacidade. Cancele a inscrição a qualquer momento.