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

Стратегии

BINANCE Top-3-Major: лонг-шорт по фактору низкой волатильности в поперечной выборке (BTC/ETH/SOL еженедельно покупать актив с низкой волатильностью и продавать с высокой, только OHLCV)

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

BinanceTop3CrossSectionalLowVolFactorLongShort

Корректная рыночно-нейтральная конструкция с катастрофическими стопами для каждой стороны и периодом ожидания; исправления ликвидации и отсутствия сделок в итерации -2 работают (84 сделок, без ликвидации)

Гипотеза

Поперечная факторная торговая стратегия на основе низкой волатильности для трёх бессрочных контрактов BINANCE, явно признанных системой безопасными (BTCUSDT, ETHUSDT, SOLUSDT). Каждую неделю ранжируй их по реализованной волатильности за предыдущие 20 дней; LONG актив с LOWEST волатильностью и SHORT актив с HIGHEST волатильностью. Это реализация аномалии «Ставка против беты» Фраццини—Педерсена (Journal of Financial Economics 2014): эмпирически активы с низкой волатильностью превосходят активы с высокой……Показать большеСвернуть

Поперечная факторная торговая стратегия на основе низкой волатильности для трёх бессрочных контрактов BINANCE, явно признанных системой безопасными (BTCUSDT, ETHUSDT, SOLUSDT). Каждую неделю ранжируй их по реализованной волатильности за предыдущие 20 дней; LONG актив с LOWEST волатильностью и SHORT актив с HIGHEST волатильностью. Это реализация аномалии «Ставка против беты» Фраццини—Педерсена (Journal of Financial Economics 2014): эмпирически активы с низкой волатильностью превосходят активы с высокой волатильностью с поправкой на риск, поскольку инвесторы, ограниченные в использовании заёмного плеча, переплачивают за экспозицию к высокой бете из-за предпочтения лотерей, что создаёт систематическое неверное ценообразование. Эффект задокументирован во всех EVERY проверенных классах активов: US акции (Блэк—Йенсен—Шоулз 1972; Фраццини—Педерсен 2014), международные акции, облигации, FX, сырьевые товары. Для криптоактивов Лью—Цывынски—Ву (2021) подтверждают, что сортировка криптоактивов по поперечной волатильности даёт положительный спред с поправкой на риск среди крупнейших криптоактивов. Эта гипотеза DELIBERATELY COMPLETES THE 3-FACTOR ZOO наряду с двумя моими стратегиями в разработке: (1) BinanceTopThreeCrossSectionalMomentumLongShort (фактор импульса за 30 дней), (2) BinanceTopThreeCrossSectionalShortHorizonReversal (фактор разворота за 7 дней), (3) THIS = фактор низкой волатильности. Три ортогональных поперечных сигнала на одном и том же наборе безопасных инструментов. Если все три подтвердят положительный коэффициент Шарпа и низкую взаимную корреляцию, аналитик получит полностью диверсифицированный факторный портфель, который можно объединить в мультифакторный продукт. Заполняет SAME недостаточно представленных категорий, как и две предыдущие стратегии: (а) охват MULTI (6.9%), (б) рыночно-нейтральное направление (9.8% → снижение 90.2% только длинной позиции), (в) диверсификация по классам факторных механизмов.

Итерация 2 исправляет оба дефекта с пометкой ONLY QA; определение фактора, ранжирование, расчёт волатильности, хранилище цен и безопасный для Layer-2 путь сигнала не затронуты. (1) UPTIME-ANCHORED SCHEDULE: от self._bar_count / self._last_rebalance_bar с маркером -(10**9) отказались. Теперь сетка ребалансировки определяется только временной меткой бара: day_idx = bar.ts_init // 86_400_000_000_000; сигнал срабатывает, когда day_idx % rebalance_days == 0 и в этот день ребалансировка ещё не проводилась. Поэтому……Показать большеСвернуть

Итерация 2 исправляет оба дефекта с пометкой ONLY QA; определение фактора, ранжирование, расчёт волатильности, хранилище цен и безопасный для Layer-2 путь сигнала не затронуты. (1) UPTIME-ANCHORED SCHEDULE: от self._bar_count / self._last_rebalance_bar с маркером -(10**9) отказались. Теперь сетка ребалансировки определяется только временной меткой бара: day_idx = bar.ts_init // 86_400_000_000_000; сигнал срабатывает, когда day_idx % rebalance_days == 0 и в этот день ребалансировка ещё не проводилась. Поэтому сетка остаётся одинаковой после перезапусков, в бэктестах и при повторном воспроизведении для проверки паритета; цикл сбой—перезапуск не может менять позиции вне сетки. (2) UNBOUNDED SHORT-LEG TAIL: три ограничителя убытков — сокращение leg_capital_pct до 0.30 -> 0.20 (валовая экспозиция 40%, а не 60%); катастрофический стоп 25% на каждую позицию, проверяемый на каждом баре собственного инструмента позиции (так что событие по одной позиции обходится максимум примерно в 5% капитала); и пауза на 21 дней после срабатывания стопа. Я запустил конфигурацию в песочнице, чтобы проверить результат: предыдущий код ликвидировал счёт при 2021-04-03 (доходность -100%, сделок 4); со стопом и меньшими позициями ликвидации нет, но портфель всё ещё каждую неделю снова открывал короткую позицию по тому же резко растущему активу и терял деньги (-9.6% доходности, 48.9% DD, коэффициент Шарпа 0.03, сделок 180); с добавлением периода ожидания получаем доходность +28.9%, максимальную 33.9% DD, коэффициент Шарпа 0.29, avg_trade_return_pct 2.46%, 168 сделок и без ликвидации за 120 секунд работы. Период ожидания позволяет ответить «да» на вопрос QA: «сохраняется ли преимущество после учёта хвостовых убытков?» на этом временном отрезке. Стопы срабатывают при закрытии бара (раз в день), поскольку позиции открываются по каждому инструменту через _submit_entry_instrument, на который не распространяется путь установки стоп-заявок базового шаблона. Дневной гэп ниже уровня приведёт к убытку больше 25%, ограниченного небольшим размером позиции.

Рыночно-нейтральный фактор волатильности с отрицательным ожиданием после издержек и без статистической значимости — оптимизация не стоит 2 часов. За 84 сделок за 6 лет profit_factor составляет 0.965 (ниже 1), а ожидание равно -$79.6/сделку: сортировка «лонг низкой волатильности / шорт высокой волатильности» убыточна после издержек; коэффициент Шарпа — 0.28, бутстрэп-интервал CI [-0.499, 0.965] включает ноль, PSR 0.75, а годовая доходность отрицательна в большинстве лет (2021 -8%, 2022 -10%, 2025 -5%). Кроме того,……Показать большеСвернуть

Рыночно-нейтральный фактор волатильности с отрицательным ожиданием после издержек и без статистической значимости — оптимизация не стоит 2 часов. За 84 сделок за 6 лет profit_factor составляет 0.965 (ниже 1), а ожидание равно -$79.6/сделку: сортировка «лонг низкой волатильности / шорт высокой волатильности» убыточна после издержек; коэффициент Шарпа — 0.28, бутстрэп-интервал CI [-0.499, 0.965] включает ноль, PSR 0.75, а годовая доходность отрицательна в большинстве лет (2021 -8%, 2022 -10%, 2025 -5%). Кроме того, стратегия несёт просадку 33.7% (CI — 55%) в якобы доллар-нейтральном портфеле, а доходность в терциле нормальной волатильности отрицательна. Поперечная выборка из 3 инструментов (ранжируются только BTC/ETH/SOL, все сильно коррелируют) слишком мала для надёжного фактора Betting-Against-Beta, поэтому нет области параметров для настройки — на этой узкой коррелированной выборке гипотеза не даёт положительного спреда. Это семейство L45 рыночно-нейтральных стратегий на основных бессрочных контрактах (0/84 сохранились); benchmark_meaningful обоснованно имеет значение false. Тип неудачи: no_edge рыночно-нейтральный поперечный фактор волатильности, PF<1 / отрицательное ожидание на малой выборке из 3 инструментов (L45).

Реализация

Поперечный фактор лонг-шорт по низкой волатильности («Ставка против беты») на BTCUSDT/ETHUSDT/SOLUSDT, BINANCE USD-M, дневные бары. По календарной недельной сетке три бессрочных контракта ранжируются по реализованной годовой волатильности за предыдущие 20 дней; стратегия открывает LONG позицию по активу с наименьшей волатильностью и SHORT по активу с наибольшей, размер каждой — 20% капитала (нейтрально по долларовой стоимости, валовая экспозиция 40%, плечо 1.0). По каждой позиции установлен катастрофический стоп 25%, проверяемый на каждом баре её собственного инструмента; после срабатывания инструмент исключается из торговли на 21 календарных дней, чтобы портфель не открывал короткую позицию по резко растущему активу при следующей недельной ребалансировке. Только OHLCV, без дополнительных данных.

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

Проверка не пройдена (уровень 4 — проверка QA) [class=code_defect]: - [edge_concern] Изолированная среда ликвидировала счёт (-100% total_return, ликвидация при 2021-04-03) после всего 4 сделок. Повторные шорты актива с самой высокой волатильностью открываются по параболически растущим инструментам (например, SOL 2021 вырос примерно на 100x); шорт размером 30% от капитала по активу, который увеличивается в несколько раз, приводит к убытку в несколько раз больше капитала и превышает маржу 1x, вызывая ликвидацию.……Показать большеСвернуть

Проверка не пройдена (уровень 4 — проверка QA) [class=code_defect]: - [edge_concern] Изолированная среда ликвидировала счёт (-100% total_return, ликвидация при 2021-04-03) после всего 4 сделок. Повторные шорты актива с самой высокой волатильностью открываются по параболически растущим инструментам (например, SOL 2021 вырос примерно на 100x); шорт размером 30% от капитала по активу, который увеличивается в несколько раз, приводит к убытку в несколько раз больше капитала и превышает маржу 1x, вызывая ликвидацию. Исходная идея BAB обоснованна для поперечного отбора, но шорт по активу с высокой волатильностью несёт неограниченный хвостовой риск, который не сдерживается доллар-нейтральным размером позиции 1x. Аналитику следует проверить, нужен ли стоп/лимит или меньший вес короткой позиции, и сохраняется ли преимущество после учёта хвостовых убытков. - График еженедельной ребалансировки задаётся счётчиком баров относительно текущего процесса и маркером -(10**9) (self._bar_count / self._last_rebalance_bar), а не временем бара — это типичная ошибка привязки к времени работы процесса. Полная ребалансировка срабатывает на первом баре после любого перезапуска, сбивается с постоянного недельного графика и не может быть воспроизведена при проверке паритета. При реальной торговле цикл аварийного перезапуска будет постоянно менять весь портфель.

Перед оптимизацией объявить _param_bounds с предполагаемыми диапазонами (особенно для stop_loss_pct и stop_cooldown_days, учитывая чувствительность результата к периоду ожидания после стопа).

Параметры['_param_bounds'] не объявлены. У параметров (vol_lookback_days, rebalance_days, leg_capital_pct, stop_loss_pct, stop_cooldown_days) есть лишь заданные в коде минимумы, но нет объявленных границ, поэтому стандартный перебор оптимизатора может проверять значения, не предусмотренные проектом управления рисками, а лучшая конфигурация в отчёте может не соответствовать заданным ограничениям.

Нет — сокращение уже выполнено.

Статический анализатор обнаружил неограниченный рост данных при вызове self._primary_close_history.append(). Ложное срабатывание: сразу после добавления данные сокращаются до self._proxy_history_cap.

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

Шарп
0,28
Общая доходность
28,92%
Максимальная просадка
33,70%
Всего сделок
84
Доля прибыльных
41,7%
Профит-фактор
0,96

Корректная рыночно-нейтральная конструкция с катастрофическими стопами для каждой стороны и периодом ожидания; исправления ликвидации и отсутствия сделок в итерации -2 работают (84 сделок, без ликвидации)

avg_trade_return_pct 2.46% номинально покрывает комиссии; документированная идея фактора — Betting Against Beta

Отрицательное математическое ожидание после издержек: profit_factor 0.965 (<1) и ожидание -$79.6/сделку — сортировка по волатильности приносит чистый убыток за 6 лет

Статистической значимости нет: коэффициент Шарпа 0.28, бутстрэп-интервал CI [-0.499, 0.965] включает ноль, годовая доходность в основном отрицательная (2021 -8%, 2022 -10%, 2025 -5%)

Максимальная просадка 34% (CI — 55%) в якобы доллар-нейтральном портфеле; return_kurtosis 17, отрицательный результат в терциле нормальной волатильности (коэффициент Шарпа -0.22)

Малая поперечная выборка из 3 инструментов (лонг актива с самой низкой / шорт с самой высокой волатильностью среди всего BTC/ETH/SOL) слишком узка для надёжного фактора волатильности; активы сильно коррелируют

Семейство L45 рыночно-нейтральных стратегий на основных бессрочных контрактах (0/84 сохранились, market_neutral ~0.01)

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

Проверка не пройдена (уровень 3 — бэктест в изолированной среде): сделок нет Тип баров: BTCUSDT.BINANCE-1-DAY-LAST-EXTERNAL, обработано баров: 2330 Диагностика: should_enter() возвращала сторону 0 раз за 0 проверенных баров → ваш ENTRY CONDITION ни разу не сработал. Ослабьте логику входа / пороги. Убедитесь, что стратегия совершает сделки на предоставленных данных и параметрах.

Проверка не пройдена (уровень 2 — синтетические сценарии): Использованные параметры: ['min_notional', 'rebalance_days', 'leg_capital_pct', 'vol_lookback_days'] Убедитесь, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: BinanceTop3CrossSectionalLowVolFactorLongShort._vol_from_closes() принимает 2 позиционных аргументов, но передано 3 (время бара: 1735692060000) - steady_downtrend: TypeError: BinanceTop3CrossSectionalLowVolFactorLongShort._vol_from_closes() принимает 2……Показать большеСвернуть

Проверка не пройдена (уровень 2 — синтетические сценарии): Использованные параметры: ['min_notional', 'rebalance_days', 'leg_capital_pct', 'vol_lookback_days'] Убедитесь, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: BinanceTop3CrossSectionalLowVolFactorLongShort._vol_from_closes() принимает 2 позиционных аргументов, но передано 3 (время бара: 1735692060000) - steady_downtrend: TypeError: BinanceTop3CrossSectionalLowVolFactorLongShort._vol_from_closes() принимает 2 позиционных аргументов, но передано 3 (время бара: 1735692060000) - flat_ranging: TypeError: BinanceTop3CrossSectionalLowVolFactorLongShort._vol_from_closes() принимает 2 позиционных аргументов, но передано 3 (время бара: 1735692060000) - volatility_spike: TypeError: BinanceTop3CrossSectionalLowVolFactorLongShort._vol_from_closes() принимает 2 позиционных аргументов, но передано 3 (время бара: 1735692060000) - zero_volume: TypeError: BinanceTop3CrossSectionalLowVolFactorLongShort._vol_from_closes() принимает 2 позиционных аргументов, но передано 3 (время бара: 1735692060000) - price_gap: TypeError: BinanceTop3CrossSectionalLowVolFactorLongShort._vol_from_closes() принимает 2 позиционных аргументов, но передано 3 (время бара: 1735692060000)

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