Rust тіліндегі күрделі арбитраждық орындау: наносекундтан атомдық мульти-легтерге дейін
"Фьючерстер мен спот арасындағы күрделі арбитраж тізбектері" сериясының 6-бөлімі
Бір мезгілде бес биржаның оркестрін басқаратын дирижерді елестетіңіз. Әрбір аспап өз бөлігін ойнайды, және бірінші нотадан соңғысына дейін бірнеше миллисекундтан артық уақыт өтпеуі керек. Бір қате нота — және арбитраждық мүмкіндік шығынға айналады: бір биржада лег орындалды, ал басқасында баға жоғалып кетті.
Бұл "Фьючерстер мен спот арасындағы күрделі арбитраж тізбектері" сериясының алтыншы бөлімі, әрі ең практикалығы. Біз байттар, кэш жолдары және атомдық операциялар деңгейіне түсеміз.
Мульти-легті арбитраж үшін өте төмен кідірісті орындау жүйесінің архитектурасы: нарық деректерін қабылдаудан бастап бұйрықты 2-6 мс ішінде жіберуге дейін.
1. Кідірісті оңтайландыру: ядродан тыс
Субмиллисекундтық дәлдікке жету үшін дәстүрлі тар жерлерді айналып өту қажет.
1.1 io_uring және желіні айналып өту
io_uring пайдаланушы кеңістігі мен ядро арасында ортақ жад сақиналары арқылы асинхронды I/O қамтамасыз етеді. Инициализациядан кейін бірнеше WebSocket-тен оқу сияқты операциялар нөл жүйелік шақыруды қажет етеді.
use io_uring::IoUring;
struct UringReader {
ring: IoUring,
buffers: Vec<Vec<u8>>, // Pre-allocated buffers: one per exchange
}
1.2 simd-json және Zero-Copy десериализациясы
Көптеген биржалар JSON пайдаланады. simd-json параллель талдау үшін SIMD нұсқауларын қолданады, бұл стандартты парсерлерге қарағанда 2-4 есе жылдамдық береді.
2. Локсыз бұйрық кітаптары: Mutex жоқ
HFT ортасында бұйрық кітабындағы Mutex үлкен тар жер болып табылады. Локсыз іздеу үшін біз crossbeam-skiplist қолданамыз:
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: локсыз сақиналы буфер
Кэш жолына сай (64 байт) алдын ала бөлінген сақиналы буфер орындау конвейерінің жүрегі болып табылады. Ол нарық деректерінің OrderBook Updater, Strategy Engine және Risk Monitor арқылы параллель әрі көшірмесіз ағуына мүмкіндік береді.
4. Слиппаж модельдеу: сенімділік қабаттары
Біз слиппажды үш қабат арқылы модельдейміз:
- Лездік LOB талдауы: Limit Order Book-тың нақты уақыттағы талдауы (микросекунд).
- Кайл лямбдасы: бұйрық ағынының бірлігіне шаққандағы баға әсері (миллисекунд).
- Amihud ILLIQ: ұзақ мерзімді өтімділікті бақылау (күндер).
5. Атомдық мульти-легті орындау: Type-State үлгісі
Мульти-легті арбитраж стратегиясы ешқашан атомдық болмайды. Бір лег орындалуы мүмкін, ал басқалары сәтсіз аяқталуы мүмкін. Жарамсыз күй ауысуларын компиляция кезінде қатеге айналдыру үшін біз Rust-тың Type-State Pattern үлгісін қолданамыз.
// States as types. Invalid transitions won't compile.
struct Idle;
struct Validating;
struct ExecutingLeg;
struct FullyFilled;
struct RollingBack;
struct Execution<State> {
trade_id: u64,
legs: Vec<TradeLeg>,
_state: PhantomData<State>,
}
6. Тәуекелді басқару: Kill Switch және Circuit Breaker
Үш деңгейлі circuit breaker жүйені нарықтың апатты қозғалыстарынан қорғайды:
- Paused: жергілікті құбылмалылық секірулері үшін 5 минуттық пауза.
- Halted: 1 сағаттағы үлкен құлдырау үшін 15 минуттық тоқтату.
- Shutdown: BTC 24 сағатта 20%-ға құлдыраса, жүйенің толық сөнуі.
7. Өнімділік бюджеті
Оңтайландырылған Rust кодымен біздің кідіріс бюджетіміз мынадай көрінеді:
- Network In (AWS ap-northeast-1): 0,5 - 2 мс
- Parsing/OrderBook: 2 - 10 мкс
- Strategy/Risk: 5 - 15 мкс
- Network Out: 0,5 - 2 мс БАРЛЫҒЫ: 2 - 6 мс
Қорытынды
Rust — күрделі арбитраждық орындау үшін тамаша тіл. Ол C++-тың төмен деңгейлі бақылауын қаржы жүйелеріне қажетті қауіпсіздік кепілдіктерімен қатар ұсынады.
Осымен біздің "Күрделі арбитраж тізбектері" сериясы аяқталады. Граф алгоритмдері мен копулалардан бастап машиналық оқыту мен наносекундтық орындауға дейін, енді сізде кәсіби деңгейдегі криптовалюта арбитраж жүйесін құрудың толық жоспары бар.
Ауқымды орындауға дайынсыз ба? Біздің GitHub-тағы HFT Execution Engine жобасын клондаңыз.
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.