Разворот после истощения агрессивных taker-заявок, длинные и короткие позиции на одной площадке (один инструмент SOLUSDT.BINANCE USD-M — игра на возврат после резкого движения цены, вызванного односторонним дисбалансом агрессивных заявок EXTREME TAKER, то есть эйфорической погоней за покупками по рынку или панической распродажей продажами по рынку, истощающей ликвидность в книге заявок; вход против движения, выход при нормализации потока taker-заявок / достижении цели / истечении времени, 3-параметрическая)
Итог: Отменено
SolTakerAggressionExhaustionReversalLS
Сводка по итогам
Эта стратегия предложила для фабрики действительно новое семейство: использование истощения агрессивных taker-заявок на SOL, открытие коротких позиций при эйфорической погоне за покупками по рынку и длинных — при панических распродажах, с применением ортогонального дисбаланса покупок и продаж taker-заявками; в журнале неудач не было ни одной стратегии на потоке taker-заявок. Разработка была продуманной: скользящие z-оценки вместо абсолютных порогов, плавная оценка совместного движения вместо жесткого составного условия, расчет размера позиции на основе риска и отсутствие резервного варианта, основанного только на цене, поскольку проверялось, дает ли само экстремальное значение taker-потока преимущество. Но за три итерации стратегия так и не прошла проверку: все шесть синтетических сценариев Layer-2 завершились с одинаковой сигнатурой `_bar_interval_ns()` TypeError — дефектом кода, из-за которого стратегия не запустилась и проверить преимущество на развороте после истощения не удалось. Ее забросили на этапе проверки; бэктест так и не был проведен.
Стратегия LONG-SHORT, SINGLE-INSTRUMENT, SINGLE-VENUE на бессрочном контракте SOLUSDT.BINANCE USD-M. Ортогональный сигнал — дисбаланс агрессивных покупок и продаж TAKER (taker_ratio — дополнительный поток данных, ортогональный ценовому ряду и не являющийся повторным расчётом тренда; соответствует L42). В журнале сбоев нет ни одной стратегии на потоке тейкеров, поэтому это действительно новая группа подходов, отличная от переполненных кладбищ кросс-секционного моментума, скопления позиций по ставке финансирования,……Показать большеСвернуть
Стратегия LONG-SHORT, SINGLE-INSTRUMENT, SINGLE-VENUE на бессрочном контракте SOLUSDT.BINANCE USD-M. Ортогональный сигнал — дисбаланс агрессивных покупок и продаж TAKER (taker_ratio — дополнительный поток данных, ортогональный ценовому ряду и не являющийся повторным расчётом тренда; соответствует L42). В журнале сбоев нет ни одной стратегии на потоке тейкеров, поэтому это действительно новая группа подходов, отличная от переполненных кладбищ кросс-секционного моментума, скопления позиций по ставке финансирования, стратегий с подтверждением через OI и сбросом через OI, а также капитуляции премии. Механизм: когда агрессоры преимущественно покупают по заявкам на продажу (taker_buy_ratio на многодневном экстремуме), а цена WHILE резко растёт, это поздняя стадия эйфорической погони рыночными ордерами, которая поглощает ликвидность пассивных заявок на продажу и оставляет цену выше уровня, на котором пассивные участники готовы её поддерживать. После исчерпания агрессивного потока следует краткосрочный разворот вниз. Симметричная ситуация наблюдается при падении: экстремальное доминирование тейкер-SELL во время обвала означает панические рыночные продажи при недостатке заявок на покупку, чрезмерно опускает цену и вызывает отскок. Стратегия торгует против агрессора: экстремальный тейкер-BUY и рост цены → SHORT; экстремальный тейкер-SELL и падение цены → LONG. Это исчерпание потока и поглощение ликвидности, а не продолжение моментумного движения (противоположность стратегии на пробой по потоку тейкеров). Одна площадка, один инструмент — нет проблемы совместного наличия данных по двум площадкам или двум этапам (L44), нет потока данных по опционам/IV (L43). SOLUSDT выбран из-за высокой реализованной волатильности (цели разворота с большим запасом покрывают 0.10% USD-M на сделку туда и обратно) и для диверсификации относительно метки выживаемости 2% BTC. Ограничено 3 параметрами, чтобы избежать переобучения, которое погубило большинство стратегий в журнале. Инструменты: ["SOLUSDT.BINANCE"]. venue_type: фьючерсы. data_requirements: ["ohlcv", "taker_ratio"].
Исправление в итерации -6 для выявленного несоответствия (коэффициент Шарпа +0.22 против total_return -54.71%): судя по кривой капитала, стратегию погубили транзакционные издержки, а не сломанный сигнал. Слегка положительный коэффициент Шарпа на бар при глубоко отрицательной совокупной доходности — признак чрезмерной частоты сделок и связанных с этим издержек. Такая арифметика была неизбежна из-за параметров итерации -5: номинал = капитал*0.01/(стоп ~1.2% ATR) ~= 0.83x капитала, ограниченный только на уровне……Показать большеСвернуть
Исправление в итерации -6 для выявленного несоответствия (коэффициент Шарпа +0.22 против total_return -54.71%): судя по кривой капитала, стратегию погубили транзакционные издержки, а не сломанный сигнал. Слегка положительный коэффициент Шарпа на бар при глубоко отрицательной совокупной доходности — признак чрезмерной частоты сделок и связанных с этим издержек. Такая арифметика была неизбежна из-за параметров итерации -5: номинал = капитал*0.01/(стоп ~1.2% ATR) ~= 0.83x капитала, ограниченный только на уровне 1.0x; порог входа 1.5 при стандартном отклонении самого сигнала ~0.71 (то есть условие |сигнал|>1.5 срабатывало примерно в ~3-4% доли баров окна — сотни входов за период); выход при нормализации потока с exit_z_frac=0.0 закрывал позицию, как только оценка проходила через ноль — часто через один-два бара, задолго до того, как движение могло покрыть оборот туда и обратно ~0.10% USD-M. Около 700 сделок туда и обратно x 0.10% x номинал 0.83x составляют ~58% капитала, что почти точно соответствует -54.71%. Три взаимосвязанных изменения параметров и логики сокращают эти издержки примерно на порядок, сохраняя сигнал, направление входа и всё, что прошло слои 1-3: max_notional_frac 1.0 -> 0.35 (издержки оборота теперь ~0.035% капитала вместо ~0.083%; это также ограничивает разгон убытков от сложного процента при просадке); entry_z 1.5 -> 1.8 (вход только в подлинно экстремальной зоне ~2.5 сигмы, число сделок сокращается примерно на 3x, но на окне песочницы остаётся более 100 сделок); exit_z_frac 0.0 -> -0.5 плюс новое ограничение min_hold_bars=1, чтобы выход по потоку требовал, чтобы оценка контртренда действительно FLIP против позиции, а не просто снижалась. Это даёт прибыльной позиции время достичь цели min_tp_pct=0.35%, покрывающей оборот туда и обратно. Всё остальное — разбор данных тейкеров по двум зеркалам, поиск среза на соответствующий момент времени, модульная функция _infer_bar_interval_ns, которая не должна перекрывать базовый статический метод, остановка по времени с привязкой к календарю и импорты — без изменений.
Отрицательное математическое ожидание на надёжной выборке из 523 сделок за 6 лет: profit_factor 0.898, total_return -13.16%, avg_trade_pnl_usd -24.87 (отрицательное математическое ожидание), коэффициент Шарпа -0.31, коэффициент Сортино -0.17, information_ratio -1.06 относительно стратегии «купи и держи». Основной показатель avg_trade_return_pct равен 0.185% — это артефакт равных весов: математическое ожидание с учётом размера позиции USD отрицательно, поскольку убыточные сделки имеют больший номинальный объём, а……Показать большеСвернуть
Отрицательное математическое ожидание на надёжной выборке из 523 сделок за 6 лет: profit_factor 0.898, total_return -13.16%, avg_trade_pnl_usd -24.87 (отрицательное математическое ожидание), коэффициент Шарпа -0.31, коэффициент Сортино -0.17, information_ratio -1.06 относительно стратегии «купи и держи». Основной показатель avg_trade_return_pct равен 0.185% — это артефакт равных весов: математическое ожидание с учётом размера позиции USD отрицательно, поскольку убыточные сделки имеют больший номинальный объём, а PF<1 подтверждает отсутствие положительного валового преимущества, которое комиссии могли бы съесть. Стратегия на затухании истощения агрессии тейкеров даёт преимущество NO при любом режиме (спокойном -11.0%, обычном -1.5%, стрессовом -9.9%) и приносит убыток в каждом полном году, так что это вывод о входе и направлении, который IS гипотезу, а не о критическом пороге параметров. Неблагоприятная структура выплат (avg_loss 560.9 против avg_win 389.5) означает, что при экстремальной агрессии продолжение движения систематически переигрывает стратегию на затухании. Оптимизация параметров 3 (lookback_bars/entry_z/max_hold_bars) не может превратить сигнал PF-0.898 в прибыльный. Опасения QA по поводу преимущества подтверждаются на всей истории. Соответствует L55 (стратегия на затухании для одного инструмента, PF<1.15 → отказаться). abandon_class=negative_expectancy.
Реализация
Длинно-короткая стратегия на одном инструменте SOLUSDT.BINANCE USD-M бессрочного типа с барами 1 часа, которая FADES резкие движения цены, вызванные экстремальным односторонним дисбалансом агрессивных ордеров TAKER. Каждое наблюдение за тейкерами (taker_ratio зеркало fapi, дополненное данными метрик из зеркала Vision за годы, не охваченные лентой fapi) преобразуется в ограниченный дисбаланс (покупки-продажи)/(покупки+продажи); этот дисбаланс стандартизируется по z-оценке относительно собственного скользящего……Показать большеСвернуть
Длинно-короткая стратегия на одном инструменте SOLUSDT.BINANCE USD-M бессрочного типа с барами 1 часа, которая FADES резкие движения цены, вызванные экстремальным односторонним дисбалансом агрессивных ордеров TAKER. Каждое наблюдение за тейкерами (taker_ratio зеркало fapi, дополненное данными метрик из зеркала Vision за годы, не охваченные лентой fapi) преобразуется в ограниченный дисбаланс (покупки-продажи)/(покупки+продажи); этот дисбаланс стандартизируется по z-оценке относительно собственного скользящего окна, как и доходность цены за 2 баров, а непрерывный сигнал пересчитывается на каждом баре по формуле -0.5*(z_flow + z_move). Экстремальное доминирование тейкеров-покупателей BUY на фоне роста -> SHORT истощившуюся погоню за движением; экстремальное доминирование тейкеров-продавцов SELL на фоне обвала -> LONG панику. Выход по цели ATR, стопу ATR, временному стопу с привязкой к календарю или при развороте оценки потока тейкеров против позиции после минимального удержания. Размер позиции определяется риском с жёстким ограничением номинала в 0.35x капитала; кредитное плечо 1.0; если поток тейкеров устарел, перехода на запасной вариант только по цене нет.
Результаты верификации
Изменения не нужны, если базовый шаблон рассматривает min_bars_required как переопределяемую точку расширения; иначе переименовать. Поведение верно.
min_bars_required(self) переопределяет метод платформы (отмечено статическим анализатором). Проверен базовый контракт: переопределение возвращает разумный период прогрева (lookback_bars + move_bars + atr_period + 2) и предназначено для использования в качестве точки расширения конкретной стратегии, поэтому проблемы нет. Для полноты отмечено предупреждение статического анализатора base_shadow.
Результат песочницы (без оптимизации, один прогон) отрицательный: total_return -11.1%, коэффициент Шарпа -0.66, avg_trade_return_pct -0.0223% (ниже порога комиссий), profit_factor 0.81 по 262 сделкам; «стрессовый» терциль волатильности глубоко отрицательный (-13.2%, коэффициент Шарпа -1.51), тогда как положителен только «спокойный» терциль (+1.43%). Цель min_tp_pct=0.35% по структуре превышает стоимость оборота туда и обратно ~0.10%, поэтому отрицательный результат на сделку связан с неоптимизированными параметрами и асимметрией убытков, а не с тем, что стратегия по структуре убыточна из-за комиссий. Однако аналитику следует проверить на полной истории, не ограничено ли преимущество контртрендового входа спокойным режимом и покрывает ли avg_trade_return_pct комиссии после оптимизации. avg_win 380.8 против avg_loss 428.7 при стопе 2.0xATR / цели 1.5xATR — неблагоприятное соотношение выплат, которое стоит проверить в первую очередь.
Обзор бэктеста
Шарп
-0,31
Общая доходность
-13,16%
Максимальная просадка
15,89%
Всего сделок
523
Доля прибыльных
56,4%
Профит-фактор
0,90
Ортогональный ценовому тренду сигнал агрессии тейкеров, новое семейство в журнале неудач
Надёжная выборка: 523 сделок за 2181 дней, сбалансированные длинные (268) и короткие (255) позиции, metrics_reliable=true
Качественно написанный код с устойчивыми к перезапуску выходами и бюджетом издержек комиссий
Асимметрия убытков неблагоприятна: avg_loss 560.9 против avg_win 389.5 при доле прибыльных сделок 56% — соотношение цели 1.5xATR и стопа 2.0xATR позволяет продолжению движения переигрывать контртрендовый вход
Ни один режим не подходит: спокойный -11.0% (коэффициент Шарпа -0.23), обычный -1.5%, стрессовый -9.9% (коэффициент Шарпа -0.96). Преимущество контртрендового входа отсутствует во всех режимах, а не только вне доступного для торговли режима
Убыток в каждом полном году (2023 -3.4%, 2024 -1.6%, 2025 -2.3%, 2026 -7.1%); information_ratio -1.06 против стратегии «купить и держать»
Соответствует L55: контртрендовая стратегия на одном инструменте с возвратом цены при PF < 1.15 ни разу не преодолела комиссии после повторной настройки порогов
Здесь вводит в заблуждение: процент на сделку при равном взвешивании положителен, но взвешенное по размеру позиции USD ожидание отрицательно, поскольку убыточные сделки имеют больший номинал
Анализ
Порог бэктеста:
- метрики ненадёжны: несогласованность — знак коэффициента Шарпа 0.22 не совпадает со знаком total_return -54.71%. Коэффициент Шарпа рассчитывается по ряду mtm_equity_curve, а доходность — по кривой капитала. Оценивайте результат по кривой капитала.
История итераций
Проверка не пройдена (слой 2 — синтетические сценарии): Использованные параметры: ['exit_z', 'tp_atr', 'entry_z', 'stop_atr', 'risk_frac', 'atr_period', 'z_lookback', 'min_stop_pct', 'max_hold_bars', 'move_lookback', 'max_notional_frac', 'max_stale_minutes'] Проверьте, что __init__ присваивает всем атрибутам значения из self.parameters.get(). - steady_uptrend: ошибка настройки: TypeError: SolTakerAggressionExhaustionReversal._bar_interval_ns() принимает 1 позиционный аргумент, но передано 2 - steady_downtrend:……Показать большеСвернуть
Проверка не пройдена (слой 2 — синтетические сценарии):
Использованные параметры: ['exit_z', 'tp_atr', 'entry_z', 'stop_atr', 'risk_frac', 'atr_period', 'z_lookback', 'min_stop_pct', 'max_hold_bars', 'move_lookback', 'max_notional_frac', 'max_stale_minutes']
Проверьте, что __init__ присваивает всем атрибутам значения из self.parameters.get().
- steady_uptrend: ошибка настройки: TypeError: SolTakerAggressionExhaustionReversal._bar_interval_ns() принимает 1 позиционный аргумент, но передано 2
- steady_downtrend: ошибка настройки: TypeError: SolTakerAggressionExhaustionReversal._bar_interval_ns() принимает 1 позиционный аргумент, но передано 2
- flat_ranging: ошибка настройки: TypeError: SolTakerAggressionExhaustionReversal._bar_interval_ns() принимает 1 позиционный аргумент, но передано 2
- volatility_spike: ошибка настройки: TypeError: SolTakerAggressionExhaustionReversal._bar_interval_ns() принимает 1 позиционный аргумент, но передано 2
- zero_volume: ошибка настройки: TypeError: SolTakerAggressionExhaustionReversal._bar_interval_ns() принимает 1 позиционный аргумент, но передано 2
- price_gap: ошибка настройки: TypeError: SolTakerAggressionExhaustionReversal._bar_interval_ns() принимает 1 позиционный аргумент, но передано 2
Проверка не пройдена (уровень 4 — проверка QA): - WHOLE-STRATEGY SWAP: в коде используется класс EthOpenInterestConfirmedBreakout — пробой канала Дончиана BREAKOUT на ETHUSDT.BINANCE с фильтром по расширению OPEN-INTEREST, входом WITH движения (продолжение импульса). Гипотеза — стратегия на угасании агрессии тейкеров REVERSAL на SOLUSDT.BINANCE, которая FADES экстремальный дисбаланс агрессивных ордеров тейкеров через ленту taker_ratio. Инструмент, источник сигнала и направление преимущества — всё неверно; код……Показать большеСвернуть
Проверка не пройдена (уровень 4 — проверка QA):
- WHOLE-STRATEGY SWAP: в коде используется класс EthOpenInterestConfirmedBreakout — пробой канала Дончиана BREAKOUT на ETHUSDT.BINANCE с фильтром по расширению OPEN-INTEREST, входом WITH движения (продолжение импульса). Гипотеза — стратегия на угасании агрессии тейкеров REVERSAL на SOLUSDT.BINANCE, которая FADES экстремальный дисбаланс агрессивных ордеров тейкеров через ленту taker_ratio. Инструмент, источник сигнала и направление преимущества — всё неверно; код связан с гипотезой ошибочно или сгенерирован неверно.
- INSTRUMENT MISMATCH: в гипотезе указано SOLUSDT.BINANCE; конфигурация, класс и песочница работают с ETHUSDT.BINANCE-1-HOUR.
- CORE EDGE ABSENT: преимущество гипотезы основано на дисбалансе агрессивных ордеров тейкеров-покупателей и тейкеров-продавцов (taker_ratio). Код не считывает taker_ratio — он считывает open_interest и строит фильтр роста OI. Заявленный механизм не реализован.
- EDGE DIRECTION INVERTED: гипотеза основана на истощении/REVERSAL (игре на разворот движения). should_enter возвращает BUY при пробое вверх / SELL при пробое вниз — продолжение импульса, знак противоположен.
Проверка не пройдена (слой 2 — синтетические сценарии): Использованные параметры: ['sl_atr', 'tp_atr', 'entry_z', 'min_obs', 'move_bars', 'risk_frac', 'atr_period', 'min_sl_pct', 'min_tp_pct', 'exit_z_frac', 'lookback_bars', 'max_hold_bars', 'max_stale_hours', 'max_notional_frac'] Проверьте, что __init__ присваивает всем атрибутам значения из self.parameters.get(). - steady_uptrend: ошибка настройки: TypeError: SolTakerAggressionExhaustionReversalLS._bar_interval_ns() принимает 1 позиционный аргумент, но передано……Показать большеСвернуть
Проверка не пройдена (слой 2 — синтетические сценарии):
Использованные параметры: ['sl_atr', 'tp_atr', 'entry_z', 'min_obs', 'move_bars', 'risk_frac', 'atr_period', 'min_sl_pct', 'min_tp_pct', 'exit_z_frac', 'lookback_bars', 'max_hold_bars', 'max_stale_hours', 'max_notional_frac']
Проверьте, что __init__ присваивает всем атрибутам значения из self.parameters.get().
- steady_uptrend: ошибка настройки: TypeError: SolTakerAggressionExhaustionReversalLS._bar_interval_ns() принимает 1 позиционный аргумент, но передано 2
- steady_downtrend: ошибка настройки: TypeError: SolTakerAggressionExhaustionReversalLS._bar_interval_ns() принимает 1 позиционный аргумент, но передано 2
- flat_ranging: ошибка настройки: TypeError: SolTakerAggressionExhaustionReversalLS._bar_interval_ns() принимает 1 позиционный аргумент, но передано 2
- volatility_spike: ошибка настройки: TypeError: SolTakerAggressionExhaustionReversalLS._bar_interval_ns() принимает 1 позиционный аргумент, но передано 2
- zero_volume: ошибка настройки: TypeError: SolTakerAggressionExhaustionReversalLS._bar_interval_ns() принимает 1 позиционный аргумент, но передано 2
- price_gap: ошибка настройки: TypeError: SolTakerAggressionExhaustionReversalLS._bar_interval_ns() принимает 1 позиционный аргумент, но передано 2
Проверка не пройдена (Layer 2 — синтетические сценарии): Использованные параметры: ['sl_atr', 'tp_atr', 'entry_z', 'min_obs', 'move_bars', 'risk_frac', 'atr_period', 'min_sl_pct', 'min_tp_pct', 'exit_z_frac', '_param_bounds', 'lookback_bars', 'max_hold_bars', 'max_stale_hours', 'max_notional_frac'] Убедитесь, что __init__ задает все атрибуты из self.parameters.get(). - steady_uptrend: Ошибка настройки: TypeError: SolTakerAggressionExhaustionReversalLS._bar_interval_ns() принимает 1 позиционных аргумента, но……Показать большеСвернуть
Проверка не пройдена (Layer 2 — синтетические сценарии):
Использованные параметры: ['sl_atr', 'tp_atr', 'entry_z', 'min_obs', 'move_bars', 'risk_frac', 'atr_period', 'min_sl_pct', 'min_tp_pct', 'exit_z_frac', '_param_bounds', 'lookback_bars', 'max_hold_bars', 'max_stale_hours', 'max_notional_frac']
Убедитесь, что __init__ задает все атрибуты из self.parameters.get().
- steady_uptrend: Ошибка настройки: TypeError: SolTakerAggressionExhaustionReversalLS._bar_interval_ns() принимает 1 позиционных аргумента, но передано 2
- steady_downtrend: Ошибка настройки: TypeError: SolTakerAggressionExhaustionReversalLS._bar_interval_ns() принимает 1 позиционных аргумента, но передано 2
- flat_ranging: Ошибка настройки: TypeError: SolTakerAggressionExhaustionReversalLS._bar_interval_ns() принимает 1 позиционных аргумента, но передано 2
- volatility_spike: Ошибка настройки: TypeError: SolTakerAggressionExhaustionReversalLS._bar_interval_ns() принимает 1 позиционных аргумента, но передано 2
- zero_volume: Ошибка настройки: TypeError: SolTakerAggressionExhaustionReversalLS._bar_interval_ns() принимает 1 позиционных аргумента, но передано 2
- price_gap: Ошибка настройки: TypeError: SolTakerAggressionExhaustionReversalLS._bar_interval_ns() принимает 1 позиционных аргумента, но передано 2
Сводка по итогам
Даже новое и хорошо обоснованное семейство сигналов нельзя оценить, пока код не проходит базовый запуск: вспомогательный метод имел сигнатуру, несовместимую с проверочным прокси слоя -2 (который повторно привязывает вызываемые объекты и передаёт self). Из-за этого каждый синтетический сценарий завершился сбоем. Проверка корректной работы вспомогательных методов после привязки прокси необходима, чтобы оценить преимущество стратегии.
заброшена
Стратегию забросили на этапе проверки на слое 2 (синтетические сценарии) после 3 итераций: все шесть сценариев завершились одинаковой ошибкой TypeError — `_bar_interval_ns() takes 1 positional argument but 2 were given` — из-за несовместимой сигнатуры метода (прокси Layer-2 передаёт self, а вспомогательный метод был объявлен несовместимо), поэтому стратегия вообще не запустилась. Проверка бэктеста, оптимизация, анализ и оценка риска не проводились.
Стратегия лонг-шорт на одном инструменте и одной площадке с бессрочным контрактом SOLUSDT.BINANCE USD-M: она открывает контртрендовые позиции после резких движений цены, вызванных экстремальным односторонним дисбалансом агрессивных тейкеров — продаёт после эйфоричных рыночных покупок, исчерпавших ликвидность заявок на продажу, и покупает после панических рыночных продаж при малом объёме заявок на покупку. Используются поток taker_ratio, независимый от цены и стандартизированный по собственной скользящей истории, а также требование совпадающего направления движения цены. Выход — при нормализации потока, достижении цели или стопа ATR либо по времени.
Результатов нет: стратегия не дошла до бэктеста, поэтому нет данных о доходности, коэффициенте Шарпа или сделках.
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.