Bitsgap logo
 Поиск
Пошаговое тестирование для крипто-ботов: практический пример

Пошаговое тестирование для крипто-ботов: практический пример

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

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


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

Для стратегий GRID и DCA возникает дополнительная задача учета: монеты и открытые позиции могут переходить через границу окна. Для полезного теста необходимо правило для этих активов до появления первого результата.

Обучение, тестирование и демо на будущих данных означают разные вещи

ТерминЧто вы делаетеЧто это показывает
Обучение на выборкеСравниваете разрешённые настройки на более раннем историческом окнеКакого кандидата выберет ваше правило отбора
Тестирование на вневыборочных исторических данныхЗапускаете выбранные настройки на следующем окне без перенастройкиКак этот выбор ведёт себя на последующих исторических данных
Пошаговая последовательностьПовторяете обучение и тестирование по мере продвижения времениСовокупное поведение процесса отбора
Демо на будущих данныхФиксируете настройку и наблюдаете новые рыночные данные с виртуальными средствамиСоответствуют ли рабочий процесс и поведение вашему плану в новом периоде

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

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

Пошаговое тестирование для крипто-ботов: практический пример-1

Составьте протокол до того, как приступать к сравнению результатов

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

Также укажите:

  • Длительность обучения и длительность тестирования, включая точные временные метки границ окна.
  • Метрика отбора, минимальное требование к доказательствам и правило разрешения ничьей.
  • Комиссии, проскальзывание, минимальные размеры, округление и модель исполнения.
  • Обработка активов и открытых ордеров на каждой границе окна.
  • Начальные активы бенчмарка и правила ребалансировки.

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

Ограничение — это ограничение отбора, а не обещание по будущей просадке. Стратегия, прошедшая его на обучении, может превысить его на тестировании.

Разделите даты так, чтобы месяц тестирования не учитывался дважды

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

РаундОкно обученияНетронутое окно тестирования
11 янв – 1 апр1 апр – 1 мая
21 фев – 1 мая1 мая – 1 июня
31 мар – 1 июня1 июня – 1 июля
41 апр – 1 июля1 июля – 1 авг

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

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

Полный первый цикл

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

КандидатДоходность на обученииМаксимальная просадка на обученииДопущен?
A+5,0%8,0%Да
B+8,0%15,0%Нет
C+4,0%6,0%Да

Протокол выбирает A. Более высокая доходность кандидата B не отменяет заявленное ограничение по просадке. Кандидат C остается в записи, даже несмотря на проигрыш в сравнении.

Зафиксируйте A для апреля. Предположим, что в учебном примере ему присваивается чистая доходность за апрель −2%. Это значение попадает в запись по вневыборочным данным. Переключение на C только потому, что он бы лучше справился с апрелем, означало бы повторное использование месяца тестирования при принятии решения.

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

Объедините последующие окна тестирования в одну траекторию капитала

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

Тестовый месяцВыбранная конфигурацияЧистая доходность тестаНачальный капиталКонечный капитал
АпрельA−2,0%$1 000,00$980,00
МайC+1,0%$980,00$989,80
ИюньA−3,0%$989,80$960,11
ИюльC+2,0%$960,11$979,31

Исходные нескруглённые конечные значения: 980, 989,8, 960,106 и 979,30812. Совокупная доходность составляет:

(1 − 0,02) × (1 + 0,01) × (1 − 0,03) × (1 + 0,02) − 1 = −2,069188%.

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

Наблюдения на конец месяца показывают наибольшее снижение примерно на 3,99% от начальных $1 000,00. В течение месяца капитал мог снижаться ещё сильнее, поэтому ежемесячные наблюдения не позволяют определить истинную максимальную просадку.

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

Определите, что произойдет с открытым инвентарём GRID или DCA

Предположим, что бот завершает апрель с 0,01 BTC и 400 USDT на балансе. При условной цене BTC в $50 000 его капитал составляет 900 USDT. Новый месяц не восстанавливает исходные 1 000 USDT.

Выберите одну последовательную политику на границе окна:

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

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

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

Проверьте модель исполнения и бенчмарк

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

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

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

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

Держите итоговую оценку отдельно от проектирования протокола

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

Зафиксируйте эту редакцию и оставьте нетронутую историю или новые будущие данные для следующей оценки. Новая метка на тех же датах не делает их снова невиданными.

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

После исторических проверок выполните фиксированный демо-запуск

Попробуйте самостоятельно провести учёт по этому примеру

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

Наблюдайте за своей настройкой в демо-режиме Bitsgap

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

Часто задаваемые вопросы

Предотвращает ли пошаговое тестирование переобучение?

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

Какой должна быть длительность окон?

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

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

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

Является ли демо на будущих данных тем же самым, что и тестирование на вневыборочных исторических данных?

Тестирование на вневыборочных исторических данных использует более поздние исторические данные в симуляторе. Демо на будущих данных отслеживает новые данные с виртуальными средствами. У обоих подходов есть ограничения, и ни один из них не гарантирует исполнения ордеров в реальных условиях или будущей доходности.

Хотите получать больше прибыли с криптовалюты?

Bitsgap помогает криптотрейдерам зарабатывать больше 24/7 с помощью торговых ботов.

Начать пробный период Free

*Пробный период PRO на 7 дней. Кредитная карта не требуется

Попробуйте Bitsgap PRO бесплатно в течение 7 дней, а затем выберите подходящий тарифный план.

Выполняется в 3 этапа и торгует за вас.

Все ваши данные защищены шифрованием высокого уровня