Стратегии
Пробой канала King Keltner (Raschke) с подтверждением наклоном, лонг и шорт, выход при обратном пересечении средней линии; пересчитано на периоде 4ч (ETHUSDT.BYBIT 4ч, только OHLCV, значения автора по умолчанию 20/50)
Итог: Отменено
EthBybitKingKeltnerBreakout4H
Сводка по итогам
EthBybitKingKeltnerBreakout4H — вариант пробоя King Keltner FMZ с подтверждением наклона средней линии EMA и полосами ATR, лонгом и шортом, с выходом при обратном пересечении средней линии; период ETHUSDT.BYBIT 4ч. Период 4ч выбрали после предварительного исследования, которое показало, что вариант на 1ч не покрывает комиссии. Код не прошёл проверку Layer 3 в изолированной среде: тестовая проверка неоднократно превышала лимит 300 с на окне примерно в 20,000 баров. После 3 итераций, включая переписывание ATR в виде скользящей суммы O(1), запуск прекратили до проверки бэктеста, оптимизации, анализа и оценки риска; преимущество стратегии внутри фабрики так и не измерили.
Гипотеза
Итерация 3 устраняет проблему Layer-3 sandbox_timeout. Единственный цикл по барам, контролируемый стратегией, суммировал диапазон 50 баров для пересчёта ATR на каждом баре. Теперь используется скользящая скалярная сумма: к ней прибавляется новейшее значение TR и вычитается TR, покидающее окно; однократный пересчёт O(atr_len) выполняется на первом баре или после разрыва. Это снижает стоимость обработки одного бара до O(1). Средняя линия EMA и так обновлялась инкрементально, поэтому повторного просмотра истории и дополнительных потоков данных нет. Логика входа, выхода, сигнала и определения размера позиции не изменилась ни на байт, поэтому Layers 1 и 2 остаются успешными. Ранее на ~12 тыс. баров код выполнял около 50 операций с числами с плавающей запятой на бар; если тайм-аут повторится, вероятная причина — нагрузка на тестовую обвязку или движок, а не вычисления стратегии.
verification_loop: sandbox_timeout: проверка не пройдена (Layer 3 — бэктест в изолированной среде): тестовая проверка превысила лимит времени 300 с на окне примерно в 20000 баров (2400 дней по ETHUSDT.BYBIT-4-HOUR-LAST-EXTERNAL). Обычно это означает, что работа на каждом баре растёт вместе с историей — например, повторно просматривается весь ряд ставок финансирования или дополнительных данных либо внутри calculate_signal()/on_bar() на каждом баре заново строится список и вызываются min()/sorted(). Заранее вычисляй отсортированные массивы временных меток ONCE в __init__ и используй bisect либо кэшируй результаты по временной метке, чтобы стоимость обработки одного бара была O(log n), а не O(n).
Реализация
Пробой канала Кельтнера (Рашке) на ETHUSDT.BYBIT 4H. Средняя линия = EMA(типичная цена, 20); граница канала = +/-1.0 x SMA(истинный диапазон, 50). Длинная позиция открывается, когда средняя линия растёт, а цена закрытия выше верхней границы; короткая позиция — когда средняя линия падает, а цена закрытия ниже нижней границы. Выход, когда цена закрытия пересекает среднюю линию в обратном направлении. Сигнал — расстояние цены закрытия от средней линии в единицах ATR. Размер позиции составляет 0.9 x от капитала по номиналу позиции при 1x.
Результаты верификации
sandbox_timeout: проверка не пройдена (Layer 3 — бэктест в изолированной среде): тестовая проверка превысила лимит времени 300 с на окне примерно в 20000 баров (2400 дней по ETHUSDT.BYBIT-4-HOUR-LAST-EXTERNAL). Обычно это означает, что работа на каждом баре растёт вместе с историей — например, повторно просматривается весь ряд ставок финансирования или дополнительных данных либо внутри calculate_signal()/on_bar() на каждом баре заново строится список и вызываются min()/sorted(). Заранее вычисляй отсортированные массивы временных меток ONCE в __init__ и используй bisect либо кэшируй результаты по временной метке, чтобы стоимость обработки одного бара была O(log n), а не O(n).
Сводка по итогам
Любая стоимость обработки одного бара, растущая вместе с историей, приводит к тайм-ауту в изолированной среде ещё до проверки сигнала. Поэтому с первой итерации каждый индикатор следует реализовать как инкрементальное состояние O(1); также нужно проверить обработку истории базовым классом (например, буфер self._bars) на предмет оставшихся узких мест.
После 3 итераций стратегию закрыли в цикле проверки. Layer 3 (бэктест в изолированной среде) не пройден: тестовая проверка превысила лимит времени 300 с на окне примерно в 20,000 баров (2400 дней по ETHUSDT.BYBIT 4ч), завершившись ошибкой sandbox_timeout. Это произошло, хотя в итерации 3 цикл ATR на каждом баре заменили скользящей суммой O(1).
Пробой канала King Keltner на ETHUSDT.BYBIT 4ч, только OHLCV: лонг при росте средней линии EMA(типичная цена, 20) и закрытии выше средней + 1.0x SMA(TrueRange, 50); шорт — при обратных условиях. Выход при обратном пересечении средней линией цены закрытия; период изменён с 1ч на 4ч, поскольку предварительное исследование автора показало, что вариант на 1ч не покрывает комиссии.
Показателей эффективности фабрики нет: отчёт бэктеста пуст, оптимизация не запускалась. Единственные цифры взяты из предварительного исследования самой гипотезы: чистый результат на сделку для лонга — +0.38%, для шорта — +0.39% на ETHUSDT 4ч; для варианта на 1ч — от -0.14% до 0.00% чистыми на сделку (PF 0.82-1.00).
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.