Rust ile Karmaşık Arbitraj Yürütme: Nanosaniyelerden Atomik Çok Bacaklı İşlemlere
"Vadeli İşlemler ve Spot Arasındaki Karmaşık Arbitraj Zincirleri" serisinin 6. bölümü
Beş borsayı aynı anda yöneten bir orkestra şefi hayal edin. Her enstrüman kendi partisini çalar ve ilk nota ile son nota arasında yalnızca birkaç milisaniye geçmelidir. Tek bir yanlış nota—ve bir arbitraj fırsatı kayba dönüşür: bir borsada doldurulan bir bacak ve başka bir borsada kaybolan bir fiyat.
Bu, "Vadeli İşlemler ve Spot Arasındaki Karmaşık Arbitraj Zincirleri" serisinin altıncı ve en pratik bölümüdür. Bayt, önbellek satırı ve atomik işlemler düzeyine iniyoruz.
Çok bacaklı arbitraj için ultra düşük gecikmeli yürütme sisteminin mimarisi: piyasa verisi alımından emir gönderimine 2-6 ms içinde.
1. Gecikme Optimizasyonu: Çekirdeğin Ötesine
Milisaniyenin altında hassasiyet elde etmek için geleneksel darboğazları aşmamız gerekir.
1.1 io_uring ve Ağ Atlatma
io_uring, kullanıcı alanı ile çekirdek arasındaki paylaşımlı bellek halkaları aracılığıyla asenkron I/O sağlar. Bir kez başlatıldığında, birden fazla WebSocket'ten okuma gibi işlemler sıfır sistem çağrısı gerektirir.
use io_uring::IoUring;
struct UringReader {
ring: IoUring,
buffers: Vec<Vec<u8>>, // Önceden ayrılmış tamponlar: borsa başına bir tane
}
1.2 simd-json ve Sıfır Kopyalamalı Seri Dışı Bırakma
Çoğu borsa JSON kullanır. simd-json, paralel ayrıştırma için SIMD talimatları kullanır ve standart ayrıştırıcılara kıyasla 2-4 kat hız artışı sağlar.
2. Kilitsiz Emir Defterleri: Mutex Yok
Bir HFT ortamında, bir emir defterindeki Mutex büyük bir darboğazdır. Kilit olmadan arama için crossbeam-skiplist kullanırız:
use std::sync::atomic::{AtomicU64, Ordering};
use crossbeam_skiplist::SkipMap;
struct PriceLevel {
price: AtomicU64,
total_qty: AtomicU64,
}
struct LockFreeOrderBook {
bids: SkipMap<Reverse<u64>, PriceLevel>,
asks: SkipMap<u64, PriceLevel>,
}
3. LMAX Disruptor: Kilitsiz Halka Tamponu
Önbellek satırı hizalamasıyla (64 bayt) önceden ayrılmış bir halka tamponu, yürütme hattının kalbidir. Piyasa verilerinin OrderBook Updater, Strategy Engine ve Risk Monitor arasında sıfır kopyayla paralel olarak akmasını sağlar.
4. Kayma Modellemesi: Kesinlik Katmanları
Kaymayı üç katman kullanarak modelliyoruz:
- Anlık LOB Analizi: Limit Emir Defterinin gerçek zamanlı analizi (mikrosaniyeler).
- Kyle'ın Lambdası: Emir akışı birimi başına fiyat etkisi (milisaniyeler).
- Amihud ILLIQ: Uzun vadeli likidite izleme (günler).
5. Atomik Çok Bacaklı Yürütme: Tip-Durum Deseni
Çok bacaklı bir arbitraj stratejisi hiçbir zaman atomik değildir. Bir bacak dolarken diğerleri başarısız olabilir. Geçersiz durum geçişlerini derleme zamanında hata haline getirmek için Rust'ın Tip-Durum Desenini kullanırız.
// Tipler olarak durumlar. Geçersiz geçişler derlenmez.
struct Idle;
struct Validating;
struct ExecutingLeg;
struct FullyFilled;
struct RollingBack;
struct Execution<State> {
trade_id: u64,
legs: Vec<TradeLeg>,
_state: PhantomData<State>,
}
6. Risk Yönetimi: Acil Durdurma ve Devre Kesiciler
Üç seviyeli devre kesici, sistemi felaket niteliğindeki piyasa hareketlerinden korur:
- Duraklatıldı: Yerel volatilite artışları için 5 dakikalık duraklama.
- Durduruldu: Büyük 1 saatlik düşüşler için 15 dakikalık durdurma.
- Kapatma: BTC 24 saatte %20 düşerse tam sistem kapatması.
7. Performans Bütçesi
Optimize edilmiş Rust kodu ile gecikme bütçemiz şu şekilde görünür:
- Gelen Ağ (AWS ap-northeast-1): 0.5 - 2 ms
- Ayrıştırma/Emir Defteri: 2 - 10 μs
- Strateji/Risk: 5 - 15 μs
- Giden Ağ: 0.5 - 2 ms TOPLAM: 2 - 6 ms
Sonuç
Rust, karmaşık arbitraj yürütme için mükemmel bir dildir. C++'ın düşük seviye kontrolünü, finans sistemleri için gereken güvenlik garantileriyle birlikte sunar.
Bu, "Karmaşık Arbitraj Zincirleri" serimizin sonucudur. Grafik algoritmalarından ve copula'lardan makine öğrenimine ve nanosaniye yürütmeye kadar, profesyonel düzeyde bir kripto para arbitraj sistemi inşa etmek için gereken planınız artık elinizde.
Büyük ölçekte yürütmeye hazır mısınız? GitHub'daki HFT Yürütme Motoru'nu klonlayın.
Yazarlar
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.