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

Стратегии

Ротация длинных и коротких секторных корзин DeFi и L1 по моментуму (еженедельная)

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

DefiVsL1SectorMomentumBasketRotationLongShort

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

Гипотеза

Стратегия DOLLAR-NEUTRAL CROSS-SECTOR MOMENTUM ROTATION: две корзины из 2 инструментов (DeFi/инфраструктура: LINK + AAVE; крупные L1: BTC + ETH), где стратегия ROTATES, какой сектор покупать, а какой продавать, на основе относительного импульса за предыдущие 4 недели. RATIONALE обусловлено выводом, сделанным на этой сессии DEFINITIVE: все попытки стратегий (14 и более) в категориях механизмов 5 провалились. В последнем обновлении калибровки аналитик прямо признаёт: «Извлечение закономерностей на уровне классов,……Показать большеСвернуть

Стратегия DOLLAR-NEUTRAL CROSS-SECTOR MOMENTUM ROTATION: две корзины из 2 инструментов (DeFi/инфраструктура: LINK + AAVE; крупные L1: BTC + ETH), где стратегия ROTATES, какой сектор покупать, а какой продавать, на основе относительного импульса за предыдущие 4 недели. RATIONALE обусловлено выводом, сделанным на этой сессии DEFINITIVE: все попытки стратегий (14 и более) в категориях механизмов 5 провалились. В последнем обновлении калибровки аналитик прямо признаёт: «Извлечение закономерностей на уровне классов, которое я выполнил за эту сессию (EVERY), было ошибочным» — и указывает на оставшиеся категории, которые действительно не тестировались. Это предложение прямо отвечает на явную рекомендацию аналитика: «Статистический арбитраж на секторных корзинах (длинная позиция по корзине из DEX токенов против короткой позиции по корзине из L1 токенов как единой позиции)» — механизм TRULY, не тестировавшийся в этой сессии. KEY DIFFERENTIATION по результатам 4 опровергнутых межрыночных пар (ETH/BTC, BNB/ETH, SOL/ETH, LINK/ETH: (a) MULTI-INSTRUMENT на каждую сторону — инструменты DeFi (2) против инструментов 2 L1 — внутренняя диверсификация каждого плеча ослабляет асимметрию отдельных активов, из-за которой провалились все парные стратегии MR. (b) На основе MOMENTUM, возврат к среднему NOT — стратегия ROTATES на сектор, который опережал другие, рассчитывая на продолжение импульса; структурно это отличается от MR, где предполагается разворот тренда. (c) Тезис SECTOR против SECTOR: вместо ставки на возврат двух активов друг к другу стратегия рассчитывает, что OUTPERFORMING SECTOR продолжит опережать другие сектора (академические работы об импульсе: Asness/Frazzini/Pedersen). (d) Ребалансировка WEEKLY — низкая частота, низкие комиссии, охват межсекторных трендов, описанных в моделях факторов акций. (e) Зависимость от дополнительных данных ZERO. (f) MAXIMALLY SIMPLE — параметр решения 1 (число недель для расчёта импульса=4). DIFFERENTIATION FROM L1 BASKET (в конвейере): L1SectorBasketCrossSectionalMomentumLongShortDaily ранжирует WITHIN один сектор (5 L1s); эта стратегия ранжирует BETWEEN два сектора. Сигнал и математика отличаются, что даёт дополнительную диверсификацию.

Исправление итерации-6 устраняет только указанную причину отказа бэктест-проверки: «Знак коэффициента Шарпа 0.09 не совпадает со знаком total_return -13.89%». Обе величины рассчитываются по кривой капитала с переоценкой по рынку SAME в runner.py, поэтому положительная средняя дневная доходность при отрицательной совокупной доходности означает волатильностный износ (mu - sigma^2/2 < 0), то есть дисперсия портфеля на бар была намного выше, чем оправдывало его преимущество. Исправлены две структурные причины без……Показать большеСвернуть

Исправление итерации-6 устраняет только указанную причину отказа бэктест-проверки: «Знак коэффициента Шарпа 0.09 не совпадает со знаком total_return -13.89%». Обе величины рассчитываются по кривой капитала с переоценкой по рынку SAME в runner.py, поэтому положительная средняя дневная доходность при отрицательной совокупной доходности означает волатильностный износ (mu - sigma^2/2 < 0), то есть дисперсия портфеля на бар была намного выше, чем оправдывало его преимущество. Исправлены две структурные причины без изменений ранжирования по импульсу, календарной привязки, синхронизированного буфера O(1) или импортов/структуры, уже прошедших уровни 1-3: (1) позиции открывались один раз и не ребалансировались, так что их затрагивал только разворот сектора — прибыльная позиция наращивалась, а шорт сокращался, и «нейтральная» корзина набирала большую чистую дельту, дисперсия которой подавляла секторный спред; теперь при еженедельной ротации отправляются рыночные ордера по дельте (NETTING OMS), чтобы вернуть каждую позицию на той же стороне к общей целевой номинальной стоимости, если отклонение превышает rebalance_band. Именно это и означает «еженедельная ребалансировка» в гипотезе; кроме того, прибыль и убыток периодически фиксируются, а не остаются нереализованными годами. (2) gross_exposure снижает 0.95 -> 0.60 (заявленные границы 0.30-0.90): износ растёт пропорционально квадрату экспозиции, тогда как среднее растёт линейно, поэтому совокупная доходность теперь соответствует знаку преимущества на сделку. Важно отметить: коэффициент Шарпа 0.09 означает, что в последнем запуске преимущество спреда секторного импульса было небольшим; снижение дисперсии делает метрики согласованными, но не создаёт преимущество. Если следующий бэктест будет согласованным, но плоским, сам механизм будет опровергнут.

Отрицательное матожидание на надёжной выборке из 324 сделок за 6.7 лет: avg_trade_return_pct -0.28% (ниже ZERO), profit_factor 0.94, total_return -13.67%, коэффициент Шарпа -0.010 (CI [-0.76, 0.74] включает ноль), матожидание -$63/сделку при avg_loss (2156), превышающем avg_win (2109). Сделки корректно реализуют гипотезу (нейтральность к доллару, сбалансированный лонг 162 / шорт 162, еженедельная ребалансировка), поэтому этот тест FAIR проверяет предположение о сохранении секторного импульса DeFi против L1 — и……Показать большеСвернуть

Отрицательное матожидание на надёжной выборке из 324 сделок за 6.7 лет: avg_trade_return_pct -0.28% (ниже ZERO), profit_factor 0.94, total_return -13.67%, коэффициент Шарпа -0.010 (CI [-0.76, 0.74] включает ноль), матожидание -$63/сделку при avg_loss (2156), превышающем avg_win (2109). Сделки корректно реализуют гипотезу (нейтральность к доллару, сбалансированный лонг 162 / шорт 162, еженедельная ребалансировка), поэтому этот тест FAIR проверяет предположение о сохранении секторного импульса DeFi против L1 — и оно измеримо опровергнуто: положительного валового преимущества нет, а доходность зависит от режима (нормальный терциль -33.1%, стрессовый +31.4%, regime_spread 1.35), а не от стабильного спреда между секторами. Комиссия составляет лишь 1.5% от валового результата при невысоком недельном обороте, так что дело не в чувствительности к комиссиям NOT: сигнал отрицателен до учёта комиссий. Единственный реальный параметр решения (период ретроспективы) не может обратить сигнал с PF-0.94 и отрицательным матожиданием; оптимизировать здесь нечего. Это 6-я итерация, и разработчик заранее решил, что согласованный, но плоский или отрицательный результат опровергнет механизм — теперь этот результат получен. Соответствует априорному ожиданию для класса мультиинструментальных лонг-шорт корзин (L45/L63, multi_instrument ~0/84): результат на уровне портфеля объясняется бетой режима, а не преимуществом отдельных секторов. Не стоит тратить 2 часов на оптимизацию. abandon_class=negative_expectancy.

Реализация

Нейтральная к доллару ротация по секторному импульсу на дневных барах BINANCE USD-M. Две корзины по 2 инструмента (DeFi: LINKUSDT+AAVEUSDT; L1: BTCUSDT+ETHUSDT). На недельной сетке с календарной привязкой (индекс дня эпохи делится на rebalance_days) сравнивается средняя доходность участников каждой корзины за предыдущие 28 дней; стратегия открывает лонг по обоим участникам сектора-лидера и шорт по обоим участникам отстающего сектора с равной номинальной стоимостью на позицию. При еженедельной ротации теперь также выравнивается номинальная стоимость каждой сохраняемой позиции до общей целевой, если отклонение превышает rebalance_band, благодаря чему портфель остаётся нейтральным к доллару, а не накапливает чистую направленную позицию; валовая экспозиция ограничена 0.60 капитала.

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

Уточни текст/название гипотезы: «недельная ребалансировка на дневных свечах». Тогда эвристика проверки строк уровня -1.5 и будущие проверки QA не отметят её повторно. Менять код не нужно.

В названии гипотезы указано «(недельная)», а проверка согласованности конвейера отметила config.bar_type = BTCUSDT.BINANCE-1-DAY-LAST-EXTERNAL как несоответствие недельному периоду. При проверке выяснилось, что фактическое утверждение гипотезы — WEEKLY REBALANCING (не недельные свечи): в ней заданы «недельная ребалансировка» и «число недель в окне=4». Код реализует это именно так: сетка ротации с привязкой к календарю и шагом 7 дней (rebalance_days=7), моментум рассчитывается за 28 дней на дневных свечах. Дневные свечи структурно необходимы для шага _reconcile на каждом баре: перевёрнутая часть позиции возвращается на следующем дневном баре. Семантика недельной ротации, инструменты, направление, размер позиций и основная идея преимущества соответствуют гипотезе. Это расхождение в обозначении, а не замена механизма или сломанный сигнал. Не препятствует проверке.

Проверь, учитывает ли базовый FactoryStrategy переопределение min_bars_required подклассом при проверке прогрева. Если нет, прогрев обеспечивают условия len(self._synced) >= lookback+1 внутри _sector_momentum/calculate_signal; они уже предотвращают преждевременные сигналы.

min_bars_required(self) переопределяет метод фреймворка (предупреждение статического анализатора base_shadow). Он возвращает lookback_days+2, что является разумным требованием к прогреву окна моментума. Значит, переопределение, по-видимому, сделано намеренно и корректно, а не является случайным перекрытием метода.

Проверка в песочнице дала отрицательный результат (total_return -13.67%, коэффициент Шарпа -0.006, avg_trade_return_pct -0.28%, PF 0.96). Это 6-я итерация: изменения устраняют просадку от волатильности и дрейф долларовой нейтральности, а не устанавливают преимущество. Разработчик прямо отмечает: «если следующий бэктест будет согласованным, но нулевым, сам механизм опровергнут». Метрики теперь внутренне согласованы (знак коэффициента Шарпа совпадает с доходностью) — это и было целью исправления, но положительного валового преимущества пока не видно. Разбивка по режимам показывает, что доходность зависит от режима (обычный терциль -35.5%, стрессовый +31.6%), а не от стабильной разницы моментума секторов. Аналитик должен оценивать полный период и оптимизированные показатели; если согласованный результат нулевой или отрицательный, это опровергает гипотезу, а не указывает на проблему с комиссиями (комиссия — лишь 1.4% валового результата, недельный оборот удобен с точки зрения комиссий).

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

Шарп
-0,01
Общая доходность
-13,67%
Максимальная просадка
25,48%
Всего сделок
324
Доля прибыльных
49,1%
Профит-фактор
0,94

Сделки точно соответствуют гипотезе: долларово-нейтральные, сбалансированные длинная позиция 162 / короткая 162 в двух секторных корзинах, ребалансировка каждую неделю. Это честная проверка предположения о моментуме секторов, механизм работает корректно.

Низкие комиссии заложены в конструкцию: комиссия — лишь 1.5% от валового результата при недельном обороте; провал NOT связан с комиссиями.

Метрики теперь внутренне согласованы: знак коэффициента Шарпа совпадает с total_return, значит, исправление просадки от волатильности в итерации -6 сработало технически.

Отрицательное математическое ожидание на решающей выборке из 324 сделок за 6.7 лет: avg_trade_return_pct -0.28% (ниже ZERO), profit_factor 0.94, total_return -13.67%, ожидание -$63 на сделку, коэффициент Шарпа -0.010 (CI [-0.76, 0.74] пересекает ноль).

Положительного валового преимущества нет: avg_win 2109 < avg_loss 2156, win_rate 0.49 — разница моментума секторов не сохраняется. «Преимущество» — шум, зависящий от режима, а не стабильный сигнал: обычный терциль -33.1% против стрессового +31.4%; знак результата меняется вместе с режимом, а не отражает повторяемую разницу между секторами.

Итерация 6; разработчик заранее зафиксировал, что согласованный, но нулевой или отрицательный результат опровергнет механизм — именно такой результат и получен. Единственный реальный параметр решения — 1 (окно расчёта), настраивать нечего: сигнал убыточен до учёта комиссий.

Соответствует априорному ожиданию для класса многокомпонентных длинных и коротких корзин (L45/L63, multi_instrument ~0/84): доходность всей книги отражает бету режима, а не преимущество отдельных активов или секторов.

Анализ

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

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

Проверка не пройдена (уровень 4 — проверка QA) [класс=code_defect]: - [edge_concern] Вторично по сравнению с блокирующим дефектом: результат в песочнице отрицательный (total_return -17.0%, коэффициент Шарпа 0.04, PF 0.97, avg_trade_return_pct -0.061%, max_drawdown 40.9% CI до 80.8%), а конструкция рыночно-нейтральна — свидетельств того, что ротация покрывает издержки, нет. Но причина блокировки не в этом; результат следует повторно оценить после исправления реализации, поскольку текущие даты ротации сами являются……Показать большеСвернуть

Проверка не пройдена (уровень 4 — проверка QA) [класс=code_defect]: - [edge_concern] Вторично по сравнению с блокирующим дефектом: результат в песочнице отрицательный (total_return -17.0%, коэффициент Шарпа 0.04, PF 0.97, avg_trade_return_pct -0.061%, max_drawdown 40.9% CI до 80.8%), а конструкция рыночно-нейтральна — свидетельств того, что ротация покрывает издержки, нет. Но причина блокировки не в этом; результат следует повторно оценить после исправления реализации, поскольку текущие даты ротации сами являются артефактом расписания, привязанного ко времени работы процесса. - Недельной ребалансировкой управляет PROCESS-RELATIVE BAR COUNTER с маркером -(10**9) — именно этот антипаттерн 18 отмечает как критический для стратегий ротации. `self._signal_bar_count += 1` затем выполняет ребалансировку, когда `(_signal_bar_count - _last_rebalance) >= rebalance_days` с `_last_rebalance = -(10**9)`. Привязка ко времени работы процесса, а не к календарю: (1) запускает полную ребалансировку 4 частей позиции на первом баре после каждого перезапуска (1 - (-1e9) >= 7 немедленно), поэтому цикл аварийного сбоя и перезапуска в реальной торговле будет постоянно менять всю книгу; (2) недельная сетка закреплена за моментом запуска процесса, а не датой бара, поэтому даты ротации плавают и паритет/повторное воспроизведение невозможно обеспечить. Для стратегии, чьё единственное преимущество — WHEN ротация, это дисквалифицирующий дефект. - _last_rebalance задаётся при первом вызове, хотя _rebalance() сразу завершается без согласованной истории. Поэтому первая реальная торговая ребалансировка и вся недельная сетка смещены относительно произвольного бара. Это автоматически исправится, когда расписание будет привязано к временной метке бара.

Проверка не пройдена (уровень 1 — конфигурация): config.instrument_id и config.bar_type имеют значение REQUIRED (получено instrument_id=None, bar_type=None). Укажи оба инструмента, соответствующие гипотезе, например instrument_id='BTCUSDT.BINANCE', bar_type='BTCUSDT.BINANCE-4-HOUR-LAST-EXTERNAL'.

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

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