Перейти к содержимому
Все стратегии

Стратегии

Пробой канала 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), запуск прекратили до проверки бэктеста, оптимизации, анализа и оценки риска; преимущество стратегии внутри фабрики так и не измерили.

Гипотеза

Источник: 发明者量化-小小梦, «Keltner Channel upgrade: King Keltner strategy», дайджест FMZ (разделы https://www.fmz.com/digest-topic/4104), «升级版的金肯特纳» и «金肯特纳策略My语言»). Благодарность автору. Механизм изложен с нуля, а не перенесён точно (L167). Канал: типичная цена TP=(H+L+C)/3. Средняя линия = EMA(TP, 20) — версия Raschke EMA, описанная в тексте статьи; в коде статьи на My-language используется SMA. Ширина полосы = SMA(TrueRange, 50), с множителем 1.0x, как в статье. Верхняя граница = средняя + ATR50, нижняя = средняя −……Показать большеСвернуть

Источник: 发明者量化-小小梦, «Keltner Channel upgrade: King Keltner strategy», дайджест FMZ (разделы https://www.fmz.com/digest-topic/4104), «升级版的金肯特纳» и «金肯特纳策略My语言»). Благодарность автору. Механизм изложен с нуля, а не перенесён точно (L167). Канал: типичная цена TP=(H+L+C)/3. Средняя линия = EMA(TP, 20) — версия Raschke EMA, описанная в тексте статьи; в коде статьи на My-language используется SMA. Ширина полосы = SMA(TrueRange, 50), с множителем 1.0x, как в статье. Верхняя граница = средняя + ATR50, нижняя = средняя − ATR50. Правила направления: лонг, когда средняя линия растёт, а цена закрытия выше верхней границы; шорт, когда средняя падает, а цена закрытия ниже нижней границы. Лонг закрывается при закрытии ниже средней линии, шорт — при закрытии выше неё. Других условий, фильтров или дополнительных потоков данных нет (L130). ONE ADAPTATION: период изменён с 1ч в статье на 4ч, поскольку моё предварительное исследование с учётом доступной на тот момент информации на BYBIT 1ч (7 альткойнов и основных монет, 2021-2026, 0.11% RT) показало, что вариант на 1ч не покрывает комиссии ни на одном активе. Чистый результат на сделку составлял от -0.14% до 0.00%, при PF 0.82-1.00 на 2,000-2,600 сделках. Выход при обратном пересечении средней сокращает сделки примерно до 1 ATR, а на периоде 1ч этого недостаточно для покрытия полного круга сделки. Выбор инструмента раскрыт (L122): я отобрал SOL/XRP/LINK/DOGE/AVAX/ETH/BNB на BYBIT с периодами 4ч/12ч/1д. Я выбрал ETHUSDT 4ч, поскольку только в этой ячейке есть (а) не менее 500 сделок за весь период, (б) симметричный результат для лонга и шорта (чистый результат +0.38% для лонга / +0.39% для шорта, то есть это не замаскированная лонговая бета) и (в) положительный чистый результат в 4 из 6 календарных лет без доминирования какого-либо одного года. В нескольких ячейках 1д/12ч значение PF было выше (SOL 1д PF 2.6), но там было всего 70-170 сделок, сосредоточенных в одном году и преимущественно на лонгах, поэтому они не проходят критерий L128/L170. Площадка: линейный бессрочный контракт BYBIT (доля в совокупности 0.8% при целевом значении не менее 5%). Триггер основан только на цене, поэтому ограничение на дополнительные потоки данных L160 не действует. У ETH Bybit около 5.5 лет истории с периодом 4ч (с 2021-03, около 12,100 баров). BTC исключён (чрезмерная концентрация), как и Hyperliquid (L168: короткая история). Другие кандидаты фабрики ETH (OKX SuperTrend, импульс с подтверждением объёмом) используют другие триггеры и выходы. Здесь пробой полосы волатильности сочетается с выходом по движущейся средней линией; позиция отсутствует примерно 33% времени.

Итерация 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 — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.