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

Стратегии

Доллар-нейтральная корзина импульса Binance USD-M с близостью к максимуму за период в 52 недель (крупные монеты с подтверждённой историей, ранжирование по близости к максимуму, ограниченный размер позиций без плеча, еженедельная ребалансировка, длинные и короткие позиции)

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

HighProximityMomentumDollarNeutralBasketDaily

Действительно отдельный, описанный в исследованиях сигнал (близость к максимуму за 52 недель по Джорджу—Хвангу) с простой конструкцией на одном параметре и низкой оборачиваемостью (комиссия всего 1.1% валовой позиции)

Гипотеза

Нейтральная к доллару дневная корзина кросс-секционного импульса по ~10 устоявшимся крупным активам Binance USD-M с подтверждённой полной историей (BTC, ETH, SOL, BNB, XRP, DOGE, ADA, LTC, LINK, BCH) использует сигнал 52-WEEK-HIGH PROXIMITY (George & Hwang), а не импульс по прошлой доходности. Для каждого актива оценивается близость текущей цены к максимуму за последние ~1 лет (близость = цена закрытия / максимум за последние -252 дней; значение около 1.0 означает цену на максимуме); в корзину включаются LONG……Показать большеСвернуть

Нейтральная к доллару дневная корзина кросс-секционного импульса по ~10 устоявшимся крупным активам Binance USD-M с подтверждённой полной историей (BTC, ETH, SOL, BNB, XRP, DOGE, ADA, LTC, LINK, BCH) использует сигнал 52-WEEK-HIGH PROXIMITY (George & Hwang), а не импульс по прошлой доходности. Для каждого актива оценивается близость текущей цены к максимуму за последние ~1 лет (близость = цена закрытия / максимум за последние -252 дней; значение около 1.0 означает цену на максимуме); в корзину включаются LONG активы из крупных, наиболее близкие к максимумам, и SHORT наиболее отдалённые от них, с равным долларовым номиналом. Это задокументированная STANDALONE аномалия импульса, эмпирически лишь частично коррелирующая с импульсом на основе доходности: активы около максимумов продолжают опережать рынок (якорение и недостаточная реакция на хорошие новости). Поэтому это действительно отдельный сигнал от продвигаемой фабрикой корзины тренда на основе доходности, кросс-секционной корзины ранжирования RETURN (моя, ожидает проверки) и BREAKOUT Дончиана (непрерывное состояние близости к максимуму вместо события пробоя). Стратегия остаётся строго в рамках единственного подтверждённого семейства преимуществ (DAILY импульс на устоявшихся крупных активах; внутридневные, только короткие и долгосрочные варианты, а также варианты с MR опровергнуты), использует только дневные данные по крупным активам OHLCV (безопасные по данным: корзины широкого рынка альткоинов и HL теряют работоспособность из-за качества данных) и рассчитана на устранение BOTH повторяющихся причин провала: (1) единственный параметр FROZEN — окно максимума, поэтому оптимизатор walk-forward не может чрезмерно под него подстроиться (исправление переобучения с последующим обвалом); (2) скаляр кредитного плеча для нацеливания на волатильность NO и веса, обратные волатильности, без ограничения NO — примерно равные веса с лимитом и жёстким ограничением валовой позиции на уровне 1.0× (исправление взрывного роста плеча). Рыночно-нейтральная конструкция улучшает асимметрию длинных позиций 87%; еженедельная ребалансировка сохраняет комиссии незначительными.

Исправление итерации 4 для сбоя Layer-2: `self._bar_ts(bar)` вызвал `TypeError: _bar_ts() takes 1 positional argument but 2 were given`, поскольку синтетический прокси Layer-2 предоставляет `_bar_ts` с сигнатурой, отличной от сигнатуры базового объекта в рабочем режиме. Минимальное изменение: добавлен локальный статический метод `_ts_of(bar)`, который напрямую читает `bar.ts_event`/`bar.ts_init`, и заменён единственный вызов. Структура, импорты и логика сигнала/ребалансировки, прошедшие Layer-1, не изменены, поэтому предыдущие уровни не регрессируют. Реализует аномалию близости к максимуму за 52 недель Джорджа и Хванга как отдельный дневной сигнал моментума с единственным фиксированным параметром преимущества (high_window) и без таргетирования волатильности/плеча с обратной волатильностью, напрямую устраняя оба прежних повторяющихся режима отказа.

Убыточная по чистому результату рыночно-нейтральная по доллару корзина с близостью к максимуму за 52 недель и катастрофической просадкой — не стоит 2 часов оптимизации. За 252 сделок: total_return -68.84%, CAGR -17.0%, profit_factor 0.775, матожидание -$263.55/сделку, avg_trade_return_pct -2.22% (отрицательное), коэффициент Шарпа -0.108 (CI [-0.85, 0.70] пересекает ноль), PSR 0.40, и max_drawdown 83.6% (с CI по 98.7%) — значительно хуже жёсткого порога отказа L19; волатильность обычного режима равна -73%. Убыток……Показать большеСвернуть

Убыточная по чистому результату рыночно-нейтральная по доллару корзина с близостью к максимуму за 52 недель и катастрофической просадкой — не стоит 2 часов оптимизации. За 252 сделок: total_return -68.84%, CAGR -17.0%, profit_factor 0.775, матожидание -$263.55/сделку, avg_trade_return_pct -2.22% (отрицательное), коэффициент Шарпа -0.108 (CI [-0.85, 0.70] пересекает ноль), PSR 0.40, и max_drawdown 83.6% (с CI по 98.7%) — значительно хуже жёсткого порога отказа L19; волатильность обычного режима равна -73%. Убыток в 4 из 7 лет (2021 -67.4%, 2024 -23.2%, 2025 -18.8%), поэтому аномалия близости к максимуму за 52 недель Джорджа—Хванга не перенеслась на крупные криптоактивы. Результат также обусловлен выбросами, а контроль нейтральности и плеча не сработал как задумано: return_kurtosis 137, дневная доходность -67.77% по 2021-04-19 и exposure_pct 605.88% вопреки заявленному лимиту валовой позиции, нейтральной по доллару, -1.0x. Это класс рыночно-нейтральных корзин поперечного сечения L45/L52 (0/84 multi_instrument); значение benchmark_meaningful корректно равно false, а все абсолютные метрики доходности с поправкой на риск отрицательны. С единственным фиксированным параметром high_window оптимизатору практически нечего настраивать, и настройка не исправит 84% просадку или отрицательное преимущество на сделку. Сценарий отказа: корзина моментума поперечного сечения no_edge/risk_reject с нейтральностью к рынку и более чем 50% DD.

Реализация

Рыночно-нейтральная по доллару корзина моментума с близостью к максимуму за 52 недель по примерно 10 устоявшимся крупным активам Binance USD-M на дневных барах. Для каждого актива рассчитывается близость = close / максимум за предыдущие -252 дней; раз в неделю корзина открывает длинные позиции в top_k активах, ближайших к максимумам, и короткие — в bottom_k, сильнее всего отстающих от них, с равным номиналом в долларах; валовая позиция жёстко ограничена 1.0x капитала (без плеча). При ребалансировке заявки на изменение позиции (цель минус текущая подписанная величина) проходят через систему неттинга OMS.

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

CLEAN RESTART 2026-09-04 — историю вердиктов и записи обучения этого запуска удалили, и он начат заново с проверки. Предыдущий отказ произошёл из-за конвейера, а не рынка: тестовый каркас Layer-2 неверно привязывал вспомогательные методы @staticmethod (исправлено), QA выносил окончательные вердикты о доходности по неоптимизированному дымовому тесту (убрано — теперь QA оценивает только корректность), а тайм-ауты песочницы были вызваны нехваткой слотов для бэктеста (исправлено). Гипотеза и код стратегии не изменились. Оцени код по существу; доходность будет определена позднее полным бэктестом и оптимизатором.

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

Шарп
-0,11
Общая доходность
-68,84%
Максимальная просадка
83,61%
Всего сделок
252
Доля прибыльных
49,2%
Профит-фактор
0,78

Действительно отдельный, описанный в исследованиях сигнал (близость к максимуму за 52 недель по Джорджу—Хвангу) с простой конструкцией на одном параметре и низкой оборачиваемостью (комиссия всего 1.1% валовой позиции)

Убыточна по чистому результату: total_return -68.84%, CAGR -17.0%, profit_factor 0.775, матожидание -$263.55/сделку, avg_trade_return_pct -2.22% (отрицательное)

max_drawdown 83.6% (с CI по 98.7%) — за пределами жёсткого порога отказа 50% (L19); корзина обычного режима -73%

Значимого преимущества нет: коэффициент Шарпа -0.108 (CI [-0.85, 0.70] пересекает ноль), PSR 0.40; убыток в 4 из 7 лет, результат хуже, чем у 2021 -67.4%

Экспозиция/размер позиции не соответствуют замыслу: exposure_pct 605.88% и дневная доходность -67.77% (2021-04-19) при заявленной валовой позиции, нейтральной по доллару, -1.0x; эксцесс 137, асимметрия -2.7 — результат обусловлен выбросами

Класс рыночно-нейтральных корзин поперечного сечения L45/L52 (0/84); единственный фиксированный параметр не оставляет оптимизатору ничего для настройки

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

Проверка не пройдена (уровень Layer 2 — синтетические сценарии): Использованные параметры: ['top_k', 'assets', 'high_window', 'min_notional', 'qty_precision', 'gross_cap_frac', 'rebalance_days', 'default_qty_precision'] Убедитесь, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: HighProximityMomentumDollarNeutralBasketDaily._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000) - steady_downtrend: TypeError:……Показать большеСвернуть

Проверка не пройдена (уровень Layer 2 — синтетические сценарии): Использованные параметры: ['top_k', 'assets', 'high_window', 'min_notional', 'qty_precision', 'gross_cap_frac', 'rebalance_days', 'default_qty_precision'] Убедитесь, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: HighProximityMomentumDollarNeutralBasketDaily._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000) - steady_downtrend: TypeError: HighProximityMomentumDollarNeutralBasketDaily._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000) - flat_ranging: TypeError: HighProximityMomentumDollarNeutralBasketDaily._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000) - volatility_spike: TypeError: HighProximityMomentumDollarNeutralBasketDaily._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000) - zero_volume: TypeError: HighProximityMomentumDollarNeutralBasketDaily._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000) - price_gap: TypeError: HighProximityMomentumDollarNeutralBasketDaily._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000)

Проверка не пройдена (уровень Layer 2 — синтетические сценарии): Использованные параметры: ['top_k', 'assets', 'high_window', 'min_notional', 'qty_precision', 'gross_cap_frac', 'rebalance_days', 'default_qty_precision'] Убедитесь, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000) - steady_downtrend: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный……Показать большеСвернуть

Проверка не пройдена (уровень Layer 2 — синтетические сценарии): Использованные параметры: ['top_k', 'assets', 'high_window', 'min_notional', 'qty_precision', 'gross_cap_frac', 'rebalance_days', 'default_qty_precision'] Убедитесь, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000) - steady_downtrend: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000) - flat_ranging: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000) - volatility_spike: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000) - zero_volume: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000) - price_gap: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000)

Проверка не пройдена (уровень Layer 2 — синтетические сценарии): Использованные параметры: ['top_k', 'assets', 'high_window', 'min_notional', 'qty_precision', 'gross_cap_frac', 'rebalance_days', 'default_qty_precision'] Убедитесь, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: HighProximityMomentumDollarNeutralBasketDaily._ts_of() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000) - steady_downtrend: TypeError:……Показать большеСвернуть

Проверка не пройдена (уровень Layer 2 — синтетические сценарии): Использованные параметры: ['top_k', 'assets', 'high_window', 'min_notional', 'qty_precision', 'gross_cap_frac', 'rebalance_days', 'default_qty_precision'] Убедитесь, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: HighProximityMomentumDollarNeutralBasketDaily._ts_of() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000) - steady_downtrend: TypeError: HighProximityMomentumDollarNeutralBasketDaily._ts_of() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000) - flat_ranging: TypeError: HighProximityMomentumDollarNeutralBasketDaily._ts_of() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000) - volatility_spike: TypeError: HighProximityMomentumDollarNeutralBasketDaily._ts_of() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000) - zero_volume: TypeError: HighProximityMomentumDollarNeutralBasketDaily._ts_of() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000) - price_gap: TypeError: HighProximityMomentumDollarNeutralBasketDaily._ts_of() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735704780000)

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