Пропуски свечей в бэктесте: докачать историю или остановить тест

Пропуски свечей в бэктесте: докачать историю или остановить тест

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

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

Как найти пропуски свечей в бэктесте

Зафиксируйте биржу, рынок, символ, таймфрейм и границы периода. Затем приведите timestamp к одной временной шкале, например UTC. Уточните, обозначает ли поле начало или конец свечи, и не перепутайте секунды с миллисекундами.

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

Открытие, UTC Open High Low Close Volume
01.10.2026 10:00 100 103 99 102 10
01.10.2026 11:00 102 104 101 103 12
01.10.2026 11:00 102 104 101 103 12
01.10.2026 13:00 103 106 102 105 9

На интервале от 10:00 до 14:00, не включая правую границу, ожидаются четыре часовых слота. В таблице тоже четыре строки, но уникальных timestamp только три: 11:00 повторяется, 12:00 отсутствует. Между 11:00 и 13:00 прошло 7 200 секунд вместо 3 600. Равное число строк не доказывает полноту истории.

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

Проверьте также, что High не ниже Open и Close, Low не выше них, а Volume неотрицателен. Эти условия обнаруживают часть ошибок, но не подтверждают достоверность цен.

Отсутствие торгов и ошибка загрузки выглядят похоже

У Coinbase Exchange в документации исторических свечей прямо сказано: данные не публикуются для интервалов без тиков. Там же указан предел в 300 свечей на запрос. Поэтому пустой интервал и обрезанная выгрузка требуют разных объяснений.

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

Отдельно проверьте последнюю свечу. Интервал, который ещё идёт на момент выгрузки, нельзя считать завершённым. Например, свеча с открытием в 13:00 при выгрузке в 13:30 UTC для часового ряда ещё формируется. Исключите её из расчёта сигналов по закрытию и запросите повторно после окончания часа. Поля времени и правила интервалов сверяйте с документацией конкретного API, например Binance Klines.

Как выбрать политику обработки разрыва

Что установлено Решение перед тестом
Источник вернул свечу при повторном запросе Дополнить копию набора, записать источник и повторить проверку дублей и шага времени
Подтверждён интервал без торгов Заранее определить, как стратегия считает время и индикаторы в таком интервале
Данные недоступны, но возможен тест отдельных участков Выделить независимые непрерывные сегменты и явно ограничить выводы ими
Причина неизвестна или через разрыв проходит позиция Остановить этот прогон до восстановления данных или согласования отдельной модели неопределённости

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

Прогрев индикатора и позиция на границе

После разрыва недостаточно продолжить расчёт со следующей строки. Для SMA по трём последовательным часовым закрытиям в нашем примере после возобновления ряда нужны закрытия свечей 13:00, 14:00 и 15:00. Последнее станет известно в 16:00 UTC. До этого полный новый трёхчасовой расчёт недоступен. Для рекурсивных индикаторов, включая EMA, отдельно задаются начальное состояние и длина прогрева.

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

Исключение плохих данных также меняет выборку. Если пропуски совпали с резкими движениями, оставшиеся спокойные участки дадут смещённую оценку (selection bias). Правило исключения задают до просмотра прибыли, а в отчёте сохраняют все исключённые интервалы и причины.

Перед бэктестом криптостратегии в XTester запишите источник истории, найденные разрывы, выбранную политику и момент возобновления сигналов. Этот метод не предполагает, что приложение автоматически обнаружит и исправит все пропуски. Для последующего разделения данных используйте отдельное руководство по walk-forward и out-of-sample.

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

Материал носит информационный характер и не является инвестиционной рекомендацией. Результаты бэктеста не гарантируют будущую доходность.

Похожие статьи

XTester Studio на базе Code - OSS и XTester Engine

В XTester Studio мы объединим готовую среду разработки Code - OSS и существующий движок XTester на C#/.NET. Редактор, рабочее пространство, Git и терминал возьмём из Code - OSS. Логику данных, симуляции, исполнения и статистики перенесём из текущего XTester. Целевая дата первого публичного этапа — 1 октября 2026 года.

Разработка

Иллюстрация продукта

Локализованная иллюстрация продукта. Переведены подписи интерфейса; код стратегии и зафиксированные результаты сохранены.

Сохранить полноразмерное изображениеXTester Studio: редактор стратегии и чат бэктеста, русская иллюстрация

Рабочая среда / увеличенная панель