MarketMaker.cc Team
量化研究与策略
MarketMaker.cc Team
量化研究与策略
《期货与现货之间的复杂套利链》系列第 4 部分
想象一个巨大的大厅,数百名交易员同时交换货币。每个人都有自己的汇率、手续费和习惯。你站在中心,手里拿着笔记本,试图找到一条能带来利润的兑换路线:美元兑换欧元,欧元兑换日元,日元兑换回美元——最后带走的钱比开始时多。这很容易迷失方向。但如果你把所有的汇率写在一张表里——一个矩阵中——突然间,混乱就有了结构。这个矩阵的特征值(Eigenvalues)会告诉你是否存在套利机会。热带代数(Tropical Algebra)会找到最佳路径。而张量分解(Tensor decompositions)将揭示肉眼不可见的模式。
在本文中,我们将从简单的汇率表出发,探讨高级多维分析方法——每一步都将由 Rust 实现支持。
加密货币汇率矩阵的可视化:图中的边代表交易对,突出显示的循环代表检测到的套利机会。
假设我们有 n 个资产:BTC、ETH、USDT、SOL 等。每对资产都可以以一定的汇率进行交换。汇率矩阵 R 是一个 n × n 的表格,其中元素 R[i][j] 表示用一个单位的资产 i 可以换取多少单位的资产 j。
一个格式良好的矩阵具有以下属性:
R[i][i] = 1——将一种资产兑换成它自己不会改变任何东西。R[i][j] > 0。R[i][j] * R[j][i] = 1。在 Rust 中,我们可以使用 nalgebra 来表示它:
use nalgebra::DMatrix;
/// 从一组交易对构建汇率矩阵
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);
// 对角线:兑换自己 = 1
for i in 0..n {
matrix[(i, i)] = 1.0;
}
// 填充已知汇率
for &((i, j), rate) in rates {
matrix[(i, j)] = rate;
// 如果没有直接汇率,则计算互惠汇率
if matrix[(j, i)] == 0.0 {
matrix[(j, i)] = 1.0 / rate;
}
}
matrix
}
这是构建所有其他内容的关键定理。
定理。 当且仅当对于任何资产循环 (i₁, i₂, ..., iₖ, i₁),沿该循环的汇率乘积等于 1 时,市场不存在套利机会:
R[i₁][i₂] * R[i₂][i₃] * ... * R[iₖ][i₁] = 1
等价表述:矩阵 R 无套利当且仅当其秩(Rank)为 1(在乘法意义上)。这意味着存在一个价格向量 p = (p₁, p₂, ..., pₙ),使得:
R[i][j] = pj / pi 对于所有 i, j
矩阵 R 可以分解为外积 R = (1/p) * pᵀ——这是一个秩为 1 的矩阵。如果实际矩阵偏离了秩 1,那么某个地方就隐藏着套利机会。
2007 年,Ming Ma 提出了一种检测套利机会的最优美方法。这个想法极其简单。
定理 (Ming Ma)。 令 R 为 n × n 汇率矩阵。如果市场无套利,则:
λ_max = n。v 代表平衡价格。为什么有效? 无套利矩阵的秩为 1,其跟踪(Trace,对角线元素之和)等于 n(因为每个 R[i][i] = 1)。对于秩为 1 的矩阵,唯一的非零特征值等于其跟踪。因此,λ_max = n。
套利准则:当且仅当 λ_max > n 时存在套利。 偏离程度 δ = λ_max - n 定量地估算了套利机会的规模。
这也许是我们研究中最美的发现。热带代数是一个代数系统,其中熟悉的运算被重新定义:
a ⊕ b = max(a, b)a ⊗ b = a + b在这个代数中的矩阵乘法会自动寻找具有最大权重之和的路径。这正是寻找最有利可图的套利循环所需要的。
取汇率的对数矩阵 L[i][j] = ln(R[i][j])。计算矩阵 L 的热带特征值 λ。
定理。 λ > 0 当且仅当存在套利。此外,exp(λ) 是最佳循环的利润倍数。
/// 热带 (max-plus) 矩阵乘法
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 {
// 热带乘法:用 max 代替 sum,用 + 代替 *
let val = a[(i, l)] + b[(l, j)];
if val > result[(i, j)] {
result[(i, j)] = val;
}
}
}
}
result
}
从确定性套利(直接价格差异)转向统计套利——寻找偏离因子模型的系统性偏差。
主成分分析 (PCA) 将资产收益分解为系统性因子和特有残差(Idiosyncratic residuals):
ri(t) = αi + Σk βik * Fk(t) + εi(t)
其中 Fk(t) 是第 k 个因子,βik 是负载(Loading),εi(t) 是残差——即套利信号。
关键问题:保留多少个因子?Marchenko-Pastur 分布描述了随机协方差矩阵的特征值谱。高于上限 的特征值带有真实信号,而位于上限之内的则是噪声。
加密货币套利同时涉及多个维度。汇率矩阵只是一个二维切片。真实的图景是一个张量(Tensor):
T(a, e, i) = 交易所 e 上资产 a 的工具 i 的价格/汇率
维度:
CP 分解 (CANDECOMP/PARAFAC) 将张量分解为秩 1 张量之和。残差 T - T_approx 揭示了特定价格/交易所/工具组合相对于整体市场因子结构被错误定价的异常情况。
从简单的表格到多维张量,线性代数为加密货币市场提供了一种正式语言。Rust 允许我们以 HFT 所需的速度执行这些复杂的模型。
在本系列的下一部分中,我们将探索用于套利的 GNN、Transformer 和 RL,了解神经网络如何学习交易。
正在处理高维信号?请在 GitHub 上查看我们的 基于张量的交易引擎。