Стратегии
Бэктест стратегии SOL 4H: прорыв с подтверждением объёмом | Stratmill
Итог: Отменено
SolFourHourVolumeConfirmedBreakoutLong
Механизм реализован корректно (169 сделок за 6.6 лет, ограничений покрытия нет, исправление буфера итерации-4 работает)
Гипотеза
Исправляет сбой итерации-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, вместо сокращения окна режима.
Реализация
Длинная стратегия прорыва 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 — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.