Research to live

Backtester + Explorer

Полностью event-driven replay rxbin через тот же SIMBA loop что в live: все типы ордеров, модель задержек и очереди, расхождение с live менее 10%

Рынок
Research to live
Кому полезно
кванты и трейдеры, которым важен backtest-to-live parity и удобный анализ
Статус
Построено и эксплуатируется в нашей торговле

Обзор

Backtester воспроизводит сырые rxbin-записи через тот же SIMBA event loop, книги и Strategy API, что работают в live - никакого отдельного «тестового» кода. Разница с реальным live-торгом в собственных прогонах составляет менее 10% по PnL. Симулятор полностью event-driven: команды приходят из стратегии, проходят через pending queue с настраиваемыми задержками и доставляются по биржевому таймлайну. Поддерживаются все типы ордеров MOEX TWIME - Day, BOC, IOC, FOK - с правильной FIFO-очередью, WouldCross-логикой и look-ahead bias guard. Вокруг него рабочее исследовательское место: Streamlit Explorer, WFO, grid search, sensitivity, rejects и разбор неполных прогонов.

ReplayStreamlitWFOGrid searchPnLEvent-driven

Что это дает

01

расхождение BT vs live по PnL менее 10% на собственных стратегиях

02

тот же Rust-код стратегии - в бэктесте и в live без изменений

03

полная модель задержек: order_latency, cancel_latency, response_delay, jitter, network offset

04

WFO и sensitivity помогают видеть переобучение до live-запуска

Похожая задача?

Расскажите, что нужно, - обсудим, как переиспользовать это под ваш проект

@runinfra

Возможности

Что внутри

Объем под ваш проект фиксируется в договоре: что переиспользуем из готового, что дорабатываем, интеграция, документация и поддержка

Полностью event-driven, без look-ahead

ReplayRxPort доставляет пакеты через тот же hot loop. Команды из on_boundary поступают в pending queue с arrival_ts = now_ns + order_latency_ns - ордер не может исполниться по трейду, который уже произошел до его прихода на биржу.

Все типы ордеров MOEX TWIME

Day (лимит с агрессивной фазой при кроссе + пассивный остаток), BOC (пассивный, WouldCross → reject), IOC (агрессивный по уровням + cancel остатка), FOK (полный fill или reject). Cancel и Replace с WouldCross-проверкой и потерей приоритета при Replace.

FIFO-очередь и модель задержек

queue_ahead = объем уровня на момент arrival. Passive fills - только через реальные TradeInfo из SIMBA, не через book-cross. Параметры: order_latency_ns, cancel_latency_ns, response_delay_ns, order_jitter_ns, cancel_jitter_ns, network_offset_ns, network_jitter_ns (p99 MD tail), TPS-лимиты per channel.

Gating: сессия, инструмент, расписание

Ордера вне торговой сессии и инструментального статуса реджектятся с правильными кодами. Auction TIF gating: только Day в аукционе. Настраиваемое trading_schedule для отсечки нерабочих периодов.

Simulated TWIME: комиссии и PnL

FillsTracker пишет fills.csv с полями: realized PnL, позиция, avg_entry, mid на момент fill, is_maker, fee_rub (биржа + клиринг + брокер), best_bid/ask. Итоговый analysis.json для Explorer.

Streamlit Explorer и WFO

UI для analysis.json: summary, ranking прогонов, IS/OOS WFO tabs, param sensitivity heatmaps, rejects по кодам, sessions, screening и recent runs.