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

Стратегии

Схождение премии спот–бессрочный контракт PURR

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

PurrSpotPerpPremiumConvergence

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

PurrSpotPerpPremiumConvergence была рыночно-нейтральной базисной сделкой: длинная позиция по споту PURR и короткая по бессрочному контракту PURR на Hyperliquid, когда премия бессрочного контракта превышала 1.2%. Гипотеза опиралась на 4,172 перекрывающихся 4-часовых баров и 69 эпизодов выше этого порога. За 2 итераций код так и не прошёл проверку: бэктест в песочнице уровня 3 превысил лимит 300 с на окне около 20,000 баров. Запуск остановили до бэктеста, оптимизации и проверки аналитиком, поэтому гипотеза о схождении премии остаётся непроверенной.

Гипотеза

На синхронных барах по 4 часов купить PURRUSDC.HYPERLIQUID_SPOT и открыть короткую позицию равного номинала по PURRUSD.HYPERLIQUID, когда премия бессрочного контракта превышает 1.2%. В каталоге 4,172 перекрывающихся баров; до фильтров ликвидности порог был превышен в 69 отдельных эпизодах. Учти фактические почасовые платежи финансирования. Механика финансирования Hyperliquid: https://hyperliquid.gitbook.io/hyperliquid-docs/trading/funding

Стратегии Hyperliquid, мультиинструментальные стратегии и стратегии лонг-шорт представлены недостаточно. Наблюдаемая премия PURR достаточно велика, чтобы проверить парную сделку на схождение. Снижение с 1.2% до 0.3% даёт 0.9% валовой прибыли на совпадающий номинал. Расчётные комиссии за полный цикл по двум сторонам — 0.23%; если заложить ещё 0.20% на спред и влияние на цену, остаётся 0.47%, или около 0.235% от общего номинала пары. Исполнимую глубину рынка нужно проверить.

verification_loop: sandbox_timeout: Проверка не пройдена (уровень 3 — бэктест в песочнице): дымовой тест превысил лимит времени 300 с на окне около 20000 баров (2400 дней по PURRUSD.HYPERLIQUID-4-HOUR-LAST-EXTERNAL). Почти всегда это означает, что объём вычислений на бар растёт вместе с историей — например, полный пересмотр ряда финансирования или дополнительных данных либо повторное создание списка и вызов min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Предварительно отсортируй массивы временных меток ONCE в __init__ и используй bisect либо кэшируй данные по временной метке, чтобы стоимость обработки бара была O(log n), а не O(n).

Реализация

На согласованных барах 4 ч, когда премия бессрочного контракта PURR к спотовому HL достигает entry_basis_pct или выше, купить PURRUSDC.HYPERLIQUID_SPOT и открыть короткую позицию равного номинала по PURRUSD.HYPERLIQUID. Каждая сторона — отдельный ордер и позиция. Закрыть обе стороны, когда премия снизится до exit_basis_pct, вырастет на spread_stop_widening_pct выше премии при входе или пройдут max_hold_bars баров (отсчёт от времени входа). Номинал каждой стороны равен минимуму из бюджета риска (risk_pct / ширина стопа), max_leg_equity_fraction капитала и max_prior_bar_volume_fraction от долларового объёма каждой стороны за предыдущий бар. Движок начисляет почасовое финансирование HL по стороне бессрочного контракта.

Итерация 2 отвечает на вопрос уровня -3 sandbox_timeout. Я запустил точную конфигурацию песочницы локально с cProfile и py-spy на 2024-04-17–2026-04-17. Общее время выполнения составило 403 с. Около 385 с потребил вызов NautilusTrader ParquetDataCatalog.query, в основном на обход всего каталога через fsspec glob/walk: 2.46 млн вызовов stat() в ходе 17 запросов на хосте, где диск был на уровне 95%. Сюда входят catalog.bars за 336 с и catalog.instruments за 51 с. На весь код стратегии (calculate_signal,……Показать большеСвернуть

Итерация 2 отвечает на вопрос уровня -3 sandbox_timeout. Я запустил точную конфигурацию песочницы локально с cProfile и py-spy на 2024-04-17–2026-04-17. Общее время выполнения составило 403 с. Около 385 с потребил вызов NautilusTrader ParquetDataCatalog.query, в основном на обход всего каталога через fsspec glob/walk: 2.46 млн вызовов stat() в ходе 17 запросов на хосте, где диск был на уровне 95%. Сюда входят catalog.bars за 336 с и catalog.instruments за 51 с. На весь код стратегии (calculate_signal, should_enter, should_exit, position_size, _submit_entry) ушло менее 0.25 с на 3,171 обработанных баров; базовый _maybe_process_primary потребил 0.65 с. Стоимость обработки бара уже составляет O(1): сканирования истории и повторного просмотра дополнительных данных нет. Этот запуск создал 100 записей позиций (50 парных входов), коэффициент Шарпа 3.31 и avg_trade_return_pct 0.70%. Согласно уроку 155(c), задержка вызвана не ростом затрат на обработку бара вместе с длиной периода, поэтому правка стратегии её не устранит. Причина — задержка загрузки каталога в среде запуска; нужно исправление на уровне инженерной инфраструктуры (кэшировать список файлов или сузить glob-шаблон каталога) либо повторный запуск на менее загруженном хосте. Единственное изменение кода — рефакторинг без изменения поведения: дублирующееся округление спотового количества вынесено в _spot_qty_for_notional(). Сигналы, фильтры, размер позиций, выходы, параметры и план оптимизации не изменены.

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

sandbox_timeout: Проверка не пройдена (уровень 3 — бэктест в песочнице): дымовой тест превысил лимит времени 300 с на окне около 20000 баров (2400 дней по PURRUSD.HYPERLIQUID-4-HOUR-LAST-EXTERNAL). Почти всегда это означает, что объём вычислений на бар растёт вместе с историей — например, полный пересмотр ряда финансирования или дополнительных данных либо повторное создание списка и вызов min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Предварительно отсортируй массивы временных меток ONCE в __init__ и используй bisect либо кэшируй данные по временной метке, чтобы стоимость обработки бара была O(log n), а не O(n).

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

В мультистратегиях обработка каждого бара в calculate_signal/on_bar должна иметь постоянную сложность или O(log n), например за счёт предварительных вычислений или кэширования, чтобы пройти дымовой тест песочницы в отведённое время и измерить преимущество стратегии.

Стратегию оставили после 2 итераций цикла проверки. Дымовой тест песочницы уровня 3 превысил лимит времени 300 с на окне около 20,000 баров (2,400 дней по PURRUSD.HYPERLIQUID 4-часовых баров), поэтому до проверки бэктеста, оптимизации, аналитики и этапов оценки риска дело не дошло.

Зарабатывать на схождении премии бессрочного контракта PURR на Hyperliquid: покупать спот PURRUSDC и открывать короткую позицию равного номинала по бессрочному контракту PURRUSD на барах 4 часов, когда цена бессрочного контракта превышает спотовую более чем на 1.2%, получая почасовые платежи финансирования по мере закрытия базиса.

Показателей эффективности нет: стратегия не создала отчёт бэктеста или оптимизации, поэтому нет данных о доходности, коэффициенте Шарпа и числе сделок.

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