المصفوفات والموتِّرات والجبر الاستوائي: الجبر الخطي لاكتشاف المراجحة
الجزء الرابع من سلسلة "سلاسل المراجحة المعقدة بين العقود الآجلة والفورية"
تخيّل قاعة ضخمة يتبادل فيها مئات المتداولين العملات في آنٍ واحد. لكلٍّ منهم أسعار صرفه ورسومه وخصوصياته. تقف في المركز وبيدك دفتر، تحاول إيجاد مسار تبادل يحقق ربحاً: من الدولارات إلى اليورو، ثم من اليورو إلى الين، ثم من الين إلى الدولارات مجدداً — وتخرج بأكثر مما بدأت. من السهل أن تضيع. لكن إذا كتبت جميع الأسعار في جدول — أي مصفوفة — تكتسب الفوضى بنيةً فجأة. ستخبرك القيم الذاتية لهذه المصفوفة بوجود المراجحة. وسيجد الجبر الاستوائي المسار الأمثل. أما تحليلات الموتِّرات فستكشف أنماطاً غير مرئية بالعين المجردة.
في هذا المقال، سنرتحل من جدول أسعار صرف بسيط إلى أساليب تحليل متعددة الأبعاد متقدمة — وكل خطوة مدعومة بتطبيق عملي في Rust.
تصوير مرئي لمصفوفة أسعار الصرف بين العملات المشفرة: حواف الرسم البياني تمثل أزواج التداول، والدورة المميّزة تمثل فرصة مراجحة مكتشفة.

1. مصفوفة أسعار الصرف: الأساس
1.1 من الفوضى إلى الجدول
لنفترض أن لدينا n أصلاً: BTC وETH وUSDT وSOL وغيرها. يمكن تبادل كل زوج بسعر معين. مصفوفة أسعار الصرف R هي جدول n × n حيث يوضح العنصر R[i][j] عدد وحدات الأصل j التي نحصل عليها مقابل وحدة واحدة من الأصل i.
خصائص المصفوفة المُنسّقة:
- القُطر:
R[i][i] = 1— تبادل أصل بنفسه لا يغيّر شيئاً. - الموجبية:
R[i][j] > 0لجميع الأزواج. - التبادلية (في سوق مثالي):
R[i][j] * R[j][i] = 1.
في Rust، يمكننا تمثيل ذلك باستخدام 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 شرط عدم المراجحة
إليك النظرية الأساسية التي يُبنى عليها كل شيء آخر.
نظرية. السوق خالٍ من المراجحة إذا وفقط إذا كان لأي دورة من الأصول (i₁, i₂, ..., iₖ, i₁)، حاصل ضرب أسعار الصرف على طول الدورة يساوي واحداً:
R[i₁][i₂] * R[i₂][i₃] * ... * R[iₖ][i₁] = 1
صياغة مكافئة: المصفوفة R خالية من المراجحة إذا وفقط إذا كانت رتبتها 1 (بالمعنى الضربي). أي أنه يوجد متجه أسعار p = (p₁, p₂, ..., pₙ) بحيث:
R[i][j] = pj / pi for all i, j
تتحلل المصفوفة R كجداء خارجي R = (1/p) * pᵀ — وهذه مصفوفة من الرتبة 1. إذا انحرفت المصفوفة الفعلية عن الرتبة 1 — فهناك فرصة مراجحة مختبئة في مكان ما.
2. طريقة القيم الذاتية: المراجحة في O(n³)
2.1 نظرية Ming Ma
أحد أكثر المقاربات أناقةً لاكتشاف المراجحة اقترحها Ming Ma في عام 2007. الفكرة بسيطة بشكل رائع.
نظرية (Ming Ma). لتكن R مصفوفة أسعار صرف n × n. إذا كان السوق خالياً من المراجحة، فإن:
- أكبر قيمة ذاتية
λ_max = n. - جميع القيم الذاتية الأخرى تساوي صفراً.
- المتجه الذاتي المقابل
vيمثل أسعار التوازن.
لماذا تعمل؟ المصفوفة الخالية من المراجحة رتبتها 1، وأثرها (مجموع العناصر القُطرية) يساوي n (لأن كل R[i][i] = 1). بالنسبة لمصفوفة من الرتبة 1، القيمة الذاتية الوحيدة غير الصفرية تساوي الأثر. لذلك λ_max = n.
معيار المراجحة: توجد مراجحة إذا وفقط إذا كان λ_max > n. الانحراف δ = λ_max - n يقدّر كمّياً حجم فرصة المراجحة.

3. الجبر الاستوائي (Max-Plus): الطريقة الأكثر أناقة
3.1 عندما يصبح الجمع أقصى قيمة
ربما يكون هذا أجمل اكتشاف في دراستنا. الجبر الاستوائي هو نظام جبري تُعاد فيه تعريف العمليات المألوفة:
- "الجمع":
a ⊕ b = max(a, b) - "الضرب":
a ⊗ b = a + b
ضرب المصفوفات في هذا الجبر يبحث تلقائياً عن المسار ذي أقصى مجموع أوزان. وهذا تماماً ما نحتاجه لإيجاد دورة المراجحة الأكثر ربحية.
3.2 القيمة الذاتية الاستوائية والمراجحة
خذ المصفوفة اللوغاريتمية للأسعار L[i][j] = ln(R[i][j]). احسب القيمة الذاتية الاستوائية λ للمصفوفة L.
نظرية. λ > 0 إذا وفقط إذا وُجدت مراجحة. علاوة على ذلك، exp(λ) هو مُضاعف الربح لأفضل دورة.
/// 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 ونماذج العوامل: المراجحة الإحصائية
ننتقل من المراجحة الحتمية (التباينات السعرية المباشرة) إلى المراجحة الإحصائية — اكتشاف الانحرافات المنهجية عن نموذج العوامل.
تحليل المكونات الرئيسية (PCA) يحلّل عوائد الأصول إلى عوامل منهجية وبواقٍ خاصة:
ri(t) = αi + Σk βik * Fk(t) + εi(t)
حيث Fk(t) هو العامل k، وβik هو التحميل، وεi(t) هو الباقي — إشارة المراجحة.
4.1 نظرية المصفوفات العشوائية (RMT)
السؤال الجوهري: كم عاملاً نحتفظ به؟ توزيع مارشينكو-باستور يصف طيف القيم الذاتية لمصفوفة تغاير عشوائية. القيم الذاتية فوق الحد الأعلى تحمل إشارات حقيقية، بينما تلك داخل الحد هي ضوضاء.

5. طرق الموتِّرات: البُعد الثالث للمراجحة
تتضمن مراجحة العملات المشفرة أبعاداً متعددة في آنٍ واحد. مصفوفة الأسعار مجرد شريحة ثنائية الأبعاد. الصورة الحقيقية هي موتِّر:
T(a, e, i) = السعر/المعدل للأصل a في البورصة e للأداة i
الأبعاد:
- الوضع 1 (الأصول): BTC, ETH, SOL, ...
- الوضع 2 (البورصات): Binance, Kraken, Coinbase, ...
- الوضع 3 (الأدوات): فوري، دائم، عقود آجلة، ...
تحليل CP (CANDECOMP/PARAFAC) يحلّل الموتِّر إلى مجموع موتِّرات من الرتبة 1. البواقي T - T_approx تكشف الحالات الشاذة حيث تكون تركيبات محددة من السعر/البورصة/الأداة مسعّرة خطأً بالنسبة للبنية العامة لعوامل السوق.
الخلاصة
من الجداول البسيطة إلى الموتِّرات متعددة الأبعاد، يوفر الجبر الخطي لغة رسمية لسوق العملات المشفرة. تتيح لنا Rust تنفيذ هذه النماذج المعقدة بالسرعة المطلوبة للتداول عالي التردد.
في الجزء التالي، سنستكشف GNN وTransformers وRL للمراجحة، وننظر في كيفية تعلّم الشبكات العصبية التداول.
تعالج إشارات عالية الأبعاد؟ اطّلع على محرك التداول المبني على الموتِّرات على GitHub.
MarketMaker.cc Team
البحوث والاستراتيجيات الكمية