Почему система бэктестинга DeFi расходится с реальной торговлей
Расхождение прогона и рынка — не погрешность округления, а следствие того, как собраны данные и как исполняется сделка. В системе бэктестинга DeFi картина повторяется: тестовая кривая сглажена, а в сети стратегия теряет часть доходности или уходит в просадку. Причины измеримы и воспроизводятся на одной и той же истории.
Неполная история: пул живёт пару лет, и ровно на этом окне проверяется стратегия. Периоды аномальной доходности в данные попадают, сжатия ликвидности — нет. Проверка DeFi-стратегий на таком отрезке переоценивает устойчивость: редкие события, которые и определяют результат, в выборке отсутствуют.
Подмена цен закрытия: расчёт берёт снимок состояния пула раз в интервал, тогда как сделка исполняется против кривой между этими точками. Сдвиг цены внутри интервала не учитывается, и чем волатильнее окно, тем сильнее расхождение.
Глубина ликвидности и проскальзывание в расчёте: при фиксированном сдвиге цены модель игнорирует просадку, которую создаёт сам ордер. В тонком пуле крупная сделка двигает цену, а комиссии и удорожание исполнения при конкуренции за место в блоке сведены к константе.
Ошибка выжившего: отбор идёт по пулам и токенам, дожившим до сегодняшнего дня, — закрытые и обнулившиеся в выборку не попадают. Набор выглядит надёжнее, чем был в реальном времени, а подгонка параметров под ту же историю поднимает метрику и снижает переносимость.
Дальше — как это закрывается: какие данные нужны, как считается исполнение и что проверяется до выхода стратегии в сеть.
Измеримый эффект: скорость прогонов, сходимость и разбор просадок
Пересчёт набора параметров по всей истории идёт минуты вместо суток: прогон считается по заранее собранным и нормализованным данным, а не по запросу к узлу на каждую итерацию. Сетка параметров считается параллельно и кэшируется по срезам — меняется один коэффициент, пересчитывается только затронутая часть. Инженер успевает прогнать десятки конфигураций за смену и увидеть, где отклик стратегии ломается.
Сходимость результатов прогона с реальным исполнением — главный критерий доверия к тесту. Сделки восстанавливаются из событий в сети, комиссии, проскальзывание и стоимость газа считаются как в фактической сделке, поэтому расхождение остаётся в пределах погрешности модели, а не отличается в разы и не переворачивает вывод о доходности. Именно на этом основании выбирается конфигурация, а не на красивой кривой.
Заглядывание в будущее исключаем структурно: стратегия видит только те данные, что были доступны на момент решения. Отложенный период проверки не участвует в подборе параметров вообще — он остаётся нетронутым до финального прогона. Устойчивость стратегии оцениваем на нескольких режимах рынка: рост, боковик, резкое падение ликвидности в пулах Uniswap.
Просадки объясняются данными, а не догадками. Видно, какая доля убытка пришла от цены актива, какая — от проскальзывания на тонком пуле, какая — от задержки исполнения. Вместо вывода «стратегия не сработала» появляется разбор с вкладом каждой причины — и правка идёт в конкретный узел логики, а не в модель целиком.
Режимы прогона: векторизованный, событийный и портфельный
Режим прогона определяет, какие эффекты вообще попадут в результат. Векторизованный расчёт обрабатывает историю цен целиком массивами, событийная реконструкция проигрывает ленту блоков и отклики контрактов, портфельная симуляция добавляет общий баланс, лимиты и очередь заявок. Быстро и полно одновременно не бывает — режим выбирают под вопрос, на который нужен ответ.
| Режим | Когда подходит | Ограничения |
|---|---|---|
| Векторизованный расчёт | Массовый отбор гипотез, грубая оценка на длинной истории | Не видит состояния внутри блока, проскальзывание и ликвидации — исполнение идеализировано |
| Событийная реконструкция | Проверка механики протокола: комиссии, оракулы, ликвидации, порядок заявок в блоке | Медленнее на порядки, требует архива состояний, тысячи вариантов не прогнать |
| Портфельная симуляция | Несколько стратегий на общем балансе: конкуренция за капитал, лимиты риска | Ошибка в модели влияния сделки на цену искажает результат сразу по всем стратегиям |
Что нельзя получить дешёвым способом
Состояние внутри блока, влияние крупной сделки на цену, порядок заявок при перегрузке сети дешёвым режимом не воспроизводятся: их либо моделируют приближённо, либо получают событийным прогоном с архивированными состояниями.
Рабочая схема — отбор гипотез векторизованно, финальные кандидаты через событийный прогон, портфель целиком на согласованном составе стратегий. Расхождение режимов на простой стратегии указывает на ошибку в модели комиссий, оракула или порядка заявок — пока оно не устранено, результатам доверять нельзя.
Как мы собираем стенд: от аудита данных до передачи регламента
Стенд собирается под конкретную стратегию, а не «в общем»: сначала фиксируем, какие решения она принимает и на каких данных, затем строим контур, который эти решения воспроизводит. Порядок этапов неслучаен — ошибка в подготовке истории обесценивает любую проверку после неё.
- Разбор стратегии. Логика входа и выхода, набор сигналов, управление позицией и то, что считаем исполнением — закрытие интервала или изменение состояния контракта.
- Аудит источников. Глубина истории, пропуски, расхождения между независимыми поставщиками цен, обработка реоргов: без этой проверки получаются красивые, но ложные результаты.
- Схема данных. Приводим выгрузки к единому виду с привязкой ко времени блока, добавляем комиссии пула, проскальзывание и ликвидность, доступную на момент сделки.
- Сборка расчётного контура. Воспроизводимый прогон: одинаковый вход даёт одинаковый результат, состояние фиксируется по шагам, журнал сделок и метрик сохраняется.
- Проверка на отложенном периоде. Часть истории не участвует в настройке — она показывает, где стратегия подогнана под прошлое.
- Стресс-сценарии. Всплеск волатильности, провал ликвидности, рост стоимости газа, задержка исполнения, отказ источника: смотрим, где контур ломается.
- Передача и регламент прогонов. Отдаём стенд с документацией, описываем порядок запуска, критерии остановки и обновления данных, обучаем команду.
Дальше прогоны запускаете сами — и видите, как меняется поведение стратегии при смене допущений.
Артефакты передачи: схемы данных, наборы параметров, отчёты
Передача заканчивается не репозиторием, а набором артефактов, по которым ваша команда может повторить любой прогон без нас и объяснить результат внешнему аудиту. Ниже — что остаётся у заказчика и зачем нужен каждый элемент.
- Схема данных — таблицы сделок, состояний пулов и котировок: типы полей, ключи, связи, глубина истории и правила обработки пропусков в источнике.
- Справочник источников — откуда берутся данные, частота обновления, задержка относительно момента сделки и поведение при расхождении двух источников.
- Наборы параметров — готовые профили прогона: комиссии пула, проскальзывание, горизонт удержания, шаг пересчёта и правила выхода из позиции.
- Словарь полей отчёта — что означает каждая метрика, как считается доходность с учётом комиссий и что именно мы называем просадкой.
- Шаблоны отчётов — сводка по стратегии, распределение результатов по периодам, список худших сделок с причинами срабатывания.
- Разграничение доступа — аналитик меняет параметры и запускает прогоны, риск-менеджер видит историю, а зафиксированный результат нельзя переписать задним числом.
- Документация прогонов — журнал запусков с версией набора параметров, снимком данных и списком изменений относительно предыдущего прогона.
- Регламент запуска — порядок действий: поднять окружение, прогнать стратегию, сравнить результат с зафиксированным и понять, откуда расхождение.
Такой комплект снимает зависимость от подрядчика: спустя месяцы вы воспроизводите цифру из отчёта и видите, какие параметры её изменили.
Кейс: сходимость модели и рынка выросла втрое
Заказчик пришёл с арбитражной стратегией на нескольких пулах ликвидности Uniswap: на исторических данных график рос ровно, в реальной торговле результат не воспроизводился. Расхождение модели и рынка давали два места — комиссии за обмен и момент исполнения сделки относительно движения цены внутри пула. Мы пересобрали кейс бэктестинга заново, разделив историю на обучающий и отложенный отрезки.
Что меняли в модели
В расчёт добавили лаг между сигналом и попаданием сделки в блок, проскальзывание на каждом шаге и фактические ставки комиссий вместо усреднённой константы. Отдельно описали стресс-период: когда ликвидность резко перекладывается между пулами, цена внутри одного уходит от цены во втором. Модель теперь считает это не аномалией, а рабочим сценарием — и проверяет, успевает ли арбитраж закрыться до выравнивания.
Метрики до и после
Сходимость расчётной доходности с фактической на отложенном периоде выросла втрое, доля отклонений сверх допустимого порога упала с 21% до 7%. Ошибка в оценке результата отдельной сделки снизилась с 0,9% до 0,3% — расчёт перестал показывать прибыль там, где её нет.
Проверка на исторических данных идёт прогоном по нескольким независимым отрезкам, включая эпизоды резких перекладок ликвидности. Если стратегия не проходит хотя бы один, она отклоняется или уходит в доработку с явной границей применимости — заказчик видит, где модель ломается, до вывода средств.
Чем отличается бэктестинг на истории от проверки в реальном времени?
Исторический прогон и наблюдение в реальном времени отвечают на разные вопросы. Первый показывает, как стратегия проходит десятки тысяч сделок на длинном горизонте, второй — доживает ли сигнал до реального исполнения. В системе бэктестинга DeFi они идут последовательно, потому что не заменяют друг друга.
Прогон на истории даёт статистику по целым рыночным циклам: смену трендов, затяжные просадки, поведение при тонкой ликвидности. Он воспроизводим — ту же конфигурацию переигрывают с другими порогами риска и сравнивают результаты. Слабое место — идеальные условия: сделка считается исполненной по цене из блока, без очереди заявок, проскальзывания и конкуренции за ликвидность. Разрыв заметен там, где доходность зависит от ставок и глубины пулов, — например, в Aave.
Теневой режим закрывает именно этот пробел. Стратегия подключается к живому потоку и формирует сигналы, но транзакции не отправляет: видно фактическую задержку между сигналом и блоком, перестройку цепочки, моменты, когда ликвидность уходит из пула. Плата за точность — время: значимую выборку набирают неделями, а редкие сценарии попадают в неё единицами.
Проверка на малом объёме — следующий шаг, где в дело идут реальные средства. Она подтверждает фактические цены исполнения, расход на комиссии сети, поведение стратегии при отказах и частичном заполнении. Риск ограничен размером позиции, поэтому такой прогон безопасен для отладки операционных деталей.
Итог: история отвечает, есть ли у стратегии преимущество; теневой режим — доходит ли сигнал до блока; малый объём — сходится ли расчёт с фактом. Мы выстраиваем эти этапы в один проверочный цикл, чтобы стратегия выходила на полный объём уже с понятной статистикой.
Сомнения по данным, ликвидности и воспроизводимости прогонов
До первого прогона заказчик хочет убедиться, что цифры на выходе вообще что-то значат. Поэтому вопросы обычно одни и те же: откуда история, как учтено исполнение и повторится ли результат завтра. Ниже — ответы без общих слов.
Откуда берётся история сделок и как проверяется её качество?
Собираем данные из нескольких независимых источников и сверяем их между собой: расхождения по объёму и цене за блок помечаются, а не усредняются молча. Отдельно обрабатываем перестройки цепочки и «дыры» в ликвидности — иначе на пропущенном интервале стратегия покажет сделку, которой в реальности не было. По каждому активу хранится флаг качества, и прогон может быть остановлен, если доля сомнительных свечей выше заданного порога.
Учитываются ли издержки исполнения и глубина пулов?
Да, и это главная разница между красивым и правдивым результатом. Комиссии пула, цена газа на момент сделки и проскальзывание считаются по фактической глубине конкретного пула, а не по среднему проценту по рынку. Если объём сделки превышает доступную ликвидность на этот блок, она либо разбивается на части, либо помечается как неисполнимая — в отчёт она не попадает.
Можно ли прогнать систему на стратегии, которая уже работает?
Да. Мы восстанавливаем состояние позиций на нужную дату и считаем дальше только по новым данным, не пересчитывая историю задним числом. Так видно, где фактические сделки расходятся с расчётными, и это расхождение — самый полезный сигнал при донастройке правил.
Повторятся ли цифры, если запустить прогон заново?
Прогон привязан к снимку данных и версии правил исполнения — при их совпадении результат совпадает до последней сделки. Если цифры разошлись, значит изменился один из трёх слоёв: данные, правила или источник случайности. Мы фиксируем все три, поэтому расхождение всегда объяснимо, а не списывается на «рынок другой был».
Обсудим задачу и вернёмся с оценкой и планом прогонов
Чтобы оценка проекта опиралась на ваш контур, а не на усреднённые допущения, нам нужен минимум вводных. Ниже — что запрашиваем на старте: по этим пунктам считаем трудоёмкость и состав работ, после чего возвращаемся с планом прогонов и передачей стенда.
- Доступ к данным. Выгрузки сделок, снапшоты состояния пулов, история котировок — в исходном виде и с описанием полей: валюта расчёта, часовой пояс, единицы измерения. Формат подойдёт любой читаемый: колоночные файлы, выгрузка из базы, поток из узла.
- Объём истории. Какой горизонт нужен и какие периоды обязательны — спокойный рынок, обвалы, моменты низкой ликвидности. От этого зависит, сколько сценариев покрываем и где появятся пропуски в данных.
- Логика стратегий. Правила входа и выхода, расчёт размера позиции, моменты ребалансировки, условия остановки. Чем формальнее описание, тем меньше допущений закладываем в модель.
- Учёт издержек. Комиссии пулов, проскальзывание, стоимость транзакций, задержка исполнения. Без этого прогон показывает результат, которого на реальном рынке не было.
- Инфраструктура и доступы. Где разворачиваем стенд, какие права нужны, есть ли ограничения на выгрузку данных наружу.
- Критерии приёмки. Какие метрики считаем достоверными и с чем сверяем расчёт — с вашими ручными прогонами или с независимым источником.
- Передача стенда. Что должно остаться у вас: конфигурации прогонов, схема данных, инструкция по воспроизведению и порядок запуска без нашего участия.
Опишите задачу в свободной форме и приложите то, что уже есть по данным. Вернёмся с оценкой проекта и планом работ — по этапам, срокам и составом стенда.







