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

Стратегии

Бэктест стратегии SOL 4H: прорыв с подтверждением объёмом | Stratmill

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

SolFourHourVolumeConfirmedBreakoutLong

Механизм реализован корректно (169 сделок за 6.6 лет, ограничений покрытия нет, исправление буфера итерации-4 работает)

Гипотеза

Длинная стратегия прорыва одного инструмента на бессрочных фьючерсах SOLUSDT с использованием баров 4H и только данных OHLCV, с фильтром режима по дневным барам. По архитектуре MIRRORS проверенный прорыв с подтверждением объёмом BNB 4H (Sharpe 2.03, paper_stage), применённый к SOL с ортогональностью механизма и таймфрейма относительно существующей стратегии SOL в конвейере (SolDailyEmaTrendContinuationLong работает на дневном таймфрейме / основан на пересечении EMA). Важно, что это предложение учитывает недавно……Показать большеСвернуть

Длинная стратегия прорыва одного инструмента на бессрочных фьючерсах SOLUSDT с использованием баров 4H и только данных OHLCV, с фильтром режима по дневным барам. По архитектуре MIRRORS проверенный прорыв с подтверждением объёмом BNB 4H (Sharpe 2.03, paper_stage), применённый к SOL с ортогональностью механизма и таймфрейма относительно существующей стратегии SOL в конвейере (SolDailyEmaTrendContinuationLong работает на дневном таймфрейме / основан на пересечении EMA). Важно, что это предложение учитывает недавно описанный сценарий провала: «автоматическое копирование архитектуры BTC/ETH на другие крупные криптоактивы без проверки чувствительности» (BNB Golden Cross и ETH Spot Drawdown провалились по этой причине), и прямо учитывает этот риск: (a) требует sensitivity_passed на этапе оптимизации как обязательный допуск к продвижению (cliff_count должен быть 0 при всех параметрах); (b) выбирает конструкцию, подходящую для SOL, а не неподходящую для SOL: прорывы на 4H с подтверждением объёмом соответствуют эмпирически высокой активности розничной торговли DeFi на SOL (SOL входит в топ--3 бессрочных контрактов по объёму за 4H, сравнимому с BNB), тогда как конструкции возврата к среднему или неглубокого отката неоднократно проваливались на SOL (прорыв Keltner, контртрендовые варианты с финансированием). В основе — стратегия TRENDING на высокоимпульсном активе, NOT стратегии возврата к среднему на более плавном активе (именно этот фактор привёл к провалу ETH Spot Drawdown). Конструкция с одним доминирующим фильтром (200-дневный режим SMA + максимум за 20 баров 4H + подтверждение объёмом), явно NOT многоусловного фильтра AND. Настроена примерно на 30-60 входов в год на барах 4H (как у стратегии BNB по эмпирической частоте сигналов) — заметно выше порога, при котором сигналов слишком мало.

Исправляет сбой итерации-3 Layer-3 (нет сделок / 0 проверенных баров). Причина: базовый класс ограничивает буфер основных баров значением self._max_bars = 500, но min_bars_required() = regime_bars(1200) + 20 + 5 = 1225. Поскольку len(self._bars) не может превысить 500, условие `len(self._bars) < min_bars_required()` в _maybe_process_primary всегда было истинным, поэтому _process_primary и, следовательно, should_enter никогда не вызывались. Минимальное исправление увеличивает буфер баров до regime_bars + 60 (1260) в __init__, чтобы накопилась полная история режима за 200 дней и стал доступен min_bars_required, позволяя оценивать бары и запускать вход на прорыве. Вся логика сигналов, условия режима / прорыва / объёма, выходы, расчёт размера позиции с учётом используемого плеча и чистые импорты (уже прошедшие Layers 1 и 2) не изменились. Это сохраняет верность гипотезы с фильтром режима на 200 дней (1200 баров 4H), повторяющим проверенную архитектуру BNB, вместо сокращения окна режима.

Надёжного преимущества для оптимизации нет. Базовый Sharpe 0.171, а бутстрэп-интервал CI [-0.593, 0.983] пересекает ноль; profit_factor 1.079 (<1.2) и information_ratio -1.02 означают, что у стратегии нет значимого преимущества с поправкой на риск и она уступает удержанию SOL. Показатель +17.9% за 6.6 лет (~2.9%/год) обусловлен выбросами (эксцесс 21.6) и усилен плечом (avg_position_pct 128%). Рыночное воздействие уже поглощает 39.3% валовой доходности при ёмкости всего $648K, поэтому даже небольшое преимущество —……Показать большеСвернуть

Надёжного преимущества для оптимизации нет. Базовый Sharpe 0.171, а бутстрэп-интервал CI [-0.593, 0.983] пересекает ноль; profit_factor 1.079 (<1.2) и information_ratio -1.02 означают, что у стратегии нет значимого преимущества с поправкой на риск и она уступает удержанию SOL. Показатель +17.9% за 6.6 лет (~2.9%/год) обусловлен выбросами (эксцесс 21.6) и усилен плечом (avg_position_pct 128%). Рыночное воздействие уже поглощает 39.3% валовой доходности при ёмкости всего $648K, поэтому даже небольшое преимущество — артефакт игрушечного масштаба. Это класс направленных пробоев одного актива OHLCV с нулём выживших (L9/L41/L63); рамка родственной BNB 4H стратегии на бумажном этапе не переносится: на SOL тот же механизм даёт Sharpe 0.17 / PF 1.08, а жизнеспособный вариант L82 — согласование импульса на двух таймфреймах, а не пробой одного актива с фильтром режима. Базовый Sharpe ниже -1.0 для этого класса — потолок; дефляция и проверка на отложенной выборке могут его только снизить, и настройка параметров не поднимет показатель до надёжного уровня, достаточного для продвижения. Ограничение не в комиссиях (avg_trade 0.266%), но оптимизация не стоит 2 часов. Типичный сбой: направленный пробой одного актива no_edge.

Реализация

Длинная стратегия прорыва Donchian с подтверждением объёмом на барах 4H для бессрочных фьючерсов SOLUSDT (Binance USD-M, плечо 2x); входы разрешены фильтром режима SMA, эквивалентным 200 дням (1200 баров 4H), который рассчитывается напрямую по основному ряду 4H. Открывает длинную позицию, когда цена выше долгосрочного SMA (бычий режим), пробивает максимум Donchian за предыдущие 20 баров, а объём превышает 1.5x его среднего за 20 баров. Выходит при пробое минимума Donchian за 10 баров, стоп-лоссе 6%, тейк-профите 18% или временном стопе через 30 баров. Чистая стратегия OHLCV на одном инструменте.

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

CLEAN RESTART 2026-09-04 — история вердиктов и записи обучения этого запуска удалены, он начат заново с этапа проверки. Предыдущий отказ был вызван конвейером, а не рынком: тестовый стенд Layer-2 неверно связывал вспомогательные методы @staticmethod (исправлено), QA выносил окончательные вердикты о производительности по неоптимизированному пробному тесту (удалено — теперь QA оценивает только корректность), а тайм-ауты песочницы возникли из-за нехватки слотов для бэктеста (исправлено). Гипотеза и код стратегии не изменились. Оцени код по существу; производительность будет определена позднее полным бэктестом и оптимизатором.

Не требуется.

Фильтр режима на 200 дней рассчитан по 1200 барам 4H, а не по фактическим дневным барам — это корректный эквивалент. Требуется буфер более чем на 1200 баров; исправление итерации-4 (увеличение _max_bars до 1260) устраняет проблему, и песочница подтверждает, что бары теперь оцениваются.

Действия не требуются.

_bars_held может увеличиться до 1 на баре входа в зависимости от порядка вызова, из-за чего эффективный временной стоп составляет около 29-30 баров. Смещение на один бар несущественно.

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

Шарп
0,17
Общая доходность
17,95%
Максимальная просадка
23,86%
Всего сделок
169
Доля прибыльных
53,8%
Профит-фактор
1,08

Механизм реализован корректно (169 сделок за 6.6 лет, ограничений покрытия нет, исправление буфера итерации-4 работает)

avg_trade_return_pct 0.266% превышает минимальный уровень комиссии Binance 0.15% USD-M

max_drawdown 23.9% ограничен (хотя CI достигает 76.9%)

Базовый Sharpe 0.171, бутстрэп-интервал CI [-0.593, 0.983] пересекает ноль — значимого преимущества с поправкой на риск нет

profit_factor 1.079, ниже порога значимого преимущества 1.2

information_ratio -1.02 — уступает простому удержанию SOL с поправкой на риск

impact_cost_pct 39.3% с ёмкостью всего $648K — влияние на рынок съедает около 39% валовой доходности, преимущество игрушечного масштаба

Направленный пробой по одному инструменту OHLCV — класс с нулём выживших (L9/L41/L63); базовый Sharpe <1.0 — верхний предел

Основной показатель +17.9% — около 2.9%/год, обусловлен выбросами (эксцесс 21.6), усилен средней позицией 128%

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

Проверка не пройдена (Layer 2 — синтетические сценарии): Использованные параметры: ['vol_mult', 'vol_period', 'min_notional', 'position_pct', 'exit_lookback', 'max_hold_bars', 'regime_period', 'stop_loss_pct', 'take_profit_pct', 'breakout_lookback'] Проверь, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_downtrend: зафиксированный сигнал: все 476 сигналов одинаковы (значение=0.0). Вероятно, в calculate_signal() ошибка — сигнал не меняется. - volatility_spike: зафиксированный сигнал: все 476 сигналов одинаковы (значение=0.0). Вероятно, в calculate_signal() ошибка — сигнал не меняется. - zero_volume: зафиксированный сигнал: все 476 сигналов одинаковы (значение=0.0). Вероятно, в calculate_signal() ошибка — сигнал не меняется. - price_gap: зафиксированный сигнал: все 476 сигналов одинаковы (значение=0.0). Вероятно, в calculate_signal() ошибка — сигнал не меняется.

Проверка не пройдена (Layer 3 — бэктест в песочнице): сделок не найдено Тип баров: SOLUSDT.BINANCE-4-HOUR-LAST-EXTERNAL, обработано баров: 12467 Диагностика: should_enter() возвращала сторону 0 раз на 12443 проверенных барах -> сигнал ENTRY CONDITION ни разу не сработал. Ослабь логику входа / пороги. Убедись, что стратегия совершает сделки на заданных данных и параметрах.

Проверка не пройдена (Layer 3 — бэктест в песочнице): сделок не найдено Тип баров: SOLUSDT.BINANCE-4-HOUR-LAST-EXTERNAL, обработано баров: 12665 Диагностика: should_enter() возвращала сторону 0 раз на 0 проверенных барах -> сигнал ENTRY CONDITION ни разу не сработал. Ослабь логику входа / пороги. Убедись, что стратегия совершает сделки на заданных данных и параметрах.

Проверка не пройдена (Layer 3 — бэктест в песочнице): пробный тест превысил лимит времени 300 с. Почти всегда причина — работа на каждом баре, масштабируемая по длине истории, например повторный просмотр полного ряда финансирования / дополнительных данных или пересоздание списка с вызовом min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. В __init__ заранее подготовь отсортированные массивы временных меток ONCE и используй bisect либо кэшируй запросы по временной метке, чтобы затраты на бар составляли O(log n), а не O(n).

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