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

Стратегии

SOL возврата идиосинкратического остатка к среднему: пара с нейтральностью к рынку и хеджированием BTC-бета (SOLUSDT.BINANCE с хеджем BTCUSDT.BINANCE, USD-M — SHORT SOL / LONG, позиция BTC, масштабированная по бете; когда SOL идиосинкратически OVERSHOOTS свой путь, подразумеваемый бетой, на значительную величину; разворот при недолёте, выход при схождении остатка; 3-параметров)

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

SolBtcBetaResidualMeanReversionLS

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

SolBtcBetaResidualMeanReversionLS позиционировалась как решение с хеджированием бетой для бесперспективных контртрендовых стратегий на одном инструменте: хеджировать бету BTC, чтобы торговать более крупным идиосинкратическим выбросом SOL с возвратом к среднему, а не рыночным шумом, не покрывающим комиссии. Однако бэктест ликвидировал счёт в январе 2025 с доходностью -100%; причиной стал дефект размера позиции: две ноги достигали примерно 365% капитала, а резкие дневные доходности после ликвидации (эксцесс 971) противоречили заявлению о распределённом преимуществе, устойчивом к выбросам. До обвала сигнал уже приносил чистый убыток: средняя сделка -0.092%, PF 0.79, отрицательный результат каждый год. Бета-хедж так и не выявил торгуемого преимущества. При проверке бэктеста аналитик отказался от стратегии: снижение плеча предотвращает ликвидацию, но положительного преимущества, на которое можно было бы наращивать позицию, нет. Стратегия не дошла до оптимизации, анализа или проверки риска.

Гипотеза

Стратегия относительной стоимости MARKET-NEUTRAL, TWO-INSTRUMENT: торгует IDIOSYNCRATIC (остатком беты) инструмента SOLUSDT.BINANCE, хеджируя рыночный риск позицией в BTCUSDT.BINANCE, размер которой масштабирован по бете. Постоянно оценивай бету SOL к BTC и рассчитывай остаток SOL: накопленная доходность SOL минус бета × накопленная доходность BTC за короткое окно. Когда SOL заметно OVERSHOOTS относительно рынка (остаток >> 0), SHORT SOL + LONG в BTC с масштабированием по бете (чистая рыночная бета ≈ 0); когда……Показать большеСвернуть

Стратегия относительной стоимости MARKET-NEUTRAL, TWO-INSTRUMENT: торгует IDIOSYNCRATIC (остатком беты) инструмента SOLUSDT.BINANCE, хеджируя рыночный риск позицией в BTCUSDT.BINANCE, размер которой масштабирован по бете. Постоянно оценивай бету SOL к BTC и рассчитывай остаток SOL: накопленная доходность SOL минус бета × накопленная доходность BTC за короткое окно. Когда SOL заметно OVERSHOOTS относительно рынка (остаток >> 0), SHORT SOL + LONG в BTC с масштабированием по бете (чистая рыночная бета ≈ 0); когда UNDERSHOOTS (остаток << 0), LONG SOL + SHORT в BTC с масштабированием по бете; выходи, когда остаток приблизится к нулю. Это намеренно FIX объясняет, почему ставки на возврат к среднему для одного инструмента оказываются 0/174 убыточными (L53): они отыгрывают резкое отклонение сырой цены, которое в основном состоит из шума MARKET; само ценовое отклонение меньше затрат на сделку туда и обратно, поэтому цель возврата ниже комиссий. Здесь хедж в BTC REMOVES рыночную составляющую, оставляя более крупное и действительно возвращающееся к среднему отклонение IDIOSYNCRATIC (SOL регулярно отклоняется на 1–3% от траектории, предполагаемой бетой, из-за потоков ордеров или новостей, а затем возвращается), и стратегия открывает позицию лишь при достаточно широком отклонении, чтобы ожидаемое схождение покрыло 3× затраты на сделку туда и обратно по двум инструментам. Преимущество DISTRIBUTED распределено между множеством независимых событий отклонения, а не сосредоточено в нескольких выбросных днях, поэтому оно выдерживает тест с удалением выбросов, который провалили все идеи трендовой торговли отдельными инструментами. Стратегия существенно отличается от всех пересекающихся и неработающих семейств: NOT направленный тренд отдельного инструмента (0/213 мираж из-за выбросов — здесь рыночная нейтральность и хеджирование направления), NOT возврат к среднему для одного инструмента (L53 — хедж по бете, выделение идиосинкратического остатка, только широкие отклонения), NOT корзина RANK поперечного сечения (отказ от импульса и доходности на ставках финансирования в поперечном сечении — здесь одна выбранная цель и один хедж, сигнал по событию, без ранжирования), NOT мой отложенный краткосрочный разворот в поперечном сечении (там ранжируется целая корзина по сырой доходности; здесь событие связано с остатком беты RESIDUAL одного инструмента), NOT доходность на ставках финансирования / базис / микроструктура / опционы. Стратегия заполняет недостаточно представленный сегмент длинных и коротких позиций и рыночной нейтральности простой структурой бессрочного контракта 2, которую легко надёжно проверять на исторических данных.

Итерация 5, проверка после чистого перезапуска. В уведомлении о перезапуске сказано оценивать код по его достоинствам, но побайтно идентичный код не проходит уровень 0, поэтому я внёс минимальное изменение, устраняющее реальный риск нулевого числа сделок, а не косметическую правку. В итерации 4 исправили устаревание данных из-за порядка обработки баров для HEDGE PRICE, но риск сохранился для RETURN SERIES: `_ingest_synced` записывал пару доходностей (SOL, BTC) только при условии, что закрытие BTC на точной……Показать большеСвернуть

Итерация 5, проверка после чистого перезапуска. В уведомлении о перезапуске сказано оценивать код по его достоинствам, но побайтно идентичный код не проходит уровень 0, поэтому я внёс минимальное изменение, устраняющее реальный риск нулевого числа сделок, а не косметическую правку. В итерации 4 исправили устаревание данных из-за порядка обработки баров для HEDGE PRICE, но риск сохранился для RETURN SERIES: `_ingest_synced` записывал пару доходностей (SOL, BTC) только при условии, что закрытие BTC на точной временной метке бара SOL уже находилось в `_btc_prices` при обработке бара SOL. Если движок обрабатывает бар BTC для временной метки T после бара SOL для T, поиск каждый раз не находит данные, `_sol_rets` никогда не заполняется, `_hedge_ready` никогда не становится True, и стратегия не совершает сделок за весь прогон. Теперь бары SOL помещаются в ограниченный буфер `_pending_sol` FIFO и извлекаются с начала, как только приходит соответствующий бар BTC (`_drain_pending`); записи старше `max_hedge_stale_bars` интервалов отбрасываются как реальные пропуски. Выравнивание индексов между `_sol_rets`/`_btc_rets` сохраняется по конструкции: порядок строго возрастающий, обработка идёт по очереди. Если BTC уже предшествует SOL, пара обрабатывается за тот же вызов, поэтому поведение совпадает с ранее прошедшей проверку итерацией. Оценка беты, z-показатель остатка, порог издержек, выходы, атомарный вход в пару и размер позиции не изменились. Площадка остаётся BINANCE USD-M (нужны короткие позиции; плечо 2.0 используется в `position_size` через `self.config.leverage` для обеих ног); плечо 2 с per_leg_pct 0.25 удерживает валовой номинал на уровне ~1x капитала для двух ног.

Счёт ликвидирован (total_return -100%, max_drawdown 100%, ликвидация 2025-01-19); ожидание на сделку отрицательное на убедительной выборке из 1630 сделок: avg_trade_return_pct -0.093% (ниже нуля и намного меньше стоимости полного цикла из двух ног ~0.2%), profit_factor 0.792, ожидание -$62.5/сделку, коэффициент Шарпа -1.18 (CI полностью отрицательный). У идиосинкратического выброса бета-остатка нет положительного валового преимущества (avg_win 482 < avg_loss 590, обе ноги имеют долю прибыльных сделок ниже -50%, каждый терциль волатильности отрицательный), поэтому настройка entry_z/res_window/min_edge_pct не исправит убыточный сигнал PF-0.79. Чрезмерно закредитованная валовая позиция (avg_position_pct 1739%) переносит чистую дельту в полный убыток, несмотря на исправления целостности хеджа. В итерации 3 повторилась ликвидация из итерации 2, от которой уже отказались; контртрендовая стратегия на остатке с хеджированием бета-коэффициентом структурно не покрывает комиссии, как и одиночные стратегии, которые она призвана исправить (L55). Не стоит тратить на оптимизацию 2 часов.

Реализация

Пара SOL/BTC с нейтральностью к рынку на перпетуальных контрактах USD-M с интервалом 1 час. Оценивает бету SOL к BTC методом OLS по синхронизированной логарифмической доходности за `beta_lookback` баров, накапливает идиосинкратический остаток r_SOL - beta*r_BTC за последние `res_window` баров и нормирует его в z-показатель. При z >= entry_z (SOL отклонился вверх от пути, подразумеваемого бетой) -> SHORT SOL + LONG, позиция в BTC, масштабированная по бете; при z <= -entry_z -> LONG SOL + SHORT, позиция в BTC, масштабированная по бете. Выход при схождении остатка (|z| <= exit_z), противоположном крайнем отклонении, стопе при расхождении на stop_z или временном стопе через 48 часов. Размер обеих ног обеспечивает равный номинал USD с учётом беты (SOL номинала × бета для ноги BTC), поэтому чистая рыночная дельта составляет ~0. Входы атомарны: нога не отправляется без доступного хеджа с актуальной ценой. Порог издержек требует, чтобы исходный накопленный остаток превышал примерно 3x стоимость полного цикла из двух ног по цене тейкера, прежде чем открывать сделку.

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

При оптимизации увеличь entry_z / min_edge_pct, чтобы реализованный avg_trade_return_pct с запасом превышал стоимость полного цикла из двух ног ~0.2%; рассмотри входы мейкером или лимитными ордерами, чтобы снизить влияние комиссий на пару с высокой оборачиваемостью (оборачиваемость 246).

Порог издержек использует исходный накопленный логарифмический остаток (min_edge_pct=0.006) как ожидаемую величину возврата, но остаток скорректирован на бета-коэффициент, а фактическое исполнение несёт затраты тейкера по BOTH ногам (SOL 0.05% + BTC 0.05%, полный цикл x2). Показатель тестового варианта avg_trade_return_pct равен -0.035%: он отрицательный и ниже порога комиссий, то есть заданный порог не гарантирует сделок с положительным результатом после комиссий. Это не дефект кода — реализация соответствует спецификации, — но оптимизатору, вероятно, нужно найти режим, в котором доход покрывает комиссии.

Неоптимизированный тестовый вариант показывает глубокий минус (total_return -42.2%, коэффициент Шарпа -0.56, profit_factor 0.83, avg_trade_return_pct -0.035% против стоимости полного цикла из двух ног ~0.2%) на 586 сделках; все терцили волатильности отрицательны. Порог издержек (min_edge_pct 0.6% по исходному накопленному остатку) должен превышать примерно 3x стоимости двух ног, но реализуемое преимущество на сделку здесь ниже комиссий, которые составляют 13.7% валовой прибыли. Возможно, при этих порогах средневозвратный идиосинкратический выброс слишком мал, чтобы окупить удвоенные торговые издержки. Аналитику следует проверить на полной истории, поднимают ли оптимизированные entry_z/res_window/min_edge_pct avg_trade_return_pct выше порога комиссий или преимущество бета-остатка структурно не покрывает комиссии, как у одиночных контртрендовых стратегий, которые эта стратегия призвана исправить.

Обзор бэктеста

Шарп
-1,18
Общая доходность
-100,00%
Максимальная просадка
100,00%
Всего сделок
1630
Доля прибыльных
49,2%
Профит-фактор
0,79

Действительно создана структура с нейтральностью к рынку и 2 ногами, явным порогом издержек и большой выборкой (1630 сделок), поэтому отрицательный результат статистически убедителен, а не случаен.

Счёт LIQUIDATED (liquidation_date 2025-01-19): total_return -100%, max_drawdown 100%, коэффициент Кальмара/восстановления -1.0. Дневная доходность после ликвидации (например, -4679%, -1552%, +376%) — артефакты механизма с постоянно обновляемой базой на закрытом счёте, а не реальная прибыль или убыток.

Отрицательное ожидание на сделку в надёжной выборке до обвала: avg_trade_return_pct -0.093% (BELOW ZERO, намного ниже стоимости полного цикла из двух ног ~0.2%), profit_factor 0.792, ожидание -$62.5/сделку, коэффициент Шарпа -1.18; весь интервал CI [-2.00, -0.64] отрицательный.

У идиосинкратического выброса бета-остатка нет положительного валового преимущества: avg_win 482 < avg_loss 590; обе ноги убыточны (long_win_rate 0.496, short_win_rate 0.488), а каждый терциль волатильности отрицателен (спокойный/обычный/стрессовый — все -). На полной истории подтвердились опасения QA насчёт невозможности покрыть комиссии.

avg_position_pct 1739% показывает, что валовой номинал позиции чрезмерно закредитован и именно он переносит чистую дельту в ликвидацию — такой паттерн L59 market-neutral-pair-reaches-100%-DD.

Это итерация 3 того же механизма; от итерации 2 уже отказались из-за такой же ликвидации, а исправления атомарного хеджирования и устаревших данных не изменили результат.

Анализ

Порог бэктеста: - метрики ненадёжны: несогласованность: знак коэффициента Шарпа 0.07 не совпадает со знаком total_return -71.55%. Коэффициент Шарпа рассчитан по ряду mtm_equity_curve, а доходность — по кривой капитала. Оценивай результат по кривой капитала.

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

Проверка не пройдена (слой 2 — синтетические сценарии): Использованные параметры: ['exit_z', 'stop_z', 'entry_z', 'beta_cap', 'beta_floor', 'res_window', 'per_leg_pct', 'min_edge_pct', 'min_notional', 'beta_lookback', 'max_hold_hours'] Убедитесь, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: SolBtcBetaResidualMeanReversionLS._ts() принимает 1 позиционных аргумента, получено 2 (временная метка бара: 1735689600000) - steady_downtrend: TypeError:……Показать большеСвернуть

Проверка не пройдена (слой 2 — синтетические сценарии): Использованные параметры: ['exit_z', 'stop_z', 'entry_z', 'beta_cap', 'beta_floor', 'res_window', 'per_leg_pct', 'min_edge_pct', 'min_notional', 'beta_lookback', 'max_hold_hours'] Убедитесь, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: SolBtcBetaResidualMeanReversionLS._ts() принимает 1 позиционных аргумента, получено 2 (временная метка бара: 1735689600000) - steady_downtrend: TypeError: SolBtcBetaResidualMeanReversionLS._ts() принимает 1 позиционных аргумента, получено 2 (временная метка бара: 1735689600000) - flat_ranging: TypeError: SolBtcBetaResidualMeanReversionLS._ts() принимает 1 позиционных аргумента, получено 2 (временная метка бара: 1735689600000) - volatility_spike: TypeError: SolBtcBetaResidualMeanReversionLS._ts() принимает 1 позиционных аргумента, получено 2 (временная метка бара: 1735689600000) - zero_volume: TypeError: SolBtcBetaResidualMeanReversionLS._ts() принимает 1 позиционных аргумента, получено 2 (временная метка бара: 1735689600000) - price_gap: TypeError: SolBtcBetaResidualMeanReversionLS._ts() принимает 1 позиционных аргумента, получено 2 (временная метка бара: 1735689600000)

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

Удаление рыночной составляющей с помощью бета-хеджа само по себе не делает торгуемым возврат остатка отдельного инструмента: изолированный идиосинкратический выброс всё ещё не покрывал комиссии, а ошибка расчёта размера позиции, из-за которой ноги превышали капитал в несколько раз, превратила убыточный сигнал в ликвидацию. Артефакты после обвала опровергают любые заявления об устойчивости к выбросам.

Аналитик отказался от стратегии при проверке бэктеста из-за двух независимых критических проблем: чрезмерного валового плеча и дефекта размера позиции (~3.6x номинала капитала), который привёл к ликвидации и породил артефакты деления на крошечный капитал после обвала (эксцесс 971, асимметрия 29.6, например -929% на 2025-08-23); и отрицательного базового преимущества. Бета-хедж не выявил торгуемый возврат идиосинкратического остатка, поэтому стратегия остаётся контртрендовой стратегией для одного инструмента L53, не покрывающей комиссии (0/174 выживаемость), которую не спасёт уменьшение размера позиции.

Стратегия относительной стоимости с нейтральностью к рынку и двумя инструментами (3 параметров), которая торговала идиосинкратическим отклонением SOL от BTC, скорректированным на бета-коэффициент. Она непрерывно оценивала бету SOL к BTC; когда SOL значительно отклонялся вверх или вниз от пути, подразумеваемого бетой, стратегия открывала короткую или длинную позицию в SOL против хеджа BTC, масштабированного по бете, и выходила при схождении остатка. Её представляли как решение с хеджированием бетой для бесперспективных контртрендовых стратегий на одном инструменте.

Бэктест (SOLUSDT с хеджированием через BTCUSDT, 1H, 1438 дней с данными, с 2020-09 по 2026-08) завершился крахом: счёт был ликвидирован 2025-01-19, общая доходность составила -100%, а максимальная просадка — 100%. Даже если не учитывать крах, основной сигнал был убыточным в целом — avg_trade_return_pct -0.092%, фактор прибыли 0.79, математическое ожидание -63, информационное отношение -1.56 на 1608 сделках, отрицательный результат в каждом календарном году, — а из-за дефекта в определении размера позиции обе ноги использовали около 365% капитала (avg_position_pct 365% против per_leg_pct 0.25).

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