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

Стратегии

BTC-ETH-SOL Дневная равновзвешенная корзина длинных позиций с фильтром тренда

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

BtcEthSolDailyEqualWeightTrendFilteredBasketLong

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

В стратегии предложена равновзвешенная корзина длинных позиций на BTC, ETH и SOL с фильтром тренда на дневном таймфрейме: каждый крупный актив удерживается, только пока его цена выше 50-дневной SMA. Несмотря на итоговую доходность 1603% и коэффициент Шарпа 0.70 примерно за 1329 дней данных, поведение бэктеста было физически невозможным: 157% валовая экспозиция в книге длинных позиций с плечом -1.0 и рост на +157.9% в день обвала рынка — следствие постоянного дефекта расчёта размера позиций. Ошибка сохранилась в трёх итерациях (валовая экспозиция 1033% → 405% → 157%; невозможная дневная доходность 177% → 98.8% → 157.9%); итоговая доходность падала только при снятии плеча, что показывает: видимое преимущество было артефактом плеча и учёта, а не альфой. Поэтому аналитик применил явное условие остановки из предыдущей итерации и отказался от стратегии на этапе проверки бэктеста, до оптимизации и последующих этапов проверки.

Гипотеза

Лонговая стратегия на нескольких инструментах (3 актива) с DYNAMIC BASKET на дневном таймфрейме для трёх самых ликвидных криптовалют с большой капитализацией — BTCUSDT.BINANCE, ETHUSDT.BINANCE, SOLUSDT.BINANCE. Механизм: на каждом дневном баре применяется фильтр тренда для каждого актива (закрытие > 50-дневной SMA), затем удерживаются лонговые позиции с равными весами в EVERY активах, прошедших фильтр. Состав корзины динамический: в любой момент времени могут удерживаться 0/1/2/3 активов. Когда фильтр проходят……Показать большеСвернуть

Лонговая стратегия на нескольких инструментах (3 актива) с DYNAMIC BASKET на дневном таймфрейме для трёх самых ликвидных криптовалют с большой капитализацией — BTCUSDT.BINANCE, ETHUSDT.BINANCE, SOLUSDT.BINANCE. Механизм: на каждом дневном баре применяется фильтр тренда для каждого актива (закрытие > 50-дневной SMA), затем удерживаются лонговые позиции с равными весами в EVERY активах, прошедших фильтр. Состав корзины динамический: в любой момент времени могут удерживаться 0/1/2/3 активов. Когда фильтр проходят все три актива, валовая экспозиция корзины составляет 99% (33% на каждый); когда проходит только один — 33%; когда не проходит ни один — 100% в денежных средствах. Ребалансировка проводится только при смене состояния фильтра, чтобы избежать ежедневных комиссий. Стратегия действительно отличается от двух стратегий ротации, недавно добавленных мной в конвейер (BTCETHRelativeStrengthRotationLong, BTCETHSOLThreeWayRotationLong): они концентрируют ALL капитала в активе с наибольшей силой и используют альфу периодов лидерства; THIS корзина диверсифицирует вложения между всеми активами, прошедшими фильтр, и использует бету широкого рынка. Эти два механизма дополняют друг друга: ротация выигрывает в периоды явного лидерства (например, сезон 2023 Q4 SOL), корзина — во время синхронных ралли (например, широкое ралли рынка 2024 Q1, когда все BTC + ETH + SOL выросли на 50-150%). Заполняет недобранную квоту по стратегиям на нескольких инструментах (8.9% при целевом значении ≥15%). Использует ONLY дневных баров, работоспособность которых подтверждена (BtcSpotDrawdownAccumulationLong подтверждает дневной таймфрейм BTC, EthDailyGoldenCrossMomentumLong подтверждает дневной таймфрейм ETH, SolDailyEmaTrendContinuationLong подтверждает дневной таймфрейм SOL). NO вторичных инструментов — это напрямую исключает режим отказа Layer-3-audit_stale, из-за которого провалились предыдущие предложения с несколькими площадками. Только лонг, поскольку для всех трёх крупнейших криптовалют зафиксирован положительный долгосрочный дрейф; гипотеза о направленной торговле только в шорт была опровергнута эмпирически.

Итерация 2 исправляет избыточную экспозицию и артефакты MTM, отмеченные в отзыве. Причина: предыдущий код увеличивал позиции только при смене фильтра и сокращал их лишь внутри диапазона, масштабированного по капиталу; по мере роста удерживаемых позиций (и капитала из-за нереализованного PnL, который увеличивал целевой размер каждой позиции) валовая экспозиция намного превышала целевую ~96% (exposure_pct 157%, волатильность 159.8%, невозможная дневная доходность +153%/+105%). Исправление сохраняет все ранее……Показать большеСвернуть

Итерация 2 исправляет избыточную экспозицию и артефакты MTM, отмеченные в отзыве. Причина: предыдущий код увеличивал позиции только при смене фильтра и сокращал их лишь внутри диапазона, масштабированного по капиталу; по мере роста удерживаемых позиций (и капитала из-за нереализованного PnL, который увеличивал целевой размер каждой позиции) валовая экспозиция намного превышала целевую ~96% (exposure_pct 157%, волатильность 159.8%, невозможная дневная доходность +153%/+105%). Исправление сохраняет все ранее прошедшие проверки уровни без изменений (те же импорты, буферы, вспомогательные функции, неактивные хуки, площадка и конфигурация) и переписывает блок расчёта размера в ONLY внутри calculate_signal в три явных этапа: (1) рассчитать номинал DESIRED на каждую позицию по одному снимку капитала с диапазоном допустимого отклонения, теперь симметричным: прибыльные позиции, отклонившиеся от цели ABOVE за пределы диапазона, сокращаются к цели, а не только увеличиваются при смене фильтра; (2) HARD GROSS CAP ограничивает любую удерживаемую позицию выше цели до целевого размера, так что общий открытый номинал <= equity*per_leg_pct*n_legs (~0.96x) и никогда не превышает 100% от NAV; (3) отправить согласованные дельты по каждой позиции. Поскольку лимит и целевые размеры используют один снимок капитала (включая нереализованный PnL), exposure_pct остаётся близким к 96% текущего NAV, а дневные движения портфеля ограничены фактическими изменениями базовых активов — это устраняет артефакты невозможной доходности и завышенной волатильности, сохраняя механизм динамической корзины из 0/1/2/3 позиций и отсутствие ежедневных издержек на комиссии.

Сработало условие отказа: в этом движке не удаётся правильно рассчитывать размер многопозиционной корзины после нескольких попыток. В предыдущей итерации прямо объявили попытку исправить расчёт размера FINAL последней и установили условие отказа: «если следующий бэктест по-прежнему покажет avg_position_pct > ~110% OR или доходность за любой день > ~25%, отказаться». Текущий бэктест явно нарушает это условие: exposure_pct=157% (предполагаемый предел ~96%) и доходность за один день +157.9% на 2021-05-19 — в день……Показать большеСвернуть

Сработало условие отказа: в этом движке не удаётся правильно рассчитывать размер многопозиционной корзины после нескольких попыток. В предыдущей итерации прямо объявили попытку исправить расчёт размера FINAL последней и установили условие отказа: «если следующий бэктест по-прежнему покажет avg_position_pct > ~110% OR или доходность за любой день > ~25%, отказаться». Текущий бэктест явно нарушает это условие: exposure_pct=157% (предполагаемый предел ~96%) и доходность за один день +157.9% на 2021-05-19 — в день рыночного CRASH примерно на 30%, когда корзина с длинными позициями должна LOSE. Значит, это значение — физически невозможный артефакт учёта (другие артефакты: +63.1%, +58.2%; return_kurtosis=410). За три итерации движок расчёта размера позиций прошёл от 1033% к 405%, затем к 157% валовой экспозиции, а невозможная дневная доходность изменилась с +177% на +98.8%, затем на +157.9%; физически корректного состояния так и не достигли, а заявленная доходность упала с 6704% до 2571%, затем до 1603% только из-за устранения артефакта плеча. Это свидетельствует, что видимое преимущество обусловлено искажением из-за плеча и учёта, а не альфой. Поскольку метрики остаются недостоверными (доходность невозможна), оптимизация бессмысленна, а несколько конкретных исправлений не устранили одну и ту же ошибку расчёта размера позиций, от стратегии отказываемся согласно действующему условию, не повторяя попыток. Если команда захочет вернуться к идее корзины с трендовым фильтром, понадобится исправленный движок расчёта размера позиций и учёта: валовая экспозиция должна опираться на стабильную базу капитала без нереализованного PnL, размер каждой позиции — корректироваться до целевого, а валовая экспозиция на каждом баре — проверяться. Сначала систему нужно проверить на одном активе.

Реализация

Равновзвешенная корзина длинных позиций с фильтром тренда на дневных бессрочных фьючерсах BTC/ETH/SOL. На каждом дневном баре фильтр для отдельного актива (закрытие > 50-дневной SMA) определяет состав; корзина держит равновзвешенные длинные позиции (~32% каждая) по всем активам, прошедшим фильтр, поэтому валовая экспозиция динамически меняется в диапазоне 0/33/66/96%. Ребалансировка — согласованное двухэтапное решение по одному снимку капитала: этап 1 задаёт номинал позиции через диапазон допустимого отклонения (полный выход при провале фильтра, удержание в пределах диапазона, изменение до целевого размера за его пределами); этап 2 вводит жёсткий лимит валовой экспозиции, сокращая до целевого размера любую позицию выше цели, поэтому общий открытый номинал не может превышать equity*per_leg_pct*n_legs (~0.96x); этап 3 отправляет рассчитанные дельты.

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

Шарп
0,70
Общая доходность
1603,04%
Максимальная просадка
44,14%
Всего сделок
167
Доля прибыльных
26,3%
Профит-фактор
1,84

Обоснованная концепция механизма (длинная корзина крупных активов с фильтром тренда на 3) и приемлемая частота сделок (167 сделок)

Расчёт размера позиций постепенно улучшался в нескольких итерациях (валовая экспозиция 1033% -> 405% -> 157%)

Валовая экспозиция STILL превышает целевой лимит ~96%: exposure_pct=157% в корзине длинных позиций с плечом=1.0 — «жёсткий лимит валовой экспозиции» не срабатывает

Физически невозможная дневная доходность сохраняется: +157.9% на 2021-05-19 (день рыночного CRASH примерно на 30%, когда корзина с длинными позициями должна LOSE), а также скачки +63.1% и +58.2%; return_kurtosis=410, асимметрия=17.9, tail_ratio=0.09 — результат определяется артефактами учёта.

Это REPEAT того же дефекта расчёта размера позиций, отмеченного в предыдущих итерациях (1033% -> 405% -> 157% экспозиции; +177% -> +98.8% -> +157.9% невозможных дней): несколько целевых исправлений не дали физически корректного бэктеста

В предыдущей итерации явно установлен порог KILL CONDITION (любая дневная доходность > ~25% => отказаться); текущий день +157.9% нарушает его более чем на 6x

Итоговая доходность упала с 6704% до 2571%, а затем до 1603% исключительно из-за снятия плеча, что подтверждает: видимое преимущество в значительной степени было артефактом плеча и учёта, а не альфой

Опубликованным метрикам (коэффициент Шарпа 0.70, total_return 1603%, бета 0.32) нельзя доверять, пока расчёт капитала и доходности даёт невозможные значения

Анализ

Не оптимизируй NOT: бэктест искажён чрезмерной экспозицией и артефактами MTM, из-за которых метрики физически невозможны: exposure_pct 157% и annualized_volatility 159.8% (~1.6x) вместо ожидаемой валовой экспозиции ~96% (3 позиции × 32%); доходность портфеля за отдельные дни невозможна (2021-11-26 +153%, 2024-01-22 +105%) и не может возникнуть у корзины из BTC/ETH/SOL с горизонтом 96%, а также end_unrealized_pct 531.96% (большая часть заголовочного показателя +1696% приходится на открытую позицию, которая не была……Показать большеСвернуть

Не оптимизируй NOT: бэктест искажён чрезмерной экспозицией и артефактами MTM, из-за которых метрики физически невозможны: exposure_pct 157% и annualized_volatility 159.8% (~1.6x) вместо ожидаемой валовой экспозиции ~96% (3 позиции × 32%); доходность портфеля за отдельные дни невозможна (2021-11-26 +153%, 2024-01-22 +105%) и не может возникнуть у корзины из BTC/ETH/SOL с горизонтом 96%, а также end_unrealized_pct 531.96% (большая часть заголовочного показателя +1696% приходится на открытую позицию, которая не была закрыта). FIXES: (1) NO TRIMMING OF WINNERS: ребалансировка только увеличивает позиции при смене состояния фильтра, а полоса допустимого отклонения игнорирует рост цены; поэтому по мере удорожания удерживаемых активов валовая экспозиция значительно превышает 96%. Добавь логику, которая сокращает каждую позицию до уровня около per_leg_pct*капитал при отклонении от целевого уровня ABOVE более чем на величину полосы, а не только при падении ниже него, чтобы валовая экспозиция оставалась около 96%. (2) EQUITY-WITH-UNREALIZED-PNL FEEDBACK: target_notional = капитал*per_leg_pct использует get_account_equity() с учётом нереализованного PnL, тогда как cur_notional = cur_qty*цена. Проверь, что этот учёт не приводит к чрезмерному увеличению позиций, и добавь жёсткий лимит: общий номинал всех открытых позиций по 3 инструментам не должен превышать капитал * (сумма per_leg_pct) ~0.96x. После исправления exposure_pct должен быть около 96% (никогда не выше 100%), annualized_volatility должен снизиться примерно до 80-100% (диапазон крупных криптоактивов), а дневная доходность не должна превышать фактическое изменение цен базовых активов. (3) Подтверди результат на корректно размеченном ряду с правильным размером позиций. NOTE: даже после исправления это по сути бета крупных криптоактивов с длинными позициями-3 и оверлеем тайминга 50-SMA (benchmark_correlation 0.64, бета 0.30). Стратегия должна показать реальную альфу и более высокую доходность с поправкой на риск, чем равновзвешенная стратегия BTC/ETH/SOL «купи и держи»; именно это должен обеспечить трендовый фильтр, помогая избежать просадки 2022 -63.6%. Если исправленная версия окажется лишь бета-стратегией с плечом и без альфы относительно «купи и держи», откажись от неё в следующем раунде.

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

Размер позиций в корзине из нескольких инструментов нужно сначала проверить на одном активе и привязать к стабильной базе капитала без нереализованного PnL; до доверия к итоговым метрикам требуется проверка валовой экспозиции на каждом баре.

От стратегии отказались на этапе проверки бэктеста до оптимизации (вердикт: отказаться), сработало действующее условие остановки из предыдущей итерации (экспозиция > ~110% или любая дневная доходность > ~25%); до этапов оптимизации, анализа и проверки рисков не дошли.

Дневная корзина длинных равновзвешенных позиций по BTC, ETH и SOL: удерживает равную длинную позицию в каждом крупном активе, цена закрытия которого выше 50-дневной SMA; динамически использует от 0 до 3 позиций, чтобы получать рыночную бету при синхронном широком росте (в отличие от родственных стратегий ротации одного актива).

В бэктесте за период с 2019-12-31 по 2026-06-25 указаны общая доходность 1603%, коэффициент Шарпа 0.70 и 167 сделок, но цифрам нельзя доверять: exposure_pct достиг 157% в книге длинных позиций с плечом -1.0, return_kurtosis достиг 410, а в день обвала рынка примерно на 30% появилась дневная доходность +157.9%.

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