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

Стратегии

Премия за риск, связанный с бетой снижения, Hyperliquid: длинные позиции в альткоинах, чувствительных к обвалам, против сопоставимых альткоинов с низкой чувствительностью

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

HyperliquidDownsideBetaPremiumPair

Сводка по итогам

HyperliquidDownsideBetaPremiumPair проверяла, переносится ли опубликованная премия за бету снижения криптовалют на четыре бессрочных контракта Hyperliquid, используя парные длинные и короткие позиции с согласованными бетами на синхронизированных барах 4 часа. За 4 итераций код дорабатывали: в итерации 3 явно установили плечо 1.0, а в итерации 4 заменили пересборку массивов на каждом баре кольцевым буфером numpy. Все попытки по-прежнему превышали лимит 300 с для бэктеста в изолированной среде уровня 3, поэтому проверку прекратили. Стратегия так и не дошла до бэктеста, оптимизации, аналитической или риск-проверки; гипотеза остаётся непроверенной.

Гипотеза

Проверь, требуют ли инвесторы компенсацию за асимметричную подверженность потерям на крипторынке. Используй синхронизированные бары 4–HOUR по бессрочным контрактам LINK, AVAX, XRP и DOGE; выбери одну пару для длинной и короткой позиции с похожими обычными бетами рынка, но разными бетами снижения. Открой длинную позицию по активу, более чувствительному к снижению, и короткую — по менее чувствительному. Стратегия намеренно принимает риск снижения, а не прогнозирует разворот цены или ранжирует импульс. Источник:……Показать большеСвернуть

Проверь, требуют ли инвесторы компенсацию за асимметричную подверженность потерям на крипторынке. Используй синхронизированные бары 4–HOUR по бессрочным контрактам LINK, AVAX, XRP и DOGE; выбери одну пару для длинной и короткой позиции с похожими обычными бетами рынка, но разными бетами снижения. Открой длинную позицию по активу, более чувствительному к снижению, и короткую — по менее чувствительному. Стратегия намеренно принимает риск снижения, а не прогнозирует разворот цены или ранжирует импульс. Источник: [Оценивается ли риск снижения на рынке криптовалют?](https://www.sciencedirect.com/science/article/pii/S1057521923004635),, где сообщается о положительной премии за бету снижения на исторических выборках криптовалют; перенос результата на эти четыре бессрочных контракта Hyperliquid не доказан. HyperliquidCollector предоставляет точные данные по бессрочным контрактам OHLCV. Проверены временные метки локальных файлов parquet: общий период начинается в 2024-02-07T12:00:00Z и заканчивается в 2026-10-02T00:00:00Z; в трёх инструментах есть отдельные пропуски. Торгуй только при наличии полных синхронизированных наблюдений и заново запускай разогрев после пропусков.

На 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 баров.

Итерация 4 устраняет превышение лимита времени уровня -3 в изолированной среде. Изменена только структура данных для обработки каждого бара: deque с кортежами доходностей, который на каждом баре заново преобразовывался через np.asarray (около 1 мс на бар), заменён предварительно выделенным кольцевым буфером numpy, используемым на месте. Все статистики окна инвариантны к порядку данных, поэтому сигналы, выбор пары, размер позиций и выходы не меняются. В PERSIST_EXCLUDE добавлены счётчики кольцевого буфера,……Показать большеСвернуть

Итерация 4 устраняет превышение лимита времени уровня -3 в изолированной среде. Изменена только структура данных для обработки каждого бара: deque с кортежами доходностей, который на каждом баре заново преобразовывался через np.asarray (около 1 мс на бар), заменён предварительно выделенным кольцевым буфером numpy, используемым на месте. Все статистики окна инвариантны к порядку данных, поэтому сигналы, выбор пары, размер позиций и выходы не меняются. В PERSIST_EXCLUDE добавлены счётчики кольцевого буфера, поскольку при разогреве он заполняется заново. Однако профилирование локального запуска в изолированной среде с помощью py-spy показало, что процессорное время тратилось не в коде стратегии. Дочерний процесс бэктеста провёл более 6 минут в NautilusTrader ParquetDataCatalog.bars() -> fsspec glob/walk при обходе data/catalog/data/bar, где хранится 133,589 каталогов баров, загружая основной инструмент в runner.py:683, до поступления первого бара в стратегию. Даже прежняя стоимость обработки numpy на каждом баре составляла около 15-20 с на окне в 14 тыс. баров. Если снова произойдёт тайм-аут, причина — перечисление файлов каталога (инженерная проблема), а не гипотеза или стратегия; проблему следует передать дальше, а не продолжать итерации (урок 155 c/b).

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

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,……Показать большеСвернуть

Проверка не пройдена (уровень 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/backtesting/funding_input_audit.py", line 26, in add_funding_observation raise FundingObservationError(f"conflicting funding rates in {source} at {second_ns}") src.backtesting.funding_input_audit.FundingObservationError: data_unavailable: conflicting funding rates in hyperliquid/LINKUSD at 1788606000000000000

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

Проверка не пройдена (уровень 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 — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.