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

Стратегии

Возврат соотношения ETH/BTC к среднему + фильтр ставки финансирования

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

EthBtcRatioMeanReversionFundingFilterLS

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

Это было дополнение с фильтром ставки финансирования к уже отвергнутой парной стратегии возврата к среднему по z-оценке ETH/BTC; цель состояла в повышении коэффициента Шарпа и снижении просадки за счёт пропуска перегруженных направленных входов. Исправление итерации -2 правильно добавило плечо в расчёт размера позиции, но результат повторил катастрофу родственной стратегии: коэффициент Шарпа -0.91, фактор прибыли 0.81, общая доходность -91.3%, просадка 94% и убытки во всех семи годах. Результат усугубили два недостатка: соотношение ETH/BTC движется трендом, а не возвращается к среднему, поэтому сигнал возврата идёт против устойчивых движений; годовые пороги фильтра ставки финансирования были настолько мягкими, что все 912 сделок прошли без фильтра. Заявленное преимущество не проявилось, а средняя экспозиция 138% усилила убытки и привела к обвалу. Аналитик отверг стратегию до оптимизации: проблема в основе, а не в фильтре, и более избирательная фильтрация сигнала, отрицательного при любом режиме, всё равно оставляет его убыточным.

Гипотеза

Дополнение к стратегии возврата к среднему по z-оценке ETH/BTC: добавлен фильтр режима ставки финансирования, чтобы пропускать входы на перегруженных направленных рынках. Та же базовая логика: бары по 4 ч на Binance USD-M Futures, соотношение = ETHUSDT_close / BTCUSDT_close, скользящая z-оценка за 20 периодов, вход при |z| > 2.0, выход при |z| < 0.5, |z| > 3.5 (стоп) или по тайм-стопу через 7 дней. NEW: нужны дополнительные данные funding_rates для обоих инструментов — ETHUSDT и BTCUSDT. Рассчитывается……Показать большеСвернуть

Дополнение к стратегии возврата к среднему по z-оценке ETH/BTC: добавлен фильтр режима ставки финансирования, чтобы пропускать входы на перегруженных направленных рынках. Та же базовая логика: бары по 4 ч на Binance USD-M Futures, соотношение = ETHUSDT_close / BTCUSDT_close, скользящая z-оценка за 20 периодов, вход при |z| > 2.0, выход при |z| < 0.5, |z| > 3.5 (стоп) или по тайм-стопу через 7 дней. NEW: нужны дополнительные данные funding_rates для обоих инструментов — ETHUSDT и BTCUSDT. Рассчитывается funding_spread = funding_ETH - funding_BTC (в годовом выражении, в базисных пунктах). Пропускаются входы, когда |funding_spread| > 10 б. п. в годовом выражении SKIP, когда |funding_ETH| > 50 б. п. в годовом выражении OR или |funding_BTC| > 50 б. п. в годовом выражении OR: эти условия указывают на перегруженные направленные позиции, при которых возврат к среднему часто не срабатывает (резкий рост в альтсезон, капитуляция BTC и т. п.). Сделка также пропускается, если её направление означало бы уплату ставки финансирования по обеим ногам BOTH (например, лонг ETH + шорт BTC, когда ставка финансирования ETH положительная AND BTC отрицательная). Номинал на каждую ногу равен USD, плечо 1-2x, размер позиции зависит от капитала. Преимущество: избежать примерно 20-30% сделок, где возврат к среднему идёт против общего движения, и отобрать более чистые сигналы возврата. Гипотеза: фильтр ставки финансирования повысит коэффициент Шарпа на 0.2-0.4 и снизит максимальную просадку на 25%+ относительно базовой стратегии DD. Риски: фильтр может быть слишком строгим на трендовых крипторынках (сократит выборку); при запросе данных ставок финансирования нужно правильно сопоставлять интервал 8 ч, а формат временных меток parquet — datetime64, а не миллисекунды Unix.

Итерация -2: минимальное исправление для проверки leverage_set_but_unused. Причина: путь расчёта размера позиции косвенно считывал плечо через getattr(self.config, 'leverage', ...) внутри вспомогательной функции _leg_notional(), поэтому статическая проверка, которая просматривает position_size() на прямое обращение к self.config.leverage, не обнаруживала его и считала leverage=2.0 неработающим. Исправление заставляет position_size() напрямую считывать self.config.leverage и вычислять notional = equity *……Показать большеСвернуть

Итерация -2: минимальное исправление для проверки leverage_set_but_unused. Причина: путь расчёта размера позиции косвенно считывал плечо через getattr(self.config, 'leverage', ...) внутри вспомогательной функции _leg_notional(), поэтому статическая проверка, которая просматривает position_size() на прямое обращение к self.config.leverage, не обнаруживала его и считала leverage=2.0 неработающим. Исправление заставляет position_size() напрямую считывать self.config.leverage и вычислять notional = equity * leg_notional_frac * leverage / price в строке; функция _leg_notional() (используемая для ноги BTC) тоже переведена на прямое обращение к атрибуту. Теперь плечо явно масштабирует номинал обеих ног, поэтому leverage=2.0 создаёт действительно в 2x раза большую позицию, чем 1x. Больше ничего не изменилось: импорты прежние (слой 1 проходит), а сигнал z-оценки, фильтр ставки финансирования, условия входа и выхода и отправка заявок по нескольким ногам, прошедшие предыдущие слои, побайтно идентичны. При отсутствии данных фильтр ставки финансирования по-прежнему пропускает сделки, чтобы проверять базовое преимущество возврата к среднему; буфер соотношения остаётся единой синхронизированной серией. Площадка: фьючерсы BINANCE USD-M (одна нога в шорт, фильтр на основе ставки финансирования); leverage=2.0 не превышает лимит плеча для фьючерсов 20x.

Это дополнение с фильтром по ставке финансирования к уже заброшенной парной стратегии возврата к среднему по z-оценке ETH/BTC, и оно воспроизводит тот же катастрофический провал: коэффициент Шарпа -0.91 (CI -1.79 до -0.05, полностью отрицательный), profit_factor 0.81, total_return -91.3%, математическое ожидание -$99.5/сделку, max_drawdown 93.9%, отрицательный результат за ALL 7 лет (2020 -63%, 2021 -32%, 2022 -17%, 2023 -31%, 2024 -20%, 2025 -15%, 2026 -5%). Гипотеза несостоятельна: отношение ETH/BTC следует……Показать большеСвернуть

Это дополнение с фильтром по ставке финансирования к уже заброшенной парной стратегии возврата к среднему по z-оценке ETH/BTC, и оно воспроизводит тот же катастрофический провал: коэффициент Шарпа -0.91 (CI -1.79 до -0.05, полностью отрицательный), profit_factor 0.81, total_return -91.3%, математическое ожидание -$99.5/сделку, max_drawdown 93.9%, отрицательный результат за ALL 7 лет (2020 -63%, 2021 -32%, 2022 -17%, 2023 -31%, 2024 -20%, 2025 -15%, 2026 -5%). Гипотеза несостоятельна: отношение ETH/BTC следует тренду, а не возвращается к среднему, поэтому возврат по z-оценке постоянно идет против тренда и приводит к убыткам при любом режиме — именно такое поведение погубило родственную стратегию (коэффициент Шарпа -1.97/-1.23). Предполагаемая новая функция ничего не меняет: пороговые значения фильтра по ставке финансирования оставлены на уровне funding_spread_max_bps=1000 и funding_leg_max_bps=5000 (в годовом выражении, б.п.) — уровни, которых реальные спреды финансирования ETH/BTC почти никогда не достигают. Поэтому фильтр редко блокирует входы, и все 912 сделок фактически совершаются без фильтрации — предполагаемого «пропуска ~20-30% переполненных входов» не происходит, так что это не содержательный вариант базовой стратегии. Ситуацию усугубляет то, что показатель avg_position_pct равен 138% (leg_notional_frac 0.5 x две позиции x плечо), превращая убыточный сигнал в обвал с доходностью -91% и просадкой 94%. Утверждение benchmark_meaningful неверно (пара рыночно-нейтральная), поэтому оценка основана на абсолютных метриках, которые катастрофичны. Не оптимизировать: никакой набор параметров не спасет сигнал, убыточный во все 7 лет; родственная стратегия уже показала, что у возврата ETH/BTC к среднему нет преимущества. Не дорабатывать: ужесточение фильтра по ставке финансирования, чтобы он действительно срабатывал, лишь отфильтрует входы базового сигнала, который сам отрицателен при любом режиме. Более избирательная фильтрация убыточной стратегии всё равно оставляет её убыточной; изъян в гипотезе, а не в фильтре. Это NOT проблема с зачислением выплат по ставке финансирования (движок теперь учитывает выплаты по ставке финансирования) — это несостоятельная гипотеза возврата к среднему в сочетании с бездействующим фильтром. FAILURE PATTERN: возврат к среднему по z-оценке отношения ETH/BTC (и криптовалют с большой капитализацией) не имеет преимущества — отношение следует тренду, а не возвращается к среднему, поэтому входы на возврат при |z|>2 идут против устойчивых движений и дают убыток каждый год (PF <0.85, отрицательный коэффициент Шарпа, глубокие просадки); добавление фильтра режима или ставки финансирования не помогает, когда (а) пороговые значения фильтра настолько мягкие, что он никогда не срабатывает, и (б) базовый сигнал отрицателен при любом режиме. «Новый вариант», который оставляет убыточное ядро без изменений и добавляет бездействующую функцию, — это та же заброшенная стратегия.

Реализация

Возврат соотношения ETH/BTC к среднему по z-оценке с фильтром входа по режиму ставки финансирования; долларово-нейтральная длинно-короткая позиция на фьючерсах Binance USD-M, бары 4H. Соотношение = ETH/BTC, скользящая z-оценка за 20 баров; вход при |z|>2 (z>0: шорт ETH/лонг BTC; z<0: лонг ETH/шорт BTC); выход при |z|<0.5, стоп при |z|>3.5 или тайм-стоп через 42 баров (7 дней). Входы пропускаются, если годовой спред ставок финансирования ETH-BTC или ставка по любой ноге чрезмерны, либо если сделка означала бы уплату ставок по обеим ногам; при отсутствии данных ставок финансирования фильтр пропускает сделку. Номинал каждой ноги: equity * 0.5 * leverage / price при leverage=2.0, поэтому на обе ноги направляется по 2x доли капитала. Сигнал — непрерывная z-оценка на каждом баре.

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

Проверка не пройдена (leverage_set_but_unused): конфигурация задаёт leverage=2.0, но стратегия не использует плечо при расчёте размера позиции. Используй его для расчёта позиции: notional = equity * fraction * leverage / price (считывай self.config.leverage) — или установи leverage=1.0. В текущем виде плечо не работает, и бэктест идентичен 1x.

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

Шарп
-0,91
Общая доходность
-91,31%
Максимальная просадка
93,94%
Всего сделок
912
Доля прибыльных
49,8%
Профит-фактор
0,81

Код работает и совершает сделки согласно замыслу (912 сделок, 0 отброшено, сбалансированные длинные и короткие ноги, нога BTC отправлена через вспомогательные функции для нескольких инструментов); плечо теперь учтено при расчёте размера позиции

Катастрофические убытки независимо от режима: коэффициент Шарпа -0.91 (CI -1.79 до -0.05), profit_factor 0.81, total_return -91.3%, математическое ожидание -$99.5/сделку, max_drawdown 93.9%, отрицательный результат в ALL 7 годах

Несостоятельная идея: соотношение ETH/BTC движется трендом, а не возвращается к среднему. Провал идентичен уже отвергнутой родственной парной стратегии по z-оценке ETH/BTC (коэффициент Шарпа -1.97/-1.23, убыток каждый год)

Фильтр ставки финансирования не работает: пороги (1000 б. п. спреда / 5000 б. п. на ногу, в годовом выражении) почти никогда не срабатывают, поэтому 912 сделок проходят без фильтра — заявленного «пропуска 20-30% перегруженных сделок» не происходит, и новая функция ничего не меняет

Избыточное плечо усилило убыток: avg_position_pct 138% превратило убыточный сигнал в обвал с доходностью -91% и просадкой 94%

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

У возврата к среднему по z-оценке соотношения крупных криптоактивов (ETH/BTC) нет преимущества: соотношение движется трендом, а не возвращается к среднему. Добавление фильтра режима или ставки финансирования не помогает, если пороги фильтра настолько мягкие, что он никогда не срабатывает AND; базовый сигнал отрицателен при любом режиме. Более избирательная фильтрация убыточной стратегии всё равно оставляет её убыточной, а вариант, не меняющий убыточную основу, — та же закрытая стратегия.

При разборе бэктеста аналитик отверг стратегию как несостоятельную идею с неработающей функцией, а не как ошибку: соотношение ETH/BTC движется трендом, а не возвращается к среднему. Поэтому возврат по z-оценке постоянно идёт против тренда и убыточен при любом режиме, повторяя провал уже отвергнутой родственной стратегии по z-оценке ETH/BTC. Пороги фильтра ставки финансирования были настолько мягкими, что он ни разу не сработал; «новый вариант» оставил убыточную основу без изменений.

Долларово-нейтральная парная стратегия возврата к среднему по z-оценке соотношения ETH/BTC на фьючерсах Binance USD-M 4H (только OHLCV и дополнительные данные о ставке финансирования): игра против отклонений в 2 сигма по z-оценке соотношения ETH/BTC за 20 периодов (шорт ETH + лонг BTC, когда соотношение завышено, и наоборот, когда занижено). Добавлен фильтр режима ставки финансирования, призванный пропускать около 20-30% перегруженных направленных входов (широкий спред ставок финансирования, экстремальная ставка на отдельную ногу либо уплата ставки по обеим ногам).

За 912 сделок (456 длинных, 456 коротких, ни одна не пропущена) стратегия оказалась катастрофически убыточной при любом режиме: коэффициент Шарпа -0.91 (CI -1.79–-0.05), фактор прибыли 0.81, общая доходность -91.3%, матожидание -$99.5 на сделку, максимальная просадка 93.9%, убыток во всех 7 годах. Фильтр ставки финансирования не работал (пороги 1000 б. п. спреда / 5000 б. п. на ногу почти никогда не срабатывают, поэтому все 912 сделок прошли без фильтра), а средняя позиция 138% усилила убытки из-за избыточного плеча и привела к обвалу.

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