Стратегии
Бэктест стратегии: основные рынки Hyperliquid 4H, двойной временной ряд EMA, абсолютный тренд LONG/SHORT (ATR-трейлинг, 3-параметр, стиль управляемых фьючерсов) | Stratmill
Итог: Отменено
HyperliquidMajors4hDualEmaTrendLongShortAtrBasket
Порог бэктеста: - метрики ненадёжны: 636 сделок / 956 дней данных — слишком мало свидетельств (нужно не менее 5 сделок за не менее 10 дней); повысь частоту сигналов или расширь окно
Гипотеза
backtest_failed:data: полный бэктест не удалось запустить 3 раз — test_agent.py", строка 424, в _ensure_funding_for_perp_legs raise RuntimeError( RuntimeError: данные о ставках финансирования недоступны для бессрочного контракта 'AVAXUSD.HYPERLIQUID' — сбор по запросу не удался или на площадке нет истории ставок финансирования (бэктест заблокирован ради точности; задай SF_DISABLE_ONDEMAND_FUNDING=1, чтобы обойти это ограничение) Сбой конвейера/данных, а не вердикт о стратегии; повтори запуск после устранения причины.
Реализация
Корзина с длинными и короткими позициями на основе абсолютного моментума (тренда временного ряда) для пяти ликвидных бессрочных контрактов Hyperliquid (BTCUSD, ETHUSD, SOLUSD, AVAXUSD, BNBUSD) на барах 4-HOUR. Каждый инструмент торгуется независимо: длинная позиция, пока 20-EMA выше 50-EMA, короткая — пока ниже; выход происходит при развороте пересечения EMA или неблагоприятном движении на ATR(14) x 3 от цены входа. Размер позиций выравнивает волатильностный риск (капитал * risk_frac * цена / (atr_stop_mult * ATR)); каждая позиция ограничена 18% капитала. Только OHLCV — без вспомогательных данных.
Результаты верификации
Если задуман трейлинг-стоп, отслеживай максимальную благоприятную цену позиции и закрывай её, когда цена отступит от этого максимума на atr_stop_mult*ATR, а не от цены входа.
В заголовке гипотезы указан стоп «ATR-Trailing», но при выходе применяется стоп FIXED ATR, рассчитанный от цены исполнения (entry - price > atr_stop_mult*ATR), а не трейлинг-стоп от максимума. В описании конфигурации точно указано «неблагоприятное движение на ATR(14) x 3 от цены входа», так что замысел задокументирован. Структурные средства контроля риска, названные в гипотезе (ATR стоп + выход при развороте пересечения EMA), присутствуют, поэтому это расхождение не блокирует проверку; однако настоящий трейлинг-стоп позволил бы зафиксировать больше прибыли в удачном тренде и лучше соответствовал бы заголовку.
Проверь, что base_template направляет warmup через override; если нет, переименуй его в закрытый вспомогательный метод стратегии, чтобы избежать незаметного затенения.
min_bars_required() переопределяет метод фреймворка (предупреждение статического анализатора base_shadow). Переопределение возвращает допустимое целое число (>= ema_slow + 5) и используется для проверки прогрева; поведение выглядит намеренным и корректным, но подтверди, что базовый шаблон использует это переопределение для проверки прогрева, а не собственный расчёт.
Дымовой тест в песочнице дал нестабильный положительный результат: profit_factor 1.002, коэффициент Шарпа 0.497, win_rate 29%, max_drawdown 45.8%. Анализ режимов показывает, что прибыльным был только «спокойный» терциль (+53%), тогда как «обычный» (-31%) и «стрессовый» (-27%) принесли убыток — преимущество сосредоточено в одном режиме волатильности. Пропускная способность низкая (capacity_usd около $109K, impact_cost_pct 95.7%, impact_folded); причина — распределение размера по ATR для пяти позиций, каждая до 18% (avg_position_pct около 19.6%, экспозиция около 487%). На менее ликвидных крупных активах (AVAX/BNB) влияние на рынок может съесть небольшое преимущество на сделку при полном бэктесте. avg_trade_return_pct 0.44% превышает порог комиссий, поэтому стоит провести полный бэктест; однако аналитик должен в первую очередь проверить, что PF едва выше 1, и оценить концентрацию результатов по режимам.
Анализ
Порог бэктеста: - метрики ненадёжны: 636 сделок / 956 дней данных — слишком мало свидетельств (нужно не менее 5 сделок за не менее 10 дней); повысь частоту сигналов или расширь окно
История итераций
Проверка не пройдена (Layer 1 — статический анализ): - Не найден класс, наследующий FactoryStrategy (строка None) - Не реализован обязательный метод: should_enter (строка None) - Не реализован обязательный метод: calculate_signal (строка None) - Не реализован обязательный метод: position_size (строка None) - Не реализован обязательный метод: should_exit (строка None)
sandbox_timeout: проверка не пройдена (Layer 3 — бэктест в песочнице): дымовой тест превысил лимит времени 300с на окне примерно в 20000 баров (2400 дней с BTCUSD.HYPERLIQUID-4-HOUR-LAST-EXTERNAL). Почти всегда это означает, что объём работы на бар растёт вместе с историей, например полный повторный просмотр ряда ставок финансирования или вспомогательного ряда либо создание списка с вызовом min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Предварительно отсортируй массивы временных меток ONCE в __init__ и используй bisect либо кэшируй результаты поиска по временной метке, чтобы стоимость обработки бара была O(log n), а не O(n).
Обзор бэктеста
- Шарп
- 0,24
- Общая доходность
- -4,11%
- Максимальная просадка
- 46,38%
- Всего сделок
- 636
- Доля прибыльных
- 28,3%
- Профит-фактор
- 0,95
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.