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

Стратегии

SOL-AVAX Коинтеграционный спред, возврат к среднему, рыночно-нейтральная длинно-короткая стратегия (бессрочные контракты BINANCE USD-M, два инструмента, свечи 4ч, скользящий z-счёт спреда с коэффициентом хеджирования, вход только при широких отклонениях на 2 сигма, только OHLCV, 3 параметров)

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

SolAvaxCointSpreadMarketNeutralLS4h

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

Стратегия искала рыночно-нейтральное преимущество, играя на возврат широких отклонений в 2 сигма спреда SOL/AVAX: предполагалось, что бессрочные контракты L1 из одного сектора вернутся к устойчивому соотношению относительной стоимости. Конструкция работала по замыслу — чистая нейтральность к beta, без наращивания позиции, строго одна длинная и одна короткая позиция. Но базовое предположение о коинтеграции не подтвердилось: пара резко разошлась при ротации 2021 L1, что привело к году с результатом -73%, отдельному дню с -48.9% и ложному развороту +42%. Стратегия на возврат к среднему снова и снова платила за удержание расширяющихся спредов. На 590 достаточно большой выборке сделок убыток составил 82.76%; ожидание на сделку было отрицательным, фактор прибыли — 0.785, просадка — 87.6%. На этапе проверки до оптимизации аналитик отказался от стратегии как от принципиально неработающей, а не поддающейся оптимизации: настройка параметров z-оценки не могла создать отсутствующую коинтеграцию. Стратегия не дошла до оптимизации, анализа или проверки риска.

Гипотеза

Парная торговля на статистическом арбитраже с MARKET-NEUTRAL между двумя тесно коррелирующими высокобета бессрочными контрактами первого уровня L1: SOLUSDT.BINANCE (основной) и AVAXUSDT.BINANCE (хеджирующий), используя только 4-часовые данные OHLCV по обеим сторонам. Она сразу охватывает три наименее представленных измерения портфеля — парную торговлю (13.5%), направление long_short (14.2%) и рыночно-нейтральную конструкцию — с механизмом, который, судя по списку неудач, NOWHERE: это не ставка на возврат цены……Показать большеСвернуть

Парная торговля на статистическом арбитраже с MARKET-NEUTRAL между двумя тесно коррелирующими высокобета бессрочными контрактами первого уровня L1: SOLUSDT.BINANCE (основной) и AVAXUSDT.BINANCE (хеджирующий), используя только 4-часовые данные OHLCV по обеим сторонам. Она сразу охватывает три наименее представленных измерения портфеля — парную торговлю (13.5%), направление long_short (14.2%) и рыночно-нейтральную конструкцию — с механизмом, который, судя по списку неудач, NOWHERE: это не ставка на возврат цены отдельного актива (она проваливается при инверсии соотношения риска и доходности), не корзина ранжированных активов (L12 в расчёте комиссий), не перенос доходности за счёт фандинга или базиса (спред L1 ниже комиссии) и не сигнал из дополнительных потоков данных (стратегии по потоку сделок тейкеров/OI/премии/позиционированию, которые продолжают проваливать проверку). Преимущество основано на хорошо задокументированной склонности двух активов одного сектора уровня L1 возвращаться к устойчивому соотношению относительной стоимости после временных отклонений. Важно, что стратегия открывает позицию только при отклонениях спреда WIDE (не менее 2 сигмы): возвраты дают многопроцентные относительные движения, с запасом покрывающие издержки четырёх исполнений туда-обратно около 0.20%. Она удерживает строго одну позицию по спреду (одна длинная и одна короткая сторона) и использует явный стоп при расхождении, обходя ошибку пирамидинга и ликвидации, погубившую родственную стратегию по потоку сделок тейкеров DOGE. Параметров намеренно LOW-PARAMETER (период расчёта z, порог входа z, порог выхода z), чтобы избежать кладбища переобученных стратегий.

Итерация 2 устраняет единственную ошибку уровня -2: _ols_beta() была объявлена как @staticmethod и вызывалась через self._ols_beta(lb, la), но синтетический прокси уровня -2 повторно привязывает методы стратегии к экземпляру и снимает обёртку staticmethod. Поэтому вызов передавал функции с 2 аргументами 3 аргумента (self, lb, la) и во всех сценариях возникала ошибка 'takes 2 positional arguments but 3 were given'. Изменение превращает _ols_beta в обычный метод экземпляра (self, x, y); место вызова остаётся прежним, и привязка теперь корректна в прокси, движке бэктеста и реальной торговле. Логика сигнала, размера позиции, входа, выхода и взаимодействия компонентов не меняется, поэтому уже пройденные статические проверки уровня -1 остаются успешными, а механизм спреда, нейтрального к beta, сохраняется. Кредитное плечо 2.0 задействовано в расчёте размера позиции (equity * risk_frac * leverage) для обеих сторон: нейтральный портфель с валовым объёмом около 0.8x остаётся в пределах маржи.

Принципиально неработающая стратегия, оптимизация не поможет. Отрицательное ожидание на сделку (avg_trade_return_pct -0.497%, ниже комиссий), profit_factor 0.785 (< 1), total_return -82.76% и max_drawdown 87.6% за 590 сделок — однозначный убыток на достаточной выборке. Данные опровергли основное предположение (SOL и AVAX остаются коинтегрированными и возвращаются к среднему после широких отклонений): пара резко разошлась при ротации 2021 L1 (годовая -73%, день с движением -48.9% на 2021-09-09, ложный разворот +42% на 2022-11-11, эксцесс 18), поэтому стратегия на возврат z-оценки удерживала позиции, пока спреды расширялись. Оптимизация z_lookback/entry_z/exit_z не создаст отсутствующую коинтеграцию и не изменит отрицательное ожидание — она лишь приведёт к переобучению на двух аномальных днях. Не стоит тратить 2 часов на оптимизацию.

Реализация

Рыночно-нейтральная парная торговля на коинтеграции SOLUSDT и AVAXUSDT — бессрочных контрактах BINANCE USD-M, свечи 4ч, только OHLCV. Скользящая OLS по логарифмам цен даёт коэффициент хеджирования beta; спред log(SOL) - beta*log(AVAX) переводится в z-оценку по z_lookback свечам. При широком отклонении >= 2 сигма стратегия открывает одну позицию со спредом, нейтральную к beta: покупает недооценённую сторону и продаёт переоценённую. Закрытие происходит при возврате к среднему (|z|<=exit_z), стопе при расхождении (|z|>=stop_z) или по истечении max_hold_bars. Одновременно открыта ровно одна длинная и одна короткая сторона.

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

Проверка не пройдена (уровень 2 — синтетические сценарии): Использованные параметры: ['exit_z', 'stop_z', 'entry_z', 'beta_max', 'beta_min', 'risk_frac', 'z_lookback', 'min_notional', 'max_hold_bars'] Проверь, что __init__ устанавливает все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: SolAvaxCointSpreadMarketNeutralLS4h._ols_beta() принимает 2 позиционных аргументов, но передано 3 (временная метка свечи: 1735700580000) - steady_downtrend: TypeError:……Показать большеСвернуть

Проверка не пройдена (уровень 2 — синтетические сценарии): Использованные параметры: ['exit_z', 'stop_z', 'entry_z', 'beta_max', 'beta_min', 'risk_frac', 'z_lookback', 'min_notional', 'max_hold_bars'] Проверь, что __init__ устанавливает все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: SolAvaxCointSpreadMarketNeutralLS4h._ols_beta() принимает 2 позиционных аргументов, но передано 3 (временная метка свечи: 1735700580000) - steady_downtrend: TypeError: SolAvaxCointSpreadMarketNeutralLS4h._ols_beta() принимает 2 позиционных аргументов, но передано 3 (временная метка свечи: 1735700580000) - flat_ranging: TypeError: SolAvaxCointSpreadMarketNeutralLS4h._ols_beta() принимает 2 позиционных аргументов, но передано 3 (временная метка свечи: 1735700580000) - volatility_spike: TypeError: SolAvaxCointSpreadMarketNeutralLS4h._ols_beta() принимает 2 позиционных аргументов, но передано 3 (временная метка свечи: 1735700580000) - zero_volume: TypeError: SolAvaxCointSpreadMarketNeutralLS4h._ols_beta() принимает 2 позиционных аргументов, но передано 3 (временная метка свечи: 1735700580000) - price_gap: TypeError: SolAvaxCointSpreadMarketNeutralLS4h._ols_beta() принимает 2 позиционных аргументов, но передано 3 (временная метка свечи: 1735700580000)

Решение аналитика на этапе backtest_review (оптимизировать/итеративно доработать/отказаться). Исправление кода не требуется. При оптимизации следи, чтобы тонкое преимущество не опустилось ниже порога затрат в четыре исполнения, и отслеживай перекос avg_loss>avg_win.

Реализованное преимущество невелико и статистически неотличимо от нуля — это решение аналитика на этапе backtest_review, а не дефект кода. Тестовый прогон (metrics_reliable=true, 90 сделок за 363 дней, удержание около 2.6д, без ликвидации): avg_trade_return_pct 0.244% едва покрывает затраты около 0.20% на полный круг из четырёх исполнений для двухсторонней фьючерсной пары; profit_factor 1.038 лишь немного выше безубыточности; Sharpe 0.046, а CI [-1.49, +1.62] пересекает ноль; только total_return 3.14%. Тест комиссий на уровне дизайна PASSES (entry_z=2.0 нацелена на развороты спреда в несколько процентов при 2 сигма, что значительно больше 0.20%), поэтому это недостаток фактических результатов, а не ошибка расчёта комиссий в дизайне. Обрати внимание: avg_loss ($1,894) > avg_win ($1,572): стратегия на возврат к среднему немного чаще выигрывает (55.6%), но чуть больше теряет на каждой убыточной сделке — небольшой перекос в пользу риска при меньшем вознаграждении, за которым стоит следить, хотя PF остаётся >1.

Изменения не требуются; убедись, что окно бэктеста/оптимизации достаточно длинное, чтобы набрать более ~100 сделок, прежде чем доверять Sharpe.

Число сделок (90 за 363 дней) немного ниже комфортного минимума примерно в 100 сделок для оценки измеримости в этом тестовом окне длиной около 1 лет. Это полноценная стратегия парной торговли с удержанием позиций по несколько дней, поэтому такая частота закономерна; metrics_reliable=true. За многолетний бэктест число сделок должно превысить 100. Отмечаем это лишь для того, чтобы аналитик учитывал размер выборки при оценке тонкого преимущества: широкий Sharpe CI отражает это.

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

Шарп
0,17
Общая доходность
-82,76%
Максимальная просадка
87,58%
Всего сделок
590
Доля прибыльных
50,3%
Профит-фактор
0,79

Чистая рыночно-нейтральная конструкция: beta -0.08, benchmark_correlation -0.31 — портфель действительно хеджировал направленный риск

Достаточная выборка (590 сделок примерно за 5.9 лет), поэтому отрицательный результат статистически убедителен, а не является шумом

Нет ошибок наращивания позиции или ликвидации; строго одна длинная и одна короткая позиция, как задумано, со стопом при расхождении

avg_trade_return_pct -0.497% — ожидание на сделку NEGATIVE, ниже комиссий; profit_factor 0.785 (< 1, чистый убыток); ожидание -$125/сделку

total_return -82.76% и max_drawdown 87.6% (за пределами порога безусловного отказа 50%, от CI до 99.6%)

Предположение о коинтеграции опровергнуто: годовая -73% на 2021, отдельный день с движением -48.9% (2021-09-09) и ложный разворот +42% (2022-11-11), эксцесс 18 — SOL/AVAX разошлись вместо возврата к среднему; stop_z не защитил

Sharpe 0.166, при этом CI [-0.48, 0.86] пересекает ноль; calmar -0.90; information_ratio -0.78

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

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

Аналитик отказался от стратегии на этапе проверки бэктеста до оптимизации, поскольку предположение о коинтеграции не подтвердилось: SOL и AVAX резко разошлись при ротации 2021 L1 (2021 годовая -73%, день с движением -48.9% на 2021-09-09, ложный разворот +42%, эксцесс 18). Поэтому стратегия на возврат z-оценки удерживала позиции, пока спреды расширялись. Настройка параметров не могла создать отсутствующую коинтеграцию или изменить отрицательное ожидание.

Рыночно-нейтральная сделка статистического арбитража на бессрочных контрактах L1 из одного сектора: SOLUSDT.BINANCE (длинная сторона) и AVAXUSDT.BINANCE (хедж), свечи 4ч OHLCV. Скользящий спред с коэффициентом хеджирования OLS переводится в z-оценку; при широком отклонении (>= 2 сигма) стратегия открывает одну длинно-короткую позицию, нейтральную к beta, рассчитывая на возврат к среднему, и закрывает её при возврате к среднему, срабатывании стопа при расхождении или по истечении заданного времени.

За ~5.9 лет и 590 сделок стратегия показала однозначный убыток на достаточной выборке: avg_trade_return_pct -0.497% (отрицательный результат, ниже комиссий), фактор прибыли 0.785, ожидание -$125/сделку, общая доходность -82.76%, максимальная просадка 87.6% (CI–99.6%) и Sharpe 0.166, при этом CI пересекает ноль. Однако конструкция чисто хеджировала направленный риск (beta -0.08, корреляция с бенчмарком -0.31).

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