Оценка торгового бота сводится к одной операции: результат на архиве и результат на счёте кладут рядом и считают разницу по каждой сделке. Полного совпадения не бывает. Значение имеет другое — объяснима ли разница издержками, задержкой и глубиной стакана или она указывает на ошибку в самом тесте. Ниже разобрано, какие расхождения считать нормой, какие браком и как вести сверку по шагам, не превращая её в подгонку отчёта.

Сверка теста и счёта — это процедура сопоставления, при которой каждая сделка из прогона на исторических данных сопоставляется с реальной сделкой того же бота за тот же отрезок времени, а разница раскладывается на цену входа, цену выхода и издержки.

Какая задача решается сверкой теста и счёта

Тест на истории отвечает на вопрос «работала ли логика раньше». Счёт отвечает на другой: «переносится ли она сейчас». Это разные вопросы. Между ними лежит слой, который архив не содержит — очередь в стакане, задержка сети, статус комиссии, остановки торгов. Сверка нужна, чтобы измерить толщину этого слоя в деньгах и понять, устойчива ли она.

В обращениях читателей чаще всего встречается одна и та же картина: прогон показывает ровную кривую, счёт за тот же квартал уходит в ноль, а владелец бота меняет настройки наугад. Менять нечего, пока не посчитана разница. Настройки могут быть ни при чём. Чаще оказывается, что прогон исполнял заявки мгновенно и по сигнальной цене, а на счёте те же заявки стояли в очереди, часть из них снималась по таймауту, и каждое такое снятие забирало движение, ради которого сделка и открывалась.

Поводом к сверке служат обычно усредняющие схемы, где число сделок велико, а каждая мелочь в исполнении накапливается: как устроены их параметры, разобрано в материале о том, как настроить бот усреднения. Отдельно стоит отличать сверку от переоценки стратегии. Сверка не говорит, хороша ли логика. Она говорит, честен ли тест. Разница принципиальная: стратегию переделывают, когда она перестала работать на рынке, а тест переделывают, когда выясняется, что он с самого начала описывал биржу, которой не существует, и обе эти работы требуют разных данных и разного инструмента.

Как оценить эффективность торгового бота и проверить на истории: порядок сверки

  1. Зафиксируйте отрезок. Берётся календарный период реальной работы бота, без округлений и без «удачных» месяцев.
  2. Соберите журнал сделок со счёта: время, пара, направление, объём, цена, тип исполнения, комиссия.
  3. Прогоните тест на том же отрезке, тех же парах и том же часовом поясе. Разный пояс сдвигает границы свечей.
  4. Сопоставьте сделки попарно по времени. Лишние и пропущенные отметьте отдельно — это сигнал, а не шум.
  5. Разложите разницу на три слоя: цена входа, цена выхода, издержки. Остаток отнесите к непокрытому.
  6. Повторите через месяц. Одна сверка показывает величину, серия сверок — её устойчивость.

Пропущенные сделки заслуживают внимания сильнее, чем расхождение в цене. Если тест открыл позицию, а бот нет, причина обычно в фильтре по минимальному ордеру, в недостатке свободных средств или в том, что заявка висела в стакане и не дождалась исполнения. Те же механизмы описаны в разборе о том, как сетка заявок распределяет объём по уровням, и они переносятся на любого бота с лимитными ордерами.

Схема из пяти шагов: фиксация отрезка, сбор журнала сделок, повторный прогон теста, попарное сопоставление, разложение разницы на слои
Схема из пяти шагов: фиксация отрезка, сбор журнала сделок, повторный прогон теста, попарное сопоставление, разложение разницы на слои

Какие расхождения ожидаемы, а какие указывают на ошибку

Расхождение Природа Что означает
Комиссия выше расчётной Ожидаемо Тест считал ставку мейкера, а заявки уходили по рынку и оплачивались как тейкер
Цена исполнения хуже сигнальной на доли процента Ожидаемо Проскальзывание: объём заявки превысил первый уровень стакана
Часть сделок исполнена не полностью Ожидаемо Частичное исполнение на паре с тонкой глубиной рынка, остаток снят по таймауту
Вход по цене закрытия того же бара, на котором возник сигнал Брак теста Модель знает будущее: в момент сигнала цена закрытия ещё не существует
Параметры подобраны на всём массиве разом Брак теста Подгонка: результат описывает прошлое, а не правило
В выборке нет делистингованных пар Брак данных Выжившая выборка завышает результат, худшие исходы вырезаны заранее
Совпадение теста и счёта до десятых долей процента — не повод радоваться. Такая точность обычно означает, что тест исполняет заявки по той же цене, по которой получил сигнал, и не моделирует ни очередь, ни издержки.

Расчёт на примере суммы

Цифры ниже условные, они нужны для демонстрации порядка величин, а не как ориентир доходности. Пусть депозит равен 100 000 рублей, за квартал бот совершил 120 сделок, тест показал прирост 6,4%, счёт — 1,9%. Разница составляет 4,5 процентного пункта, и её надо объяснить целиком.

Разложение разницы (условный пример).
Комиссия: тест заложил 0,02% за сторону, фактически списано 0,05% как с тейкера. 240 сторон × 0,03% = 7,2% оборота, при среднем плече оборота к депозиту это около 2,2 п. п.
Проскальзывание: 0,04% на сторону × 240 = 1,6 п. п.
Пропущенные сделки: 11 входов из 120 не состоялись, их расчётный вклад в тесте — 0,5 п. п.
Непокрытый остаток: 0,2 п. п.

Остаток в 0,2 пункта на квартал — рабочая величина. Остаток в 2–3 пункта требует отдельного разбора: он означает, что модель исполнения в тесте описывает не ту биржу, на которой работает бот, и до устранения этой причины любые изменения параметров будут подбираться вслепую, по результату следующего квартала, а не по пониманию механики.

Вторая часть расчёта — точка отсчёта. Результат бота имеет смысл сравнивать не с нулём, а с доходностью без риска. На 16 октября 2026 года ключевая ставка Банка России составляет 14,00% годовых, то есть около 3,4% за квартал. Квартальный результат в 1,9% ниже этой отметки. Логика может быть исправной, вывод всё равно неутешительный. Бот, который после всех издержек приносит меньше, чем приносит рублёвый депозит без рыночного риска, забирает время владельца и внимание к инфраструктуре, а взамен отдаёт результат, доступный без единой сделки.

Что видно в стакане и чего не знает архив

Тест по свечам оперирует четырьмя числами на интервал: открытие, максимум, минимум, закрытие. Стакан в этих числах не отражён. Между тем именно он определяет, по какой цене исполнится заявка объёмом выше среднего. Четыре числа сжимают в одну точку всю внутреннюю жизнь интервала — и очередь лимитных заявок на каждом уровне, и моменты, когда глубина рынка с одной стороны исчезала на несколько секунд, и частичные исполнения, из которых сложилась итоговая сделка.

Проверить это можно вручную. Откройте глубину рынка по своей паре и посмотрите, какой объём лежит на первых трёх уровнях с каждой стороны. Если типичный ордер бота сопоставим с этим объёмом, проскальзывание в тесте занижено по построению. Расписание торгов тоже влияет на картину: биржевой инструмент живёт в границах сессии, и опубликованное Московской биржей расписание показывает, что утренняя сессия на фондовом рынке открывается в 06:50 по московскому времени, а вечерняя закрывается в 23:49:59. Круглосуточный крипторынок таких границ не имеет, и это меняет состав участников в течение суток.

Ещё один источник расхождения — цена, по которой считается результат. Биржевой котировке противостоит ончейн-оценка, и когда биржевая и ончейн-цена токена расходятся, отчёт бота и отчёт портфеля перестают сходиться даже при безупречном исполнении.

Ошибки, из-за которых сверка даёт неверный ответ

  • Сверка по итоговой кривой вместо сделок. Две разные траектории дают одинаковый итог за квартал и совершенно разный риск.
  • Разные часовые пояса в журнале и в тесте. Сдвиг на час перекраивает границы свечей и ломает сопоставление.
  • Пересчёт комиссии по текущему уровню, а не по тому, который действовал на дату сделки.
  • Исключение убыточных сделок как «аномальных». Это подгонка отчёта.
  • Игнорирование принудительных действий площадки. Если позиция закрывалась механизмом биржи, в тесте такой сделки нет вовсе.

Последний пункт встречается реже остальных, но стоит дороже. На счетах с плечом позицию может сократить сама площадка, и тогда разобраться в отчёте без знания того, как работают страховой фонд и автоматическое сокращение позиций, не получится.

Полезно завести отдельный файл расхождений и вносить туда каждую сделку, которая не нашла пары, с пометкой о причине: через два-три квартала такой файл сам покажет, где именно модель исполнения расходится с площадкой.

Итог

  • Один отрезок, один набор пар, один часовой пояс в тесте и в журнале.
  • Сопоставление сделка в сделку, а не по итоговой кривой.
  • Разница разложена на цену входа, цену выхода и издержки.
  • Непокрытый остаток зафиксирован числом и отслеживается в динамике.
  • Результат сопоставлен с доходностью без риска на ту же дату.
  • Пропущенные и лишние сделки разобраны поимённо.

Частые вопросы

Какая разница между тестом и счётом считается нормальной?

Универсальной цифры нет, она зависит от частоты сделок и ликвидности пары. Ориентир другой: разница должна объясняться издержками и проскальзыванием полностью, а непокрытый остаток — оставаться стабильным от квартала к кварталу. Растущий остаток важнее его абсолютной величины.

Сколько сделок нужно, чтобы сверка что-то показала?

Чем реже торгует бот, тем длиннее требуется отрезок. На десятке сделок разница между тестом и счётом тонет в случайности и ничего не доказывает. Практичнее считать не месяцами, а числом сопоставленных пар сделок, и доводить его хотя бы до нескольких десятков.

Можно ли заменить сверку прогоном на свежих данных?

Нет, это разные процедуры. Прогон на отложенном куске архива проверяет логику на незнакомых данных, но исполнение в нём по-прежнему смоделировано. Сверка проверяет саму модель исполнения. Одно не заменяет другое, и честная оценка требует обеих.

Что делать, если тест нельзя повторить на том же отрезке?

Значит, у вас нет инструмента оценки, и это первая задача. Без возможности повторного прогона на произвольном периоде отчёт бота непроверяем. Сохраняйте исходные котировки и версию настроек вместе с журналом сделок, иначе через квартал сопоставлять будет нечего.

Вердикт

Бот, который хорошо выглядит на архиве и плохо на счёте, чаще всего не сломан — сломан его тест. Разница между двумя отчётами измерима, и в редакционной практике она почти целиком укладывается в комиссию, проскальзывание и неисполненные заявки. Тревожит не величина разрыва, а его рост от квартала к кварталу. Считайте остаток, который не объясняется издержками, и следите за его динамикой, а не за красотой кривой.

Разборы по заявкам, ботам и исполнению выходят в нашем Telegram-канале Cryptium.