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

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

хронологические окна исследованияХронологический тест разбивает исторические данные так, чтобы будущие бары оценки не участвовали в выборе более ранних параметров; более поздняя информация всё ещё может влиять на повторяющиеся решения исследователя.Более ранние наблюденияЗадать; оценить параметры здесьОтложенная выборкаОценить один разПозжеПроверка вперёдСамое раннееВремя →Отложенная выборка снижает одну форму повторного использования; она не может устранить повторяющиеся исследовательские решения или гарантировать будущие результаты
Хронологический тест разбивает исторические данные так, чтобы будущие бары оценки не участвовали в выборе более ранних параметров; более поздняя информация всё ещё может влиять на повторяющиеся решения исследователя. ?????????????????? ?????????????????? ?? ???? ???????????????? ?????????????? ?????????????????? ??????????????
порядок исследовательского бэктеста криптостратегииВоспроизводимый бэктест начинается с опровержимого вопроса и зафиксированных правил, проверяет данные и временные метки, моделирует исполнение и издержки, оценивает более поздние наблюдения, а затем сообщает о неудачах и ограничениях. Порядок действий не устраняет смещение отбора со стороны исследователя.РЕЗУЛЬТАТ НАСТОЛЬКО ЯСЕН, НАСКОЛЬКО ЯСНЫ РЕШЕНИЯ, КОТОРЫЕ К НЕМУ ПРИВЕЛИВопросчто может пойти не так?Правилафиксация моментаДанныеисточник + пропускиИсполнениеисполнения + издержкиОценкаболее поздняя выборкаОтчётограниченияПересмотр запускает цепочку доказательств заново · повторяющиеся решения могут загрязнить отложенную выборкуБэктест — это условное историческое исследование, а не прогноз
Воспроизводимый бэктест начинается с опровержимого вопроса и зафиксированных правил, проверяет данные и временные метки, моделирует исполнение и издержки, оценивает более поздние наблюдения, а затем сообщает о неудачах и ограничениях. Порядок действий не устраняет смещение отбора со стороны исследователя. ?????????????????? ?????????????????????? ?? ???? ???????????????? ?????????????? ?????????????????? ??????????????

1. Зафиксируйте гипотезу и правило

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

Храните датированную версию каждого правила. Если вы тестируете 20 комбинаций периода ретроспективы и выхода, зафиксируйте все 20 и то, почему они были выбраны. Лучшая строка из большого перебора — не доказательство того, что настройка была выбрана заранее. Статья Probability of Backtest Overfitting на странице издателя объясняет, почему многократный отбор лучшего кандидата может сделать результаты в выборке более убедительными, чем их последующая доходность.

2. Проверьте, что на самом деле сообщает каждая свеча

Храните вместе с набором данных поставщика, продукт, символ, тип контракта, запрошенные даты, время получения, интервал свечей, исходные временны́е метки, единицы объёма и все преобразования. Проверьте наличие дублирующихся или пропущенных интервалов, некорректных значений high/low, резких смен символа и последнего бара, который ещё не закрылся на момент получения. Сохраните исходный файл или стабильный отпечаток, чтобы можно было воспроизвести входные данные.

Например, представим вымышленную часовую свечу с open $100, high $108, low $97 и close $105. Правило входит в сделку, когда завершённое закрытие превышает предыдущий 20-баровый максимум $104.50. Сигнал становится известен только на закрытии свечи. Тест, который видит это закрытие, но исполняется по цене открытия той же свечи $100, использует более позднюю информацию, чтобы выбрать более раннюю цену. Причинная модель бара могла бы использовать вымышленное открытие следующего бара $105.20, но при этом по-прежнему обозначать это открытие как ценовой прокси, а не как гарантированное исполнение. Для стоп-лосса или пробоя внутри бара нужны данные достаточно мелкого масштаба, чтобы установить последовательность событий.

сигнал по закрытию свечи можно смоделировать только в более поздней исполнимой точкеВымышленная свеча с 12:00 до 13:00 пробивает предыдущий 20-барный максимум 104.50 и закрывается на 105. Сигнал известен в 13:00; показанное открытие 13:00 на 105.20 — это более поздняя модельная цена. Исполнение по открытию 12:00 на 100 использовало бы информацию из завершённой свечи слишком рано.ПРОВЕРЬТЕ, КОГДА СИГНАЛ СТАНОВИТСЯ ИЗВЕСТЕН · ВЫМЫШЛЕННЫЙ ЧАСОВОЙ БАРПРЕДЫДУЩИЙ ДИАПАЗОН20-барный максимум · $104.50только более ранние завершённые барыБАР 12:00–13:00 UTCO $100 · H $108 · L $97Закрытие $105пересечение известно в 13:00БОЛЕЕ ПОЗДНЯЯ ЦЕНА МОДЕЛИоткрытие 13:00 · $105.20предполагаемый ориентир входаИсполнение по открытию 12:00 использует более позднее закрытие слишком раноВсе цены вымышлены · OHLC не раскрывает позицию в очереди внутри бара и не гарантирует исполнение
Вымышленная свеча с 12:00 до 13:00 пробивает предыдущий 20-барный максимум 104.50 и закрывается на 105. Сигнал известен в 13:00; показанное открытие 13:00 на 105.20 — это более поздняя модельная цена. Исполнение по открытию 12:00 на 100 использовало бы информацию из завершённой свечи слишком рано. ?????????????????? ?????????????????????? ?? ???? ???????????????? ?????????????? ?????????????????? ??????????????

Текущая справочная документация Binance Spot API описывает GET /api/v3/klines и определяет временны́е метки открытия и закрытия наряду с полями OHLC и объёма. Относитесь к этим полям как к фактам поставщика, которые следует сохранить, а затем определите, была ли каждая свеча завершена на момент вашего получения данных. Данные одной площадки не являются автоматически историей всего рынка, и бар спота не заменяет бессрочный контракт. Документация Binance Spot по klines.

3. Внесите в журнал все существенные издержки

Смоделируйте комиссии за вход и выход, спред, неблагоприятное проскальзывание, заимствование или финансирование, где это применимо, а также минимальные шаги объёма и цены инструмента. Укажите, какой уровень аккаунта и роль ордера предполагает комиссия. Для бессрочного фьючерса привяжите каждую позицию к выплатам по финансированию, которые действительно попадают в её окно удержания, используя их временны́е метки и знак; пропущенный интервал остаётся неизвестным, а не нулевой выплатой.

Также решите, что происходит, когда одна и та же свеча OHLC пересекает и стоп-лосс, и цель. Данные свечи не могут сказать, что произошло первым. Используйте консервативное допущение, более мелкомасштабные данные или классифицируйте результат как неоднозначный. Затем повторите тест с повышенными издержками и сообщите, когда кажущийся результат перестаёт выдерживать проверку. Одна необъяснённая «консервативная комиссия» сама по себе не делает модель исполнения реалистичной.

4. Отделите выбор правила от последующей оценки

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

Повторяющиеся хронологические окна могут показать, как фиксированная процедура ведёт себя по мере накопления истории. В walk-forward тесте определите, что переобучается на каждой границе и какие настройки остаются замороженными. Текущая документация Scikit-learn по TimeSeriesSplit описывает расширяющиеся, упорядоченные по времени фолды и необязательный разрыв, измеряемый в выборках. Она также требует равноотстоящих выборок, чтобы тестовые фолды представляли сопоставимые длительности; поэтому часовые данные по криптовалютам с пропущенными интервалами нуждаются в явной политике обработки пропущенного времени. Разрыв — это количество строк, поэтому выбирайте его в соответствии с горизонтом исхода и перекрытием в ваших собственных метках, а не копируйте значение по умолчанию. Документация TimeSeriesSplit.

расширяющиеся хронологические окна оценки и запечатанная финальная контрольная выборка (holdout)Три иллюстративных фолда walk-forward расширяют обучающее окно, тогда как каждое окно валидации сдвигается вперёд. Отдельная более поздняя контрольная выборка (holdout) остаётся запечатанной, пока выбор не завершён. Равное число баров означает равную прошедшую длительность только при равномерно распределённых наблюдениях.ДВИЖЕНИЕ ВПЕРЁД ВО ВРЕМЕНИ · ФИНАЛЬНАЯ ПРОВЕРКА ОСТАЁТСЯ ЗАПЕЧАТАННОЙОБУЧЕНИЕ · РАСШИРЯЕТСЯВАЛИДАЦИЯ · СЛЕДУЮЩЕЕ ОКНОКОНТРОЛЬНАЯ ВЫБОРКА (HOLDOUT)Хронологический порядок · каждый результат валидации фиксируется до следующего исследовательского выбораФолд 1Фолд 2Фолд 3Бары 1–45–6Бары 1–67–8Бары 1–89–10Бары 11–12открывается один раз послезавершения выбора правилазатем пометить как использованныйТолько иллюстрация · длина фолдов должна соответствовать правилу и вопросу оценки
Три иллюстративных фолда walk-forward расширяют обучающее окно, тогда как каждое окно валидации сдвигается вперёд. Отдельная более поздняя контрольная выборка (holdout) остаётся запечатанной, пока выбор не завершён. Равное число баров означает равную прошедшую длительность только при равномерно распределённых наблюдениях. ?????????????????? ?????????????????????? ?? ???? ???????????????? ?????????????? ?????????????????? ??????????????

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

5. Проверьте реализацию на прочность, прежде чем доверять графику

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

Сохраняйте точную версию стратегии, снимок данных, конфигурацию, график издержек, эталон для сравнения и журнал результатов вместе. Полезный финальный вопрос: «Что заставило бы меня перестать верить этому результату?» Запишите ответ до запуска другой вариации. Когда последующая проверка меняет ваше мнение, создайте новую версию вместо переписывания первоначальной записи.

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

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

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