Разработка системы paper trading для тестирования AI-стратегий

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

Почему стратегия ломается без paper trading

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

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

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

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

Что даёт paper trading: измеримые эффекты

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

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

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

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

Симуляция, запись потока, демо-счёт: сравнение режимов

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

Режим Когда подходит Где упирается
Симуляция торговли на истории Первая проверка гипотезы, перебор параметров, отсев заведомо слабых стратегий Сделка всегда проходит по цене свечи: проскальзывание, очередь и неполные исполнения не моделируются
Запись потока котировок Нужно воспроизводить один и тот же рыночный день многократно — отладка логики исполнения и сверка после правок Пишется только то, что попало в подписку: глубину книги заявок и события вне потока восстановить нечем
Демо-счёт брокера Финальная проверка перед боевым счётом: живой рынок, реальные задержки, отказы по марже Правила и список доступных инструментов отличаются от рабочего счёта, история сделок ограничена сроком жизни демо

Режимы не заменяют друг друга, а выстраиваются конвейером: симуляция отсеивает гипотезы, воспроизведение потока стабилизирует исполнение, демо-счёт подтверждает поведение на живых данных. Полноценный тестовый контур для paper trading мы собираем из всех трёх звеньев — иначе стратегия проверена ровно настолько, насколько реалистична её модель исполнения.

Этапы внедрения: от аудита стратегии до передачи контура

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

  1. Аудит торговой логики. Разбираем сигнал входа и выхода, расчёт размера позиции и ограничение риска. На выходе — описание правил, однозначно переводимых в код: что считается событием, а что шумом.
  2. Настройка источника данных. Фиксируем, какие ряды нужны, с какой частотой и глубиной истории, как восстанавливаются пропуски и выравниваются часовые пояса.
  3. Сборка контура. Соединяем модуль стратегии, эмулятор исполнения и журнал позиций; комиссии, задержку подачи заявки и лимит по доступному объёму закладываем сразу.
  4. Проверка на совпадение. Прогон на историческом отрезке и сверка с независимым пересчётом: позиции, средняя цена, итоговый результат. Расхождение выше допуска — ищем ошибку в данных или в логике исполнения.
  5. Испытание на устойчивость. Сдвигаем параметры, дробим период на подынтервалы, меняем комиссии и проскальзывание — видно, где результат держится, а где рассыпается от одного допущения.
  6. Приёмка и передача контура. Контрольные сценарии, включая обрыв источника данных и повторный запуск; фиксируем метрики, по которым дальше сравниваются версии стратегии, отдаём документацию, конфигурации и доступы.

Что передаём на руки: конфигурации, схемы, регламенты

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

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

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

Кейс: расхождение тестовых и реальных результатов

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

Разбор показал, что дело не в логике стратегии, а в модели исполнения. Исторический прогон исходил из того, что любая заявка набирает объём целиком и по цене сигнала; на боевом контуре лимитные заявки частично не исполнялись, рыночные проскальзывали на волатильности, а задержка брокера и комиссия в расчёт вообще не попадали. Расхождение тестовой и реальной доходности доходило до 30–40%, и по этой цифре нельзя было понять, где заканчивается стратегия и начинается погрешность модели.

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

После нескольких итераций калибровки метрики сошлись. Доля исполненных заявок в тесте упала со 100% (так было заложено моделью) до 87%, на боевом контуре — 86%; расхождение доходности сократилось с 30–40% до 4–6%; максимальная просадка в тестовом прогоне перестала быть оптимистичной — 18% против 12% в старой модели. Стратегии, отбракованные на тестовом контуре, больше не доходят до реального счёта, а решение о запуске опирается на метрики, которые воспроизводятся при повторном прогоне.

Чем тестовый контур отличается от демо-счёта брокера?

Демо-счёт брокера (например, Interactive Brokers) — это витрина исполнения, а не модель рынка. Поток котировок в нём сглажен: заявка на крупный объём проходит целиком по последней цене, даже если на этом уровне реально лежит в разы меньше. Тестовый контур в режиме paper trading восстанавливает книгу заявок по уровням и исполняет ордер против конкретной глубины ликвидности.

Разница проявляется на трёх вещах. Глубина ликвидности задаёт, сколько объёма доступно по цене без её сдвига. Частичное исполнение заявки разбивает один ордер на десятки сделок с разными ценами и комиссиями. Очередь «цена — время» определяет, кто получит встречный объём первым. Демо-счёт подменяет всё это мгновенным исполнением по середине спреда, поэтому стратегии с плотной торговлей выглядят на нём прибыльными там, где на реальном рынке уходят в минус.

Воспроизводимость тестов — второе принципиальное отличие. Контур работает на зафиксированных срезах исторических данных и записях потока заявок, поэтому прогон с теми же входными условиями даёт тот же результат: можно сравнить две версии логики и точно знать, что изменился алгоритм, а не рыночный фон. Демо-доступ идёт в живом потоке, и вчерашний сценарий на нём не повторить.

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

Технические сомнения перед запуском тестового контура

Инженерные сомнения перед тестовым контуром обычно одни и те же: нужны ли реальные доступы к брокеру, что делать со стратегией, которая уже торгует, и как контур переживает обрыв потока котировок. Это те вопросы, которые закрываем до первого запуска, а не после.

Контур строится так, чтобы торговые права не требовались: подключение идёт к песочнице брокера или к записи рынка, ключи выдаются только на чтение. Журнал заявок, расчёт позиций и комиссий живут внутри контура — реальный ордер не уйдёт даже при ошибке в конфигурации.

Нужны ли реальные доступы к брокерскому счёту?

Нет. Достаточно потока котировок и правил исполнения — их даёт песочница или запись рынка. Если нужны данные именно по вашему счёту, выдаём ключ на чтение и ограничиваем список инструментов; торговые методы на стороне брокера остаются отключёнными.

Что делать со стратегией, которая уже работает?

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

Как контур переживает разрывы потока данных?

Разрыв связи не считается сбоем стратегии: поток буферизуется, при восстановлении данные догоняются из записи, дубли заявок отсекаются по идентификатору. Если пропуск длиннее заданного окна, торговля останавливается и период помечается недостоверным — результат на таких участках не учитывается.

Обсудим задачу: подберём режим тестирования под вашу стратегию

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

Что полезно прислать на обсуждение задачи:

  • логику принятия решений: на каких данных стратегия входит в позицию и выходит из неё, какие индикаторы или модели участвуют;
  • источники данных: рынки и инструменты, нужная историческая глубина, требуется ли живой поток котировок;
  • режим тестирования: виртуальный счёт на реальных котировках, прогон на истории или их сочетание;
  • правила риск-контроля: лимиты на позицию и дневную просадку, ограничение числа сделок, поведение при разрыве связи с биржей;
  • метрики приёмки: что считаем успешным прогоном и по каким отчётам это видно;
  • ограничения по среде: где разворачиваем контур, какие доступы к брокерским интерфейсам уже есть, требования к журналированию операций;
  • состав команды заказчика, которая будет сопровождать систему после передачи.

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

Направления AI-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142