Стратегии
Премия за риск, связанный с бетой снижения, Hyperliquid: длинные позиции в альткоинах, чувствительных к обвалам, против сопоставимых альткоинов с низкой чувствительностью
Итог: Отменено
HyperliquidDownsideBetaPremiumPair
Сводка по итогам
HyperliquidDownsideBetaPremiumPair проверяла, переносится ли опубликованная премия за бету снижения криптовалют на четыре бессрочных контракта Hyperliquid, используя парные длинные и короткие позиции с согласованными бетами на синхронизированных барах 4 часа. За 4 итераций код дорабатывали: в итерации 3 явно установили плечо 1.0, а в итерации 4 заменили пересборку массивов на каждом баре кольцевым буфером numpy. Все попытки по-прежнему превышали лимит 300 с для бэктеста в изолированной среде уровня 3, поэтому проверку прекратили. Стратегия так и не дошла до бэктеста, оптимизации, аналитической или риск-проверки; гипотеза остаётся непроверенной.
Гипотеза
На Hyperliquid приходится 7.5% экспериментов при целевом значении 20%; доля стратегий с длинной и короткой позициями составляет 16.7% при подразумеваемом минимуме 45%. Эта гипотеза отвечает на оба пробела и снижает концентрацию на одном символе. Опционы по-прежнему представлены недостаточно, однако задокументированные структурные сбои не оправдывают ещё одно предложение по опционам. В отличие от предыдущих стратегий разворота пар на Hyperliquid, эта проверяет компенсацию за принятие асимметричного систематического риска, не предполагая коинтеграцию или схождение спреда. Данные о концентрации в корпусе отсутствовали, поэтому оценить доли отдельных символов не удалось. В предоставленных выдержках из библиотеки не было подходящего реализуемого механизма.
verification_loop: sandbox_timeout: проверка не пройдена (уровень 3 — бэктест в изолированной среде): дымовой тест превысил лимит времени 300 с на окне примерно в 20000 баров (2400 дней по LINKUSD.HYPERLIQUID-4-HOUR-LAST-EXTERNAL). Почти всегда это означает, что объём работы на бар растёт вместе с историей, например повторно сканируется весь ряд финансирования или вспомогательных данных либо внутри calculate_signal()/on_bar() на каждом баре заново строится список и вызывается min()/sorted(). Предварительно вычисли отсортированные массивы временных меток ONCE в __init__ и используй bisect либо кэшируй результаты поиска по временным меткам, чтобы стоимость обработки одного бара была O(log n), а не O(n).
Реализация
Парная стратегия с длинной и короткой позициями на четырёх бессрочных контрактах Hyperliquid (LINK, AVAX, XRP, DOGE) использует бары 4 ч. На каждом полном синхронизированном наблюдении оцениваются обычная бета и бета снижения каждого инструмента относительно рыночного фактора с равными весами за период beta_lookback_bars. Среди пар с обычными бетами в диапазоне [0.5, 2.0], различающимися не более чем на 0.2, выбирается наибольший разрыв бет снижения. Если разрыв не меньше asymmetry_gap, открывается длинная позиция по инструменту с высокой бетой снижения и короткая — по инструменту с низкой, с равным номиналом. Позиции удерживаются 84 баров; стоп по паре привязан к моменту открытия (минимум из 8% и 2x волатильности спреда), период охлаждения — 6 баров.
Результаты верификации
sandbox_timeout: проверка не пройдена (уровень 3 — бэктест в изолированной среде): дымовой тест превысил лимит времени 300 с на окне примерно в 20000 баров (2400 дней по LINKUSD.HYPERLIQUID-4-HOUR-LAST-EXTERNAL). Почти всегда это означает, что объём работы на бар растёт вместе с историей, например повторно сканируется весь ряд финансирования или вспомогательных данных либо внутри calculate_signal()/on_bar() на каждом баре заново строится список и вызывается min()/sorted(). Предварительно вычисли отсортированные массивы временных меток ONCE в __init__ и используй bisect либо кэшируй результаты поиска по временным меткам, чтобы стоимость обработки одного бара была O(log n), а не O(n).
После отправки проверь на следующем баре, что по обоим инструментам есть открытая позиция или отложенный ордер. Если позиция есть только по одному инструменту, закрой её, а не считай пару открытой.
Заявки по двум ногам отправляются независимо. Если _submit_entry_instrument пропускает одну ногу (рынок не готов, заявка на вход уже отправлена или блок приостановлен), _pair_open всё равно устанавливается в True. Оставшаяся нога удерживается без хеджирования до 84 баров. _manage_open по-прежнему рассчитывает PnL пары по ценам закрытия обеих ног, поэтому стоп измеряется для позиции, которой не существует.
Оставь как есть или в следующей итерации рассмотри более широкий рыночный фактор, не включающий торгуемые инструменты. Для этого потребуется изменить гипотезу и указать дополнительный инструмент.
Рыночный фактор — это среднее с равными весами четырёх торгуемых инструментов. Каждый инструмент составляет 25% собственного бенчмарка, что смещает обычные беты к 1 и сглаживает разброс бет по риску снижения. В гипотезе не указан рыночный ориентир, а разработчик говорит, что это сделано намеренно, чтобы стратегия оставалась в пределах заявленного набора инструментов; поэтому это допустимо. Однако такой ориентир слабее, чем в исходной статье.
Необязательно: добавь стоп-ордера reduce-only для каждого инструмента, если нужен более строгий контроль убытков.
Стоп по паре проверяется только при закрытии 4-часового бара, выход выполняется рыночными ордерами, поэтому гэп через стоп может привести к убытку больше stop_pct. Гипотеза не задаёт фиксированный стоп; это только информационное замечание.
Кэшируй окно как скользящий кольцевой буфер numpy или пересчитывай беты, только когда позиция закрыта и период охлаждения завершён. Беты не нужны, пока удерживается пара: для выхода используются только время и цена.
Время выполнения: в изолированной среде обработка 4,340 баров по четырём инструментам заняла 258 с — почти достигнут лимит 300 с. Объём работы на бар ограничен (окно numpy размером 360x4 заново собирается из deque, без повторного сканирования истории), поэтому затраты не растут с длиной бэктеста. Тем не менее полный запуск примерно на 5,800 барах с учётом испытаний оптимизации будет медленным. Установлено значение runtime_review_required.
Песочница работала 725 дней и закрыла 14 пар (28 позиций). Фактор прибыли составил 0.998, а avg_trade_return_pct 0.027% — значительно ниже минимального уровня около 0.15% за полный цикл сделки. Смоделированные издержки влияния на рынок составили 110% от валовой прибыли, то есть одни эти издержки превысили валовое преимущество. Финансирование не учитывалось (funding_events_available=0), хотя каждая пара удерживается 14 дней на бессрочных контрактах Hyperliquid, где финансирование может составлять несколько базисных пунктов в день на каждую ногу. Аналитику сначала следует проверить доходность каждой пары за весь период после учёта влияния на рынок и финансирования. Также нужно проверить, сохраняется ли разрыв бет снижения вне выборки (беты рассчитаны относительно равновзвешенной корзины из четырёх монет, а не широкого рынка). Премия в исходной статье рассчитана на поперечном срезе из сотен монет, и её применимость к одной паре, выбранной из четырёх монет, не доказана, как и сказано в самой гипотезе.
Анализ
История итераций
Проверка не пройдена (уровень 3 — процесс бэктеста): стратегию не удалось загрузить или собрать в процессе бэктеста: ory/src/backtesting/supp_collector.py", line 684, in _ensure_then_load_supp return await _load_supp_with_per_leg_funding(instrument_id, legs, db_url, keys) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/backtesting/supp_collector.py", line 749, in _load_supp_with_per_leg_funding await load_supplementary_data(instrument_id, db_url=db_url, only_keys=keys) File "/opt/strategy-factory/src/backtesting/supp_collector.py", line 812, in load_supplementary_data hl_db_funding = await _load_hl_funding_from_db(db_url, base) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/backtesting/supp_collector.py", line 598, in _load_hl_funding_from_db add_funding_observation(out, ts_ns, row[1], f"hyperliquid/{base_symbol}") File "/opt/strategy-factory/src/ba
Проверка не пройдена (уровень 1.5 — согласованность гипотезы и конфигурации) [class=hypothesis_mismatch]: - optimization_plan фиксирует плечо на уровне 1.0
Сводка по итогам
Многоногая парная стратегия, которая пересчитывает скользящую ковариацию и статистики беты снижения для каждой потенциальной пары на каждом баре, должна выполнять вычисления на бар достаточно быстро, чтобы уложиться в лимит времени изолированной среды. Перед отправкой профилируй её на окне полной длины.
Работу прекратили в цикле проверки после 4 итераций. Дымовой тест уровня 3 в изолированной среде превысил лимит времени 300 с на окне примерно в 20,000 баров (2400 дней по LINKUSD.HYPERLIQUID 4-часовых баров); это повторилось даже после того, как в итерации 4 синхронизированные доходности перенесли в предварительно выделенный кольцевой буфер numpy.
Получай премию за риск беты снижения на бессрочных контрактах Hyperliquid с периодом 4 часов (LINK, AVAX, XRP, DOGE): открывай длинную позицию по более чувствительному к обвалам инструменту и короткую — по сопоставимому инструменту с похожей обычной бетой, но более низкой бетой снижения.
Показателей эффективности нет: отчёт бэктеста пуст, оптимизация не проводилась, поэтому данных о доходности, коэффициенте Шарпа и числе сделок нет.
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.