Стратегии
美股行业ETF三年输家—赢家逆向组合
Итог: Отменено
UseqSectorLongHorizonContrarianBasket
Сводка по итогам
В UseqSectorLongHorizonContrarianBasket тестировалась корзина отраслевых ETF по принципу «отстающие минус лидеры» за три года с ежегодным обновлением. После восьми итераций исправленный жизненный цикл выполнил 20 годовых корзин подряд, однако бэктест показал доходность -15.4953%, коэффициент Шарпа -0.1574 и отрицательную среднюю доходность закрытых позиций. По итогам проверки бэктеста от проверенной спецификации отказались до оптимизации, не отвергая долгосрочный разворот в целом.
Гипотеза
negative_expectancy: отказаться от оптимизации операционализации ведущего исследователя: секторная корзина ETF, трёхлетний период формирования и годичный срок удержания. После исправления жизненного цикла годовые корзины исполняются последовательно, но измеренные результаты закрытых позиций остаются отрицательными и ниже порога проверки USEQ. Нет подтверждённого исправления реализации или измеренного прибыльного диапазона параметров, которые оправдывали бы ещё одну итерацию разработки. Это отвергает проверенную спецификацию, а не стратегию исходного автора или долгосрочный разворот в целом; альтернативные периоды формирования и удержания не тестировались.
Реализация
Ранжирует девять синхронизированных отраслевых ETF USEQ по доходности цены с поправкой на дробление акций за 756 сессий; покупает два отстающих инструмента и продаёт в короткую два лидирующих с равными долями внутри каждой стороны, выполняет ротацию по фиксированной календарной сетке с шагом 252 сессий и применяет защитные стоп-приказы 20%, не пополняя остановленные позиции.
Исправляет несоответствие уровня 1.5, явно настраивая основной и все восемь дополнительных инструментов на бары 1-DAY и сохраняя фиксированный параметр bar_interval. Ранжирование, исполнение, расчёт размера позиции и календарная логика не меняются; только строка документации теперь явно указывает необходимый интервал. Этот отзыв касается согласованности конфигурации и не даёт оснований отказываться от гипотезы.
Результаты верификации
В песочнице две убыточные позиции закрылись около защитных стопов, а две позиции остались открытыми. Этот сокращённый дымовой тест не подтверждает прибыльность на длинном горизонте; при оценке за полный период следует учитывать доходность разворота после спреда, влияния на цену и стоимости заимствования акций для коротких позиций.
Обзор бэктеста
- Шарп
- -0,16
- Общая доходность
- -15,50%
- Максимальная просадка
- 29,45%
- Всего сделок
- 78
- Доля прибыльных
- 42,3%
- Профит-фактор
- 0,76
Ежегодное обновление восстановлено: торговые записи показывают 20 годовых корзин подряд, каждая включает две длинные и две короткие позиции. Прежний пропуск отдельных лет больше не наблюдается.
Код ранжирует отстающие и лидирующие активы по скользящей цене и рассчитывает размер позиции относительно капитала; начальный номинал каждой стороны составляет примерно $12,500.
Все девять проверок входных данных пройдены; accounting_valid и metrics_reliable истинны.
По 78 закрытым позициям средняя доходность составляет -1.9025% от номинала против порога проверки +0.05% USEQ; фактор прибыли — 0.763, средний финансовый результат — -$243.73.
Совокупная доходность составляет -15.4953%, несмотря на нереализованную прибыль к концу периода в +3.5685 процентного пункта. Коэффициент Шарпа — -0.1574. Опасение QA относительно экономики стратегии подтверждается результатом за всю историю.
Позиции 78 представляют примерно 20 годовых наблюдений корзин, а не 78 независимых ставок на портфель. Ни один перебор параметров не установил наличие прибыльного диапазона.
benchmark_meaningful — false; сравнения отдельных сторон с покупкой и удержанием не определяют этот вердикт.
Анализ
История итераций
Проверка не пройдена (уровень 1 — статический анализ): - Запрещённый импорт: src.data.market_calendar — стратегиям разрешён импорт только базовых классов и вспомогательных модулей фреймворка (src.strategies.base_template, src.strategies.rolling_options_template, src.strategies.polymarket_series_template, src.strategies.helpers); сборщики данных, база данных, движок бэктеста и реестр находятся за пределами песочницы. (строка 11)
Проверять решение по временным меткам синхронизированных баров и различать время симулированного исполнения и доставки сигналов в бумажной или реальной торговле. Использовать поддерживаемый платформой порядок обработки на закрытии и явную политику устаревших решений, не требуя точного совпадения системного времени со временем исторического бара.
open_pending_basket требует self.clock.timestamp_ns() == self.decision_ns. Базовый шаблон явно различает часы симуляции бэктеста и системные часы, используемые в бумажной торговле и live trading. Поэтому синхронизированный дневной бар, обработанный даже немного позже времени его закрытия, вызывает rotation_execution_missed до отправки выбранных ордеров на вход. Из-за этого корзина не может исполняться в обычной бумажной или реальной торговле, несмотря на успешную проверку в песочнице.
Строить порядковый номер сессии, привязанный к временной метке, с помощью src.strategies.helpers.sessions.is_trading_day и session_date. Сохранять настроенную начальную точку и периодичность hold_bars; не импортировать напрямую src.data.
Стратегия ведёт собственный календарь биржевых выходных и торговых сессий вместо использования календаря платформы. Расписание, привязанное к временным меткам, предотвращает смещение счётчика процессов, но дублирование календарных правил может привести к расхождению с сессиями, используемыми сбором данных и исполнением.
Детерминированно распределять выбранные инструменты по непересекающимся корзинам, сохраняя приоритет возрастания инструмента-ID для каждой стороны; например, сначала выбрать отстающие активы, затем выбрать лидеров из оставшихся инструментов. Проверить случай после полного прогрева на границе календарного периода с одинаковой доходностью.
Ранжирование для длинных и коротких позиций независимо разрешает равенство по возрастанию инструмента ID. При одинаковой доходности за период формирования оба списка выбирают XLB и XLE при basket_size=2. Пересечение вызывает rotation_failure(), навсегда устанавливая rotation_phase в значение 'failed'; последующие расчёты сигнала снова приводят к ошибке. Таким образом, допустимые данные с неизменной ценой отключают стратегию вместо разрешения равенства заявленным детерминированным ранжированием.
Проверка не пройдена (уровень 1.5 — согласованность гипотезы и конфигурации) [класс=hypothesis_mismatch]: - optimization_plan задаёт bar_interval в пределах 1-DAY
Сводка по итогам
Восстановление последовательного ежегодного исполнения не подтвердило экономическое преимущество проверенной спецификации; альтернативные периоды формирования и удержания не тестировались.
По итогам проверки бэктеста вынесен вердикт отказаться от стратегии: после исправления годового жизненного цикла корзины ожидаемая доходность осталась отрицательной и опустилась ниже порога проверки +0.05% USEQ. До оптимизации, последующих аналитической и риск-проверки дело не дошло.
Покупать два отраслевых ETF US с худшими результатами за три года и открывать короткие позиции по двум лидерам, ежегодно обновляя корзину для проверки долгосрочного ценового разворота без учёта дивидендов.
Бэктест показал доходность -15.4953%, коэффициент Шарпа -0.1574, максимальную просадку 29.4461% и 78 закрытых позиций примерно за 20 годовых корзин. Средняя доходность закрытой позиции составила -1.9025% от номинала, а фактор прибыли — 0.763.
Анализ
量化交易「从均值回归看逆向投资」
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.