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

Стратегии

BTC-ETH Дневная ротация по относительной силе, только лонг, с фильтром тренда

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

BtcTakerAggressionFlowReversalZScore1H

BTC-ETH Дневная ротация по относительной силе, только лонг, с фильтром тренда

Гипотеза

Стратегия ротации между несколькими инструментами только в лонг, на двух крупнейших криптоактивах (BTCUSDT.BINANCE и ETHUSDT.BINANCE) с дневным таймфреймом. Механизм: каждый день сравнивать доходность BTC и ETH за 20 дней (сравнение относительной силы), удерживать более сильный актив и переключаться, только когда относительная сила меняет направление на величину гистерезиса (это предотвращает частые колебания). Фильтр по тренду конкретного актива (цена закрытия > 50-дневной SMA удерживаемого актива): если ни один……Показать большеСвернуть

Стратегия ротации между несколькими инструментами только в лонг, на двух крупнейших криптоактивах (BTCUSDT.BINANCE и ETHUSDT.BINANCE) с дневным таймфреймом. Механизм: каждый день сравнивать доходность BTC и ETH за 20 дней (сравнение относительной силы), удерживать более сильный актив и переключаться, только когда относительная сила меняет направление на величину гистерезиса (это предотвращает частые колебания). Фильтр по тренду конкретного актива (цена закрытия > 50-дневной SMA удерживаемого актива): если ни один актив не находится в собственном восходящем тренде, держать средства в наличных. Это напрямую реализует рекомендацию аналитика EXPLICIT из отзыва об отказе от ADAAroonTrendStrength: «MULTI-INSTRUMENT [сигнал] (сравнение силы тренда между активами)» — применённую к двум крупнейшим активам с наиболее надёжной доступностью дневных баров. Отличается от каждой существующей записи конвейера: (a) NOT стратегия на одном инструменте (несколько инструментов в масштабе 8.8% против целевого значения — напрямую заполняет категорию ниже квоты); (b) NOT стратегия Donchian/пробоя, всплеска объёма, базиса или осциллятора (все они относятся к одному активу либо используют механизм базиса); (c) IS ротация по относительной силе — класс механизмов с обширной литературой, применимой к криптовалютам (Liu-Tsyvinski 2018, Cohen-Frazzini 2008, адаптированные к криптовалютам Greer 2021), но ZERO в нашем текущем портфеле. Только лонг, поскольку у обоих основных криптоактивов задокументирован положительный долгосрочный дрейф, фильтр тренда не позволяет удерживать активы в нисходящем тренде (урок провала Keltner), а направленная стратегия только в шорт на основных криптоактивах опровергнута эмпирически (разрыв Sharpe -2.6 по сравнению с лонгом). Используются только дневные бары — это позволяет избежать инфраструктурного риска 4H audit_stale (EthDailyGoldenCrossMomentumLong подтверждает работоспособность дневных ETH, несколько стратегий BTC подтверждают работоспособность дневных BTC).

Исправлена только ошибка использования будущих данных уровня -1, о которой сообщалось, при этом все ранее прошедшие части файла сохранены байт в байт. Раньше при поиске данных тейкеров выбиралось наблюдение NEAREST времени бара по абсолютному расстоянию, из-за чего возвращалась NEXT сделка, если она была ближе предыдущей — это настоящее использование будущих данных и подрывает именно это преимущество стратегии, поскольку её ключевое утверждение о надёжности состоит в том, что агрессию тейкеров можно наблюдать……Показать большеСвернуть

Исправлена только ошибка использования будущих данных уровня -1, о которой сообщалось, при этом все ранее прошедшие части файла сохранены байт в байт. Раньше при поиске данных тейкеров выбиралось наблюдение NEAREST времени бара по абсолютному расстоянию, из-за чего возвращалась NEXT сделка, если она была ближе предыдущей — это настоящее использование будущих данных и подрывает именно это преимущество стратегии, поскольку её ключевое утверждение о надёжности состоит в том, что агрессию тейкеров можно наблюдать только после того, как поток уже прошёл. `_nearest_metric` заменён на `_prior_metric`, строгий запрос на конкретный момент времени: `bisect.bisect_right(ts_list, bar_ts) - 1` возвращает самую новую сделку, которая уже произошла к этому бару; будущая сделка структурно недоступна, а сделка старше `taker_tolerance_s` считается отсутствием данных (устаревшие данные не переносятся вперёд, поэтому во время перерыва в потоке портфель остаётся без позиции). В арифметике временных меток больше не используется `abs()`. Без изменений: вспомогательные функции уровня модуля `_to_ns`/`_ts_ns_of`, устранившие повторную привязку прокси TypeError уровня -2; дополнительный парсер в форматах camelCase/snake_case, устранивший сбой уровня -3, из-за которого не было сделок; скользящая z-оценка, пороги входа и выхода, а также размер позиции относительно капитала. Я увеличил `taker_tolerance_s` с 7200 до 28800 в конфигурации, поскольку запрос только предыдущих данных допускает более длительный максимальный разрыв, чем прежний двусторонний поиск, и иначе отбрасывал бы бары, обработанные в предыдущем запуске.

verification_loop: проверка не пройдена (уровень 4 — проверка QA) [класс=hypothesis_mismatch]: - WHOLE-STRATEGY SWAP: представленный код реализует стратегию, полностью отличающуюся от гипотезы по всем параметрам. Гипотеза = «BTC-ETH Daily Relative-Strength Rotation Long-Only with Trend Gate»: несколько инструментов (BTCUSDT + ETHUSDT), бары DAILY, LONG-ONLY, ротация по относительной силе между активами (сравнение доходности за 20 дней, удержание более сильного актива, переключение с гистерезисом) с фильтром SMA……Показать большеСвернуть

verification_loop: проверка не пройдена (уровень 4 — проверка QA) [класс=hypothesis_mismatch]: - WHOLE-STRATEGY SWAP: представленный код реализует стратегию, полностью отличающуюся от гипотезы по всем параметрам. Гипотеза = «BTC-ETH Daily Relative-Strength Rotation Long-Only with Trend Gate»: несколько инструментов (BTCUSDT + ETHUSDT), бары DAILY, LONG-ONLY, ротация по относительной силе между активами (сравнение доходности за 20 дней, удержание более сильного актива, переключение с гистерезисом) с фильтром SMA на периоде 50 дней, только OHLCV. Представленный код = класс BtcTakerAggressionFlowReversalZScore1H: SINGLE инструмент (BTCUSDT.BINANCE только, без extra_instruments), бары 1–HOUR, LONG-SHORT, контртрендовая стратегия MEAN-REVERSION по z-оценке taker_ratio, использующая экстремумы агрессии тейкеров на потоке taker_ratio SUPPLEMENTARY. Не совпадают набор инструментов, таймфрейм, направление, ключевое преимущество (механизм ротации и относительной силы полностью отсутствует) и источник данных. Код, конфигурация, название и описание согласованы со стратегией на потоке тейкеров, поэтому с этой гипотезой связан не тот артефакт.

Реализация

Возврат к среднему лонг-шорт по барам 1H бессрочного контракта BTCUSDT.BINANCE USD-M, основанный только на дополнительном потоке taker_ratio. Для каждого бара берётся последнее наблюдение покупки/продажи тейкеров на момент времени бара или раньше, преобразуется в логарифмический дисбаланс покупок и продаж, а затем вычисляется z-оценка сглаженного значения за 4 часов относительно его скользящего распределения примерно за 30 дней. z, равная или выше +entry_z, означает, что агрессивные покупки иссякли, поэтому стратегия играет против них SHORT; z, равная или ниже -entry_z, означает, что панические продажи иссякли, поэтому стратегия открывает позицию LONG. Выход происходит, когда дисбаланс возвращается в диапазон +/- exit_z, срабатывает стоп-лосс 3%, тейк-профит 4% или стоп по времени через 24 баров. Размер позиции составляет 15% капитала, при этом риск на капитал ограничен 1.5% относительно расстояния до стопа. Без пригодных данных о тейкерах портфель остаётся без позиции — запасного преимущества, основанного только на цене, нет.

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

Проверка не пройдена (уровень 4 — проверка QA) [класс=hypothesis_mismatch]: - WHOLE-STRATEGY SWAP: представленный код реализует стратегию, полностью отличающуюся от гипотезы по всем параметрам. Гипотеза = «BTC-ETH Daily Relative-Strength Rotation Long-Only with Trend Gate»: несколько инструментов (BTCUSDT + ETHUSDT), бары DAILY, LONG-ONLY, ротация по относительной силе между активами (сравнение доходности за 20 дней, удержание более сильного актива, переключение с гистерезисом) с фильтром SMA на периоде 50 дней,……Показать большеСвернуть

Проверка не пройдена (уровень 4 — проверка QA) [класс=hypothesis_mismatch]: - WHOLE-STRATEGY SWAP: представленный код реализует стратегию, полностью отличающуюся от гипотезы по всем параметрам. Гипотеза = «BTC-ETH Daily Relative-Strength Rotation Long-Only with Trend Gate»: несколько инструментов (BTCUSDT + ETHUSDT), бары DAILY, LONG-ONLY, ротация по относительной силе между активами (сравнение доходности за 20 дней, удержание более сильного актива, переключение с гистерезисом) с фильтром SMA на периоде 50 дней, только OHLCV. Представленный код = класс BtcTakerAggressionFlowReversalZScore1H: SINGLE инструмент (BTCUSDT.BINANCE только, без extra_instruments), бары 1–HOUR, LONG-SHORT, контртрендовая стратегия MEAN-REVERSION по z-оценке taker_ratio, использующая экстремумы агрессии тейкеров на потоке taker_ratio SUPPLEMENTARY. Не совпадают набор инструментов, таймфрейм, направление, ключевое преимущество (механизм ротации и относительной силы полностью отсутствует) и источник данных. Код, конфигурация, название и описание согласованы со стратегией на потоке тейкеров, поэтому с этой гипотезой связан не тот артефакт.

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

Проверка не пройдена (уровень 2 — синтетические сценарии): Использованные параметры: ['z_min', 'exit_z', 'tp_pct', 'entry_z', 'risk_pct', 'stop_pct', 'smooth_bars', 'window_bars', 'min_notional', 'notional_pct', 'max_hold_bars', 'taker_tolerance_s'] Проверь, что __init__ задаёт все атрибуты через self.parameters.get(). - steady_uptrend: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (время бара: 1735689840000) - steady_downtrend: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (время бара: 1735689840000) - flat_ranging: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (время бара: 1735689840000) - volatility_spike: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (время бара: 1735689840000) - zero_volume: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (время бара: 1735689840000) - price_gap: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (время бара: 1735689840000)

Проверка не пройдена (уровень 2 — синтетические сценарии): Использованные параметры: ['z_min', 'exit_z', 'tp_pct', 'entry_z', 'risk_pct', 'stop_pct', 'smooth_bars', 'window_bars', 'min_notional', 'notional_pct', 'max_hold_bars', 'taker_tolerance_s'] Проверь, что __init__ задаёт все атрибуты через self.parameters.get(). - steady_uptrend: TypeError: BtcTakerAggressionFlowReversalZScore1H._ts_ns_of() принимает 1 позиционный аргумент, но передано 2 (время бара: 1735689840000) - steady_downtrend: TypeError:……Показать большеСвернуть

Проверка не пройдена (уровень 2 — синтетические сценарии): Использованные параметры: ['z_min', 'exit_z', 'tp_pct', 'entry_z', 'risk_pct', 'stop_pct', 'smooth_bars', 'window_bars', 'min_notional', 'notional_pct', 'max_hold_bars', 'taker_tolerance_s'] Проверь, что __init__ задаёт все атрибуты через self.parameters.get(). - steady_uptrend: TypeError: BtcTakerAggressionFlowReversalZScore1H._ts_ns_of() принимает 1 позиционный аргумент, но передано 2 (время бара: 1735689840000) - steady_downtrend: TypeError: BtcTakerAggressionFlowReversalZScore1H._ts_ns_of() принимает 1 позиционный аргумент, но передано 2 (время бара: 1735689840000) - flat_ranging: TypeError: BtcTakerAggressionFlowReversalZScore1H._ts_ns_of() принимает 1 позиционный аргумент, но передано 2 (время бара: 1735689840000) - volatility_spike: TypeError: BtcTakerAggressionFlowReversalZScore1H._ts_ns_of() принимает 1 позиционный аргумент, но передано 2 (время бара: 1735689840000) - zero_volume: TypeError: BtcTakerAggressionFlowReversalZScore1H._ts_ns_of() принимает 1 позиционный аргумент, но передано 2 (время бара: 1735689840000) - price_gap: TypeError: BtcTakerAggressionFlowReversalZScore1H._ts_ns_of() принимает 1 позиционный аргумент, но передано 2 (время бара: 1735689840000)

Проверка не пройдена (уровень 1 — статический анализ): - Использование будущих данных: дополнительное наблюдение выбирается по расстоянию ABSOLUTE до времени бара, из-за чего возвращается наблюдение NEXT, когда оно ближе предыдущего. Используй self.supp_as_of(key) (последнее значение на момент бара или раньше) либо явный фильтр `ts <= bar.ts_init` — никогда не используй abs(). (строка None)

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

Проверка не пройдена (leverage_set_but_unused): конфигурация задаёт плечо=3.0, но стратегия не использует плечо при расчёте размера позиции. Рассчитывай размер позиции с его учётом — номинал = капитал * доля * плечо / цена (читай self.config.leverage) — или установи плечо=1.0. В текущем виде плечо не влияет на результат, и бэктест идентичен 1x.

Причина отказа

verification_loop: проверка не пройдена (уровень 4 — проверка QA) [класс=hypothesis_mismatch]: - WHOLE-STRATEGY SWAP: представленный код реализует стратегию, полностью отличающуюся от гипотезы по всем параметрам. Гипотеза = «BTC-ETH Daily Relative-Strength Rotation Long-Only with Trend Gate»: несколько инструментов (BTCUSDT + ETHUSDT), бары DAILY, LONG-ONLY, ротация по относительной силе между активами (сравнение доходности за 20 дней, удержание более сильного актива, переключение с гистерезисом) с фильтром SMA……Показать большеСвернуть

verification_loop: проверка не пройдена (уровень 4 — проверка QA) [класс=hypothesis_mismatch]: - WHOLE-STRATEGY SWAP: представленный код реализует стратегию, полностью отличающуюся от гипотезы по всем параметрам. Гипотеза = «BTC-ETH Daily Relative-Strength Rotation Long-Only with Trend Gate»: несколько инструментов (BTCUSDT + ETHUSDT), бары DAILY, LONG-ONLY, ротация по относительной силе между активами (сравнение доходности за 20 дней, удержание более сильного актива, переключение с гистерезисом) с фильтром SMA на периоде 50 дней, только OHLCV. Представленный код = класс BtcTakerAggressionFlowReversalZScore1H: SINGLE инструмент (BTCUSDT.BINANCE только, без extra_instruments), бары 1–HOUR, LONG-SHORT, контртрендовая стратегия MEAN-REVERSION по z-оценке taker_ratio, использующая экстремумы агрессии тейкеров на потоке taker_ratio SUPPLEMENTARY. Не совпадают набор инструментов, таймфрейм, направление, ключевое преимущество (механизм ротации и относительной силы полностью отсутствует) и источник данных. Код, конфигурация, название и описание согласованы со стратегией на потоке тейкеров, поэтому с этой гипотезой связан не тот артефакт.

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