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.