Оптимизация параметров торговой стратегии в криптотрейдинге

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

Почему оптимизация торговой стратегии ломается на реальных данных

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

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

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

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

Что меняется в работе: просадка, отклик, устойчивость

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

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

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

Режимы настройки стратегии: сравнение подходов

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

Вариант Когда подходит Ограничения
Подбор параметров на истории Повторяющиеся режимы рынка, есть длинный архив сделок и запас времени на прогон Подгонка под прошлые данные: набор держится, пока статистика рынка не сместилась. Разовый пересчёт — и снова нужен новый прогон
Адаптивная подстройка в живом режиме Режимы меняются часто, горизонт удержания позиции короткий Реакция на шум и «дребезг» параметров, рост числа сделок и издержек. Ошибка в правиле пересчёта тиражируется на весь поток
Гибридный контур исполнения Длинный горизонт: нужна и устойчивость базового набора, и отклик на смену режима Сложнее в сопровождении: требуются коридоры дрейфа, журнал изменений и точка возврата к предыдущему набору

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

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

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

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

Пакет передачи: конфигурации, политики, регламенты

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

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

Такой пакет позволяет передать сопровождение другой команде или вернуться к стратегии спустя месяцы — без разбора логов и восстановления логики по памяти.

Кейс: просадка втрое меньше при том же обороте

Что было до

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

Что изменили

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

Чем подтверждено

Каждый прогон считался в Backtrader и попадал в журнал измерений: набор параметров, дата, просадка, профит-фактор, число сделок, доля выходов по стоп-правилу. Обучающий и удержанный отрезки делили заранее, поэтому подгонка под историю отсеивалась сразу. Просадка снизилась с 26% до 9% при том же обороте, профит-фактор вырос с 1.1 до 1.4, около 40% сигналов отсекает фильтр входа. Ручные вмешательства убраны, а пересмотр набора после смены режима рынка занимает часы вместо дней.

Чем проверка на истории отличается от реального времени?

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

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

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

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

Пока расхождение укладывается в допуск, стратегия работает ограниченным объёмом и допуск проверяется повторно. Если он нарушен, пересчитываются параметры и правила входа, а не «подкручивается» история под нужный результат.

Ограничения и риски: данные, комиссии, проскальзывание

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

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

Как понять, что стратегия переобучена на историю?

Признак — результат резко падает при небольшом сдвиге параметров или на соседнем интервале свечей. Проверяем на отрезке, который не участвовал в подборе, и смотрим на разброс, а не на лучший прогон.

Что делать с пропусками в архиве площадки?

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

Обсудим задачу: что прислать и как мы вернёмся с планом

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

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

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

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

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

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

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