Matrizes, tensores e álgebra tropical: álgebra linear para detecção de arbitragem
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.
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.

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] > 0para 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:
- O maior autovalor
λ_max = n. - Todos os demais autovalores são iguais a zero.
- O autovetor correspondente
vrepresenta 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.

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.

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.
Authors
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.