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

Стратегии

BTC Momentum Confluence с фильтром режима волатильности, лонг-шорт (один инструмент, бессрочный контракт BTCUSDT.BINANCE, импульс 4H+1D ACTIVE ONLY при нормальной и повышенной волатильности, без позиций при крайне низкой волатильности и боковом движении, трейлинг ATR, параметры 3)

Итог: Отменено

BtcVolRegimeGatedMomentumConfluenceLS

Измеримая выборка за всю историю: 121 сделок за 2437 дней, avg_trade_return_pct 2.06% (значительно выше порога комиссий 0.15%), PF 1.48, положительная альфа (0.139) при почти нулевой бете (0.027), то есть это…

Гипотеза

Стратегия LONG-SHORT на одном инструменте, использующая только OHLCV, для бессрочного контракта BTCUSDT.BINANCE USD-M. Она применяет единственный механизм фабрики с доказанным положительным результатом ONLY — сочетание импульса с основным горизонтом 4H и подтверждением на 1D (вариант, переживший этап бумажной торговли, коэффициент Шарпа ~1.99), — но добавляет VOLATILITY-REGIME ENTRY GATE: сделка по импульсу открывается только при нормальном или повышенном режиме реализованной волатильности, а при крайне низкой……Показать большеСвернуть

Стратегия LONG-SHORT на одном инструменте, использующая только OHLCV, для бессрочного контракта BTCUSDT.BINANCE USD-M. Она применяет единственный механизм фабрики с доказанным положительным результатом ONLY — сочетание импульса с основным горизонтом 4H и подтверждением на 1D (вариант, переживший этап бумажной торговли, коэффициент Шарпа ~1.99), — но добавляет VOLATILITY-REGIME ENTRY GATE: сделка по импульсу открывается только при нормальном или повышенном режиме реализованной волатильности, а при крайне низкой волатильности стратегия остаётся вне рынка. Это отдельный способ повысить устойчивость, которого нет в моих текущих вариантах: варианты с другими горизонтами (более быстрые 1H+4H, макровариант 4H+1W) меняли таймфрейм и получили результат FALSIFIED; масштабирование тренда с учётом волатильности-TARGETED масштабирует SIZE обратно пропорционально волатильности; этот вариант вместо этого FILTERS ENTRIES в зависимости от режима волатильности. Основание — исчерпывающие результаты: преимущество импульса на BTC реально, но нестабильно, а варианты проваливаются из-за частых разворотов в режимах с низкой уверенностью сигнала — именно при крайне низкой волатильности в боковых диапазонах трендовые сигналы дают ложные развороты и приводят к убыткам. Отказ от торговли в таких условиях (вход только при волатильности, указывающей на реальное направленное движение) прямо нацелен на эту проблему и потенциально способен повысить преимущество на сделку и сократить просадку в боковом рынке. Стратегия остаётся на BTC (единственный инструмент с подтверждённой торгуемостью), использует только OHLCV (единственный тип данных с надёжной измеримостью и полным покрытием; сетки/дополнительные данные/относительная стоимость не прошли проверку исполнения, покрытия или DD), работает с одним инструментом, безопасна для разработчика благодаря стандартным инкрементальным индикаторам и даёт измеримую выборку (~100-200 сделок за многолетнюю историю). Она пополняет недостающую категорию LONG-SHORT (13.7% против 86.3% у стратегий только с длинными позициями). 3 параметры; порог режима волатильности определяется по скользящему процентилю (без подгонки), чтобы ограничить переобучение.

В этой итерации ровно одно изменение, и это чистое улучшение производительности без влияния на поведение: раньше процентиль волатильности в _vol_rank на каждом баре сканировал все 720 наблюдений окна, теперь выполняется поиск bisect по отсортированной копии того же окна с поддержанием через insort/удаление по индексу. Я сравнил производительность на 25,000 наблюдениях — 2.85 с против 0.10 с, ускорение в 28x раза; полученные ранги побитово совпали со старым сканированием, поэтому все решения фильтра, входы, выходы……Показать большеСвернуть

В этой итерации ровно одно изменение, и это чистое улучшение производительности без влияния на поведение: раньше процентиль волатильности в _vol_rank на каждом баре сканировал все 720 наблюдений окна, теперь выполняется поиск bisect по отсортированной копии того же окна с поддержанием через insort/удаление по индексу. Я сравнил производительность на 25,000 наблюдениях — 2.85 с против 0.10 с, ускорение в 28x раза; полученные ранги побитово совпали со старым сканированием, поэтому все решения фильтра, входы, выходы и метрики не изменились, а ранее опубликованные числа по-прежнему воспроизводятся из этого артефакта. Скажу прямо, что это исправление даст и чего не даст: оно экономит примерно 3 секунд при бюджете в 300 секунд. Все остальные операции на каждом баре уже имеют сложность O(1): для согласования импульса нужны два чтения индекса, ATR накапливаются постепенно, предыдущий сигнал хранится в состоянии, а переинициализация трейлинга ограничена 200 барами и выполняется только при первом обнаружении позиции. Основные затраты связаны не с кодом стратегии. Ранее в этой сессии я профилировал этот конвейер: BacktestRunner вызывает catalog.bars() для каждого типа баров, а NautilusTrader через fsspec glob-операцию просматривает всё дерево баров при каждом вызове; это стоит около 95 с на запрос bars() и ещё около 25 с на instruments(), практически независимо от числа баров (61 баров заняли 125.8 с, 2,401 — 137.9 с, 6,999 — 140.4 с; около 200 с из 215 с профилируемого запуска пришлись на glob/walk в fsspec). Поэтому стратегия с одним инструментом тратит около 120 с ещё до выполнения какой-либо логики, а песочница с конкурирующими запусками, использующими тот же ввод-вывод, может потратить только на это больше 300 с. Если время ожидания снова истечёт, исправлять нужно инфраструктуру — кэшировать список файлов после glob между вызовами catalog.bars() в рамках одного запуска или запрашивать каталог самого инструмента вместо всего дерева data/bar, — а не продолжать оптимизировать стратегию. Я не менял сигнал, фильтр, пороги, выходы или размер позиции, потому что оба условия отказа, заранее зафиксированные мной в итерации 2, уже сработали; менять механизм сейчас означало бы искать положительный результат после достижения стоп-условий и исказить отчёт.

Ослабшее преимущество импульсной стратегии с парным горизонтом TF не достигает профиля, необходимого для выживания на выборке L82 (коэффициент Шарпа 0.90 против >1.3, PF 1.48 против >2.0, DD 26.7% против <20%); оптимизировать её ещё 2 часов нецелесообразно. Механизм сработал 2020-2023, но слаб в 2024 (+6%) и резко убыточен в 2025 (-20.5%); скользящий коэффициент Шарпа глубоко отрицателен (-3–-7) на протяжении 2025-2026. Отложенная выборка 20% полностью приходится на этот убыточный режим и почти наверняка не пройдёт строгий порог проверки: коэффициент Шарпа >0; базовый коэффициент Шарпа <1.0 — это потолок, который поправка на смещение из-за ~225 испытаний только снижает. Режимный фильтр волатильности — основная идея этого варианта — явно ничего не добавил (regime_performance одинаковый при 0.88/0.95/0.95, в нестабильном рынке DD всё ещё 26.7%); оптимизация лишь подогнала бы пороги импульса под прежние бычьи режимы. Схема провала: L82/L63 — парный импульсный сигнал TF ниже уровня выживания, недавний режим ослаб, что обрекает отложенную выборку на убыток.

Реализация

Лонг-шортовый импульс на 4 часов для бессрочного контракта BTCUSDT.BINANCE USD-M с минимальным подтверждающим периодом 1 дней; открывать позицию разрешено, только когда реализованная волатильность находится в нормальном или повышенном режиме. Оба импульсных горизонта рассчитываются по одному ряду 4H в единицах сигмы случайного блуждания (изменение за n баров, делённое на ATR*sqrt(n)); нога 4H задаёт силу сигнала, а нога 1D служит направленным разрешающим порогом на уровне 25% от порога входа. Режимный фильтр……Показать большеСвернуть

Лонг-шортовый импульс на 4 часов для бессрочного контракта BTCUSDT.BINANCE USD-M с минимальным подтверждающим периодом 1 дней; открывать позицию разрешено, только когда реализованная волатильность находится в нормальном или повышенном режиме. Оба импульсных горизонта рассчитываются по одному ряду 4H в единицах сигмы случайного блуждания (изменение за n баров, делённое на ATR*sqrt(n)); нога 4H задаёт силу сигнала, а нога 1D служит направленным разрешающим порогом на уровне 25% от порога входа. Режимный фильтр использует скользящий процентиль относительного ATR (ATR/close) относительно собственного распределения за предыдущие 720 баров и открывается на 30-м процентиле — это самоадаптирующийся уровень, а не подогнанный абсолютный порог. Когда фильтр закрыт, сигнал ослабляется и ограничивается значением строго ниже уровня выхода, поэтому он не может ни открыть позицию, ни самостоятельно её закрыть. Для входа требуется новое пересечение порога входа; выходы — разворот сигнала по гистерезису на половине порога входа и трейлинг-стоп ATR от лучшей цены закрытия с момента входа; оба условия проверяются на каждом баре, поэтому управление риском никогда не блокируется фильтром. Размер позиции рассчитывается так, чтобы фиксированная доля капитала находилась под риском до трейлинг-стопа; номинал ограничен 1x капитала, плечо — 1.0.

Результаты верификации

sandbox_timeout: проверка не пройдена (уровень 3 — бэктест в песочнице): дымовой тест превысил лимит времени 300 с на окне примерно в 20000 баров (2400 дней данных BTCUSDT.BINANCE-4-HOUR-LAST-EXTERNAL). Почти всегда это означает, что объём работы на каждом баре растёт вместе с историей, например повторно сканируется весь ряд финансирования/дополнительных данных или внутри calculate_signal()/on_bar() на каждом баре пересоздаётся список и вызывается min()/sorted(). Заранее создайте отсортированные массивы временных меток ONCE в __init__ и используйте bisect либо кэшируйте запросы по временной метке, чтобы стоимость операций на бар составляла O(log n), а не O(n).

Обзор бэктеста

Шарп
0,90
Общая доходность
153,70%
Максимальная просадка
26,65%
Всего сделок
121
Доля прибыльных
39,7%
Профит-фактор
1,48

Измеримая выборка за всю историю: 121 сделок за 2437 дней, avg_trade_return_pct 2.06% (значительно выше порога комиссий 0.15%), PF 1.48, положительная альфа (0.139) при почти нулевой бете (0.027), то есть это действительно лонг-шортовая стратегия, а не криптовалютная бета.

Относится к единственному семейству механизмов, пригодных для продвижения фабрикой (4H+1D сочетание импульса с двойным TF на Binance USD-M, L82); чистая реализация для одного инструмента только на OHLCV, разработчик уже исправил два известных дефекта сочетания сигналов и выхода.

По всем показателям результат ниже профиля парной TF, необходимого для выживания на выборке L82: коэффициент Шарпа 0.90 (нужно >~1.3), PF 1.48 (нужно >2.0), max_drawdown 26.7% (нужно <20%). Базовый коэффициент Шарпа <1.0 — это потолок, который поправка на смещение из-за ~225 испытаний только снижает (L63/L82).

Преимущество явно ослабло: 2020 +31.9%, 2021 +36.5%, 2022 +19.4%, 2023 +19.1%, затем 2024 +6.2%, 2025 -20.5%, 2026 +6.5%. rolling_sharpe глубоко отрицательный (-3–-7) на отрезке 2025-08–2026, а information_ratio составляет -0.63.

Отложенная выборка 20% (последние ~15 месяцев) полностью приходится на убыточный режим 2025-2026, поэтому почти наверняка не пройдёт строгую проверку (коэффициент Шарпа > 0). Для единственной конфигурации значение PSR уже составляет лишь 0.9487.

Фильтр режима волатильности, составляющий всю основу этого варианта, ничего не добавил: regime_performance одинаковый в спокойных, нормальных и стрессовых условиях (0.88/0.95/0.95), а просадка в боковом рынке по-прежнему составляет 26.7% — вопреки гипотезе, этот фактор не повысил преимущество на сделку и не сократил просадку в боковом рынке.

История итераций

Проверка не пройдена (уровень 4 — проверка QA): - UNMEASURABLE SAMPLE, AND THE CHOSEN LEVER MOVES AWAY FROM MEASURABILITY. В симуляции получено 6 сделок за 363 дней (~6/год -> ~36 за несколько лет, ниже порога ~100, L16), что противоречит собственному заявлению гипотезы о ~100-200 за несколько лет. Это структурная проблема, а не случайность: фильтр волатильности-EXCLUSION может только REDUCE число сделок относительно выжившей стратегии без фильтра 4H+1D — он отсекает нижние ~30% баров по волатильности, — поэтому……Показать большеСвернуть

Проверка не пройдена (уровень 4 — проверка QA): - UNMEASURABLE SAMPLE, AND THE CHOSEN LEVER MOVES AWAY FROM MEASURABILITY. В симуляции получено 6 сделок за 363 дней (~6/год -> ~36 за несколько лет, ниже порога ~100, L16), что противоречит собственному заявлению гипотезы о ~100-200 за несколько лет. Это структурная проблема, а не случайность: фильтр волатильности-EXCLUSION может только REDUCE число сделок относительно выжившей стратегии без фильтра 4H+1D — он отсекает нижние ~30% баров по волатильности, — поэтому его добавление к уже избирательному сочетанию сигналов на 1.0-сигма (оба горизонта должны превысить порог по signed-minimum, плюс требуется новое пересечение) делает выборку SMALLER, что прямо противоположно нужному направлению для семейства стратегий, где регулярно не хватает объёма выборки (1H+4H 9/год, тройной iter1 12/год, недельная 9-22/год — все результаты невозможно измерить). Метрики при n=6 — шум, несмотря на заманчивые заголовочные показатели: profit_factor 3.95 и avg_trade_return_pct 4.04% на SIX сделках, коэффициент Шарпа 0.897, а CI [-0.71, 2.29] охватывает ноль, return_skew 2.73, return_kurtosis 50.5; кроме того, largest_win $7,072 составляет ~68% от чистой прибыли в $10,411 — результат определяется хвостом распределения и неотличим от удачи.

Проверка не пройдена (уровень 4 — проверка QA): - THE COUNT FIX WORKED AND REVEALED NO EDGE -- заранее зафиксированное условие отказа самого разработчика. Исправление селективности базовой версии (дневная нога 1 стала направленным фильтром FLOOR, а не равноправным порогом со знаком; то же исправление изменило результат макроварианта с 9 на 22) правильно увеличило число сделок с 6 до 21 за 363 дней (около 105-130 за многолетний период — примерно измеримая выборка). Но расширенная измеримая выборка убедительно……Показать большеСвернуть

Проверка не пройдена (уровень 4 — проверка QA): - THE COUNT FIX WORKED AND REVEALED NO EDGE -- заранее зафиксированное условие отказа самого разработчика. Исправление селективности базовой версии (дневная нога 1 стала направленным фильтром FLOOR, а не равноправным порогом со знаком; то же исправление изменило результат макроварианта с 9 на 22) правильно увеличило число сделок с 6 до 21 за 363 дней (около 105-130 за многолетний период — примерно измеримая выборка). Но расширенная измеримая выборка убедительно показывает отрицательный результат: total_return -8.12%, profit_factor 0.650, коэффициент Шарпа -0.532 (CI [-2.28, 0.93]), win_rate 0.333, avg_trade_return_pct -0.592% (отрицательный и ниже порога комиссий 0.15%), матожидание -$386/сделку. Соотношение прибыли к риску благоприятное (avg_win $2,151 против avg_loss $1,655, около 1.30), но частота прибыльных сделок 33% не позволяет получить нужный результат (EV ~= 0.333 x 2151 - 0.667 x 1655 ~= -$388). Срабатывают оба заранее зафиксированных разработчиком условия отказа: число сделок ниже примерно 30/год AND измеримая выборка отрицательная / ниже порога комиссий. Фильтр режима волатильности ничего не добавляет к сочетанию импульсных сигналов на BTC.

Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.