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

Стратегии

Бэктест стратегии: диверсифицированный внутридневной портфель продолжения импульсных баров на крупных активах (лонг-шорт, Binance USD-M, 1H, дискретные входы по событиям, лимиты на позицию и валовую экспозицию, цели ATR выше комиссий)

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

DiversifiedImpulseBarContinuationPortfolioLS1H

Действительно устранены проблемы редких сделок и концентрации на одном событии: 13,644 сделок по 10 активам плотно заполняют каждое окно; входы дискретные и безопасные для движка, с лимитами на позицию и валовую…

Гипотеза

LONG-SHORT, MULTI-INSTRUMENT внутридневная стратегия CONTINUATION, которая применяет EXPLICITLY-SANCTIONED фабрики — обобщённый сигнал продолжения после импульсной свечи — как DIVERSIFIED PORTFOLIO примерно по 10 крупным активам Binance USD-M с длинной историей (BTC, ETH, SOL, BNB, XRP, ADA, DOGE, AVAX, LINK, LTC) на свечах 1-HOUR. Каждый актив отслеживается независимо; когда на любом из них появляется аномально сильный направленный импульс при высоком объёме (импульсная свеча), стратегия открывает отдельную……Показать большеСвернуть

LONG-SHORT, MULTI-INSTRUMENT внутридневная стратегия CONTINUATION, которая применяет EXPLICITLY-SANCTIONED фабрики — обобщённый сигнал продолжения после импульсной свечи — как DIVERSIFIED PORTFOLIO примерно по 10 крупным активам Binance USD-M с длинной историей (BTC, ETH, SOL, BNB, XRP, ADA, DOGE, AVAX, LINK, LTC) на свечах 1-HOUR. Каждый актив отслеживается независимо; когда на любом из них появляется аномально сильный направленный импульс при высоком объёме (импульсная свеча), стратегия открывает отдельную позицию по направлению импульса, чтобы поймать краткосрочное продолжение движения. Это одобренное аналитиком новое направление (семейство продолжения импульса неоднократно отмечалось как «обобщаемое»; существуют варианты на одном активе ETH-1H, SOL-1H и BTC-1H-HL), обобщённое до PORTFOLIO, чтобы устранить две причины провала почти всех недавних отказов: (1) LOW BREADTH / концентрация на одном событии (портфель из 3 активов HL показал 68% DD как заёмную бету; пробои по одному активу были сконцентрированы в 2021) — проблему устраняет то, что импульсные события происходят в разное время на разных, не идеально коррелирующих активах, диверсифицируя TRADE STREAM вместо наращивания коррелированной направленной беты; и (2) TRADE-SPARSITY (стратегия CoinM Donchian с 26 сделками не смогла заполнить walk-forward-анализ; окна OOS остались пустыми) — проблема решена: примерно 10 активов × частые импульсы на свечах 1H дают сотни сделок в год, плотно заполняя каждое окно walk-forward-анализа и отложенной выборки. Это NOT доработка запрещённой корзины на импульсе (другой класс сигнала: продолжение отдельного внутридневного импульса, а не состояние тренда SMA/на основе прошлой доходности), NOT стратегия на одном активе TSM (не работает), NOT медленный пробой (сломался при смене режима), NOT возврат к среднему (не работает), NOT опционы/спот (заблокировано). Архитектура безопасна для движка: отдельные события с однократным входом и выходом, не более одной позиции на актив, лимит номинала на позицию и портфельный лимит GROSS экспозиции — без непрерывного масштабирования по волатильности и переворотов с неттингом (конструкция, вызвавшая артефакт раздувания номинала). Соотношение уровней: широкий тейк-профит и близкий стоп-лосс (TP >= SL), чтобы избежать ловушки соотношения риска и прибыли при резком падении с отскоком. Три основных параметра.

Итерация 4 устраняет тайм-аут дымового теста WITHOUT Layer-3 300s, не меняя торговую логику. Предыдущая версия пересчитывала ATR, средний объём и импульс по срезам списка свечей (с выделением массивов numpy и множеством вызовов .as_double() FFI) для всех 10 инструментов на каждой свече EVERY — это тяжёлая операция на каждой свече, повторённая примерно на сотнях тысяч свечей 1H за длинную историю. Теперь горячий путь требует O(1) на свечу: скользящие TR и объём SUMS обновляются инкрементально в ограниченных дека́х……Показать большеСвернуть

Итерация 4 устраняет тайм-аут дымового теста WITHOUT Layer-3 300s, не меняя торговую логику. Предыдущая версия пересчитывала ATR, средний объём и импульс по срезам списка свечей (с выделением массивов numpy и множеством вызовов .as_double() FFI) для всех 10 инструментов на каждой свече EVERY — это тяжёлая операция на каждой свече, повторённая примерно на сотнях тысяч свечей 1H за длинную историю. Теперь горячий путь требует O(1) на свечу: скользящие TR и объём SUMS обновляются инкрементально в ограниченных дека́х ровно один раз для каждого нового бара каждого актива в _roll_update (дедупликация по временной метке), а управление напрямую считывает _atr_of/_avg_vol_of/_thrust_of из текущих сумм. numpy удалён из горячего пути (используется только математика Python). Сигнал RETURNED основного актива сохраняет прежний расчёт по свечам (_thrust_direct), поэтому непрерывный меняющийся сигнал, уже прошедший Layers 1-2, побитово идентичен по поведению; обновление _touch без фильтра также оставляет сигнал активным в прокси Layer-2, где отсутствуют order_factory/кэш. Скользящий ATR равен среднему тех же TR, а скользящий средний объём — среднему тех же объёмов, поэтому входы, выходы и число сделок не изменились; стоимость обработки свечи снизилась с O(окно × инструменты) до O(инструменты), а постоянный множитель стал намного меньше.

Диверсифицированный портфель внутридневного продолжения импульса — явный чистый убыточный результат, преимущество ниже торговых издержек; оптимизировать 2 часов не стоит. За 13,644 сделками: total_return -95.05%, CAGR -45.6%, max_drawdown 96.24% (CI–100%, за отметкой безусловного отказа L19, спокойный режим -100%), profit_factor 0.87, матожидание -$7.20/сделку, avg_trade_return_pct 0.045% (ниже порога комиссий Binance 0.15% USD-M, L22, комиссии составили 12.4% от валовой прибыли). Коэффициент Шарпа -0.088 (CI……Показать большеСвернуть

Диверсифицированный портфель внутридневного продолжения импульса — явный чистый убыточный результат, преимущество ниже торговых издержек; оптимизировать 2 часов не стоит. За 13,644 сделками: total_return -95.05%, CAGR -45.6%, max_drawdown 96.24% (CI–100%, за отметкой безусловного отказа L19, спокойный режим -100%), profit_factor 0.87, матожидание -$7.20/сделку, avg_trade_return_pct 0.045% (ниже порога комиссий Binance 0.15% USD-M, L22, комиссии составили 12.4% от валовой прибыли). Коэффициент Шарпа -0.088 (CI [-1.02, 0.61] охватывает ноль), PSR 0.41, убыток в 6 из 7 лет (положительный результат лишь в 2022). Портфельная конструкция DID устранила две целевые причины провала — редкие сделки (сотни в год) и концентрацию на одном событии; дискретные входы безопасны для движка, ликвидаций нет. Однако диверсификация не сгладила хвост распределения (эксцесс 246, месячные колебания +365%/-78%/-50%, 37 убытков подряд) и, что критично, не создала положительного чистого преимущества на сделку. Это класс направленного продолжения чистого-L30/L63 OHLCV (0-выживший); обобщение импульсного сигнала с одного актива на 10 активов увеличило число сделок, но преимущество на сделку осталось ниже комиссий. Подбор множителей импульса, стоп-лосса и тейк-профита не поднимет преимущество на сделку 0.045% выше порога комиссий и не исправит 96% просадку. Модель провала: продолжение OHLCV на нескольких активах fee_edge/no_edge с более чем 50% DD.

Реализация

Внутридневная стратегия продолжения импульса с длинными и короткими позициями как диверсифицированный портфель на 10 ликвидных инструментах Binance USD-M с длинной историей на барах 1H. Каждый актив отслеживается отдельно; направленный импульс с большим объёмом (|body|/ATR >= impulse_atr_mult AND volume >= vol_mult x среднего) открывает одну отдельную позицию по направлению импульса. Выход — по близкому стопу ATR, более широкому тейк-профиту ATR или при достижении максимального времени удержания. Лимит номинала на позицию и лимит валовой экспозиции портфеля; не более одной позиции на актив.

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

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

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

Шарп
-0,09
Общая доходность
-95,05%
Максимальная просадка
96,24%
Всего сделок
13644
Доля прибыльных
38,6%
Профит-фактор
0,87

Действительно устранены проблемы редких сделок и концентрации на одном событии: 13,644 сделок по 10 активам плотно заполняют каждое окно; входы дискретные и безопасные для движка, с лимитами на позицию и валовую экспозицию (нет артефакта раздувания номинала и ликвидаций)

Чистый убыток: total_return -95.05%, CAGR -45.6%, max_drawdown 96.24% (CI–100%) — превышена отметка безусловного отказа 50% (L19)

Преимущество ниже комиссий: avg_trade_return_pct 0.045% (ниже порога комиссий 0.15%, L22), profit_factor 0.87, матожидание -$7.20/сделку, комиссия 12.4% от валовой прибыли

По результатам бэктеста стратегии значимого преимущества с поправкой на риск нет: коэффициент Шарпа -0.088 (CI [-1.02, 0.61] включает ноль), PSR 0.41; убыток в 6 из 7 лет (положительный результат лишь в 2022)

В бэктесте стратегии диверсификация не уменьшила хвостовой риск: эксцесс 246, месячные колебания +365%/-78%/-50%, 37 убытков подряд — результат определяют выбросы, устойчивого преимущества нет

L30/L63 класс направленного продолжения чистого сигнала OHLCV (0 сохранившихся); обобщение портфеля увеличило число сделок, но не преимущество на сделку

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

Проверка не пройдена (Layer 2 — синтетические сценарии): Использованы параметры: ['assets', 'vol_mult', 'atr_period', 'vol_window', 'tp_atr_mult', 'min_notional', 'max_hold_bars', 'qty_precision', 'stop_atr_mult', 'gross_cap_frac', 'impulse_atr_mult', 'per_position_frac', 'default_qty_precision'] Убедись, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: super(type, obj): obj должен быть экземпляром или подклассом типа (временная метка свечи: 1735689600000) -……Показать большеСвернуть

Проверка не пройдена (Layer 2 — синтетические сценарии): Использованы параметры: ['assets', 'vol_mult', 'atr_period', 'vol_window', 'tp_atr_mult', 'min_notional', 'max_hold_bars', 'qty_precision', 'stop_atr_mult', 'gross_cap_frac', 'impulse_atr_mult', 'per_position_frac', 'default_qty_precision'] Убедись, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: super(type, obj): obj должен быть экземпляром или подклассом типа (временная метка свечи: 1735689600000) - steady_downtrend: TypeError: super(type, obj): obj должен быть экземпляром или подклассом типа (временная метка свечи: 1735689600000) - flat_ranging: TypeError: super(type, obj): obj должен быть экземпляром или подклассом типа (временная метка свечи: 1735689600000) - volatility_spike: TypeError: super(type, obj): obj должен быть экземпляром или подклассом типа (временная метка свечи: 1735689600000) - zero_volume: TypeError: super(type, obj): obj должен быть экземпляром или подклассом типа (временная метка свечи: 1735689600000) - price_gap: TypeError: super(type, obj): obj должен быть экземпляром или подклассом типа (временная метка свечи: 1735689600000)

Проверка не пройдена (Layer 3 — бэктест в песочнице): дымовой тест превысил лимит времени 300 с. Почти всегда это означает, что объём работы на каждой свече растёт вместе с длиной истории — например, повторное сканирование всего ряда ставок финансирования/дополнительных данных или создание списка и вызов min()/sorted() внутри calculate_signal()/on_bar() на каждой свече. В __init__ заранее отсортируй массивы временных меток ONCE и используй bisect либо кэшируй результаты поиска по временной метке, чтобы стоимость обработки одной свечи составляла O(log n), а не O(n).

Проверка не пройдена (Layer 2 — синтетические сценарии): Использованы параметры: ['assets', 'vol_mult', 'atr_period', 'vol_window', 'tp_atr_mult', 'min_notional', 'max_hold_bars', 'qty_precision', 'stop_atr_mult', 'gross_cap_frac', 'impulse_atr_mult', 'per_position_frac', 'default_qty_precision'] Убедись, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: DiversifiedImpulseBarContinuationPortfolioLS1H._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка……Показать большеСвернуть

Проверка не пройдена (Layer 2 — синтетические сценарии): Использованы параметры: ['assets', 'vol_mult', 'atr_period', 'vol_window', 'tp_atr_mult', 'min_notional', 'max_hold_bars', 'qty_precision', 'stop_atr_mult', 'gross_cap_frac', 'impulse_atr_mult', 'per_position_frac', 'default_qty_precision'] Убедись, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: DiversifiedImpulseBarContinuationPortfolioLS1H._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка свечи: 1735689600000) - steady_downtrend: TypeError: DiversifiedImpulseBarContinuationPortfolioLS1H._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка свечи: 1735689600000) - flat_ranging: TypeError: DiversifiedImpulseBarContinuationPortfolioLS1H._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка свечи: 1735689600000) - volatility_spike: TypeError: DiversifiedImpulseBarContinuationPortfolioLS1H._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка свечи: 1735689600000) - zero_volume: TypeError: DiversifiedImpulseBarContinuationPortfolioLS1H._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка свечи: 1735689600000) - price_gap: TypeError: DiversifiedImpulseBarContinuationPortfolioLS1H._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка свечи: 1735689600000)

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