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

Стратегии

美股行业ETF三年输家—赢家逆向组合

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

UseqSectorLongHorizonContrarianBasket

Сводка по итогам

В UseqSectorLongHorizonContrarianBasket тестировалась корзина отраслевых ETF по принципу «отстающие минус лидеры» за три года с ежегодным обновлением. После восьми итераций исправленный жизненный цикл выполнил 20 годовых корзин подряд, однако бэктест показал доходность -15.4953%, коэффициент Шарпа -0.1574 и отрицательную среднюю доходность закрытых позиций. По итогам проверки бэктеста от проверенной спецификации отказались до оптимизации, не отвергая долгосрочный разворот в целом.

Гипотеза

Ведущий исследователь вывел эту идею из статьи 发明者量化-小小梦《量化交易「从均值回归看逆向投资」》: взгляд на то, что многолетние отстающие впоследствии опережают многолетних лидеров, преобразован в долгосрочную поперечную контртрендовую стратегию на отраслевых ETF США. На дневных барах USEQ покупаются два отраслевых ETF с худшими результатами за предыдущие три года, а два лучших продаются без покрытия; через год позиции закрываются и рейтинг составляется заново. Отраслевые ETF, число инструментов в корзине, годичный срок удержания и……Показать большеСвернуть

Ведущий исследователь вывел эту идею из статьи 发明者量化-小小梦《量化交易「从均值回归看逆向投资」》: взгляд на то, что многолетние отстающие впоследствии опережают многолетних лидеров, преобразован в долгосрочную поперечную контртрендовую стратегию на отраслевых ETF США. На дневных барах USEQ покупаются два отраслевых ETF с худшими результатами за предыдущие три года, а два лучших продаются без покрытия; через год позиции закрываются и рейтинг составляется заново. Отраслевые ETF, число инструментов в корзине, годичный срок удержания и защитный стоп выбраны ведущим исследователем и не являются правилами торговли исходного автора. Указанный в статье период формирования от трёх до пяти лет сохранён как диапазон для оптимизации; этот эксперимент не воспроизводит выборку акций, анализ доходности или результат удержания в течение трёх лет из исходной работы. Сделки исполняются по рыночной цене закрытия в день принятия решения; исполнение на открытии следующего торгового дня не требуется. Используются только цены с поправкой на дробление акций; платформа не учитывает дивиденды, поэтому проверяется ценовой разворот, а не стратегия с полной доходностью.

Это прямое ценовое воплощение идеи исходной статьи о долгосрочном развороте акций и отраслей; многолетнее контртрендовое инвестирование не превращается в минутный отскок RSI, а исследование акций не подменяется механизмом ставок финансирования. В корзину входят фиксированные девять отраслевых ETF; стратегия не зависит от отсутствующих исторических данных о составе фондовых индексов или рыночной капитализации и запускается только после появления всех ETF и достаточной истории. Это расширяет исследование до……Показать большеСвернуть

Это прямое ценовое воплощение идеи исходной статьи о долгосрочном развороте акций и отраслей; многолетнее контртрендовое инвестирование не превращается в минутный отскок RSI, а исследование акций не подменяется механизмом ставок финансирования. В корзину входят фиксированные девять отраслевых ETF; стратегия не зависит от отсутствующих исторических данных о составе фондовых индексов или рыночной капитализации и запускается только после появления всех ETF и достаточной истории. Это расширяет исследование до нескольких активов и длинных и коротких позиций, отвечая на проблему концентрации в текущих одиночном активе 62.9% и стратегии только с длинными позициями 80.7%. Поле corpus_concentration пусто, поэтому нельзя утверждать, что эти ETF не использовались в недавних экспериментах. Выбрана USEQ, а не изменён исходный механизм ради выполнения квоты криптобирж. Не используются ордера на открытии следующего торгового дня, необязательная политика фиксации прибыли и стоп-лосса на одном баре или отдельный режим хеджирования. Из-за длительного удержания выборка мала; недостаточность доказательств следует обозначить как низкую уверенность, а не использовать как основание для отказа от тестирования.

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; сравнения отдельных сторон с покупкой и удержанием не определяют этот вердикт.

Анализ

Не оптимизируй и не перенастраивай параметры. Воспроизведи границу 2005-01-10: четыре позиции 2004 закрываются, но новые ордера не исполняются до 2006-01-10. Проследи прохождение этой границы через отмену, закрытие, открытие и подтверждение, используя существующие журналы аудита; сравни отправленные ордера, исполнения, обновления позиций и возможное подавление входа движком. Установи, исполнялся ли в этом отчёте предоставленный вариант кода. Обеспечь, чтобы на каждой допустимой границе подтверждались ровно четыре……Показать большеСвернуть

Не оптимизируй и не перенастраивай параметры. Воспроизведи границу 2005-01-10: четыре позиции 2004 закрываются, но новые ордера не исполняются до 2006-01-10. Проследи прохождение этой границы через отмену, закрытие, открытие и подтверждение, используя существующие журналы аудита; сравни отправленные ордера, исполнения, обновления позиций и возможное подавление входа движком. Установи, исполнялся ли в этом отчёте предоставленный вариант кода. Обеспечь, чтобы на каждой допустимой границе подтверждались ровно четыре исполнения заново ранжированных замещающих позиций по разрешённой цене закрытия в момент принятия решения либо возникала явная ошибка исполнения; успешный запуск не должен молча пропускать замену позиций. Проверь следующие друг за другом годовые границы, включая заново выбранные инструменты, и составь сверку «граница — исполнение» до следующего анализа всей истории. Имеющиеся обратные вызовы и оповещения не подтвердили исправление, поэтому определи фактически сбойный переход, а не повторяй прежние рекомендации по обратным вызовам. ## Уточнения библиотеки (из библиотеки знаний; проверь их, не считай доказанными) Примеры управления ордерами из библиотеки подтверждают необходимость проверять завершение перед переходом к следующей ротации и различать терминальные ордера и исполненные ордера. Устрани пропуск замены 2005 до интерпретации результатов или изменения торговых параметров. 1. [запись] Требуй сверенную новую корзину на каждой годовой границе: не меняй торговые параметры. Воспроизведи 2005-01-10 и сопоставь исполненный артефакт стратегии с предоставленной версией. Сверь переходы отмены, закрытия, открытия и подтверждения с отправленными ордерами, исполнениями, обновлениями позиций и подавлением входа движком; перед исправлением найди первый сбойный переход. На каждой допустимой границе должны подтверждаться полные исполнения замены, рассчитанные исходя из всего капитала и в целых акциях, ровно для двух заново ранжированных длинных позиций и двух коротких по разрешённой цене закрытия в момент принятия решения, включая заново выбранные инструменты. Обновляй состояние завершённого цикла только после закрытия старых позиций, сверки исполнений замены с новыми позициями и разрешения ордеров ротации. Сохрани rotation_poll_ns=1000000 и rotation_timeout_ns=1000000000. Отсутствующие, подавленные, отклонённые, частичные или запоздалые исполнения замены должны вызывать явную ошибку исполнения. Проверь следующие друг за другом годовые границы и составь сверку «граница — исполнение» до следующего анализа всей истории. — Аналитик сообщает, что старые позиции закрываются в 2005, а новые не появляются до 2006; поэтому коэффициент Шарпа 0.059 и фактор прибыли 1.068 пока ненадёжно отражают результаты предполагаемой стратегии. В учебном руководстве предлагается дождаться завершения ордера перед продолжением. В расширенной документации объясняется, что отменённые задачи исполнения перестают принимать целевые позиции, и показано, как дождаться отмены до создания замещающей задачи. В справочнике сценариев проверяется оставшееся количество, даже если ордер терминальный. Это подтверждает необходимость проверок жизненного цикла и исполнения, но не устанавливает фактическую причину сбоя NautilusTrader; это предложение задаёт критерии приёмки, а не утверждает диагноз и не повторяет советы по обратным вызовам. (источник: t41.py, стр. 1; расширенные функции TargetPosTask, стр. 1; Scenario And Margin, стр. 1)

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

Проверка не пройдена (уровень 1 — статический анализ): - Запрещённый импорт: src.data.market_calendar — стратегиям разрешён импорт только базовых классов и вспомогательных модулей фреймворка (src.strategies.base_template, src.strategies.rolling_options_template, src.strategies.polymarket_series_template, src.strategies.helpers); сборщики данных, база данных, движок бэктеста и реестр находятся за пределами песочницы. (строка 11)

Проверка не пройдена (уровень 4 — проверка QA) [класс=code_defect]: - [edge_concern] Обрезанное тестирование в песочнице не подтверждает прибыльность. Анализ полного периода должен согласовать закрытые убытки, оставшийся инвентарь, спред, влияние на цену и стоимость заимствования; также необходимо сверить заявленную экспозицию 275.12% с настроенной валовой экспозицией при входе 50%. - [critical] open_pending_basket требует self.clock.timestamp_ns() == self.decision_ns. Базовый шаблон явно различает часы симуляции……Показать большеСвернуть

Проверка не пройдена (уровень 4 — проверка QA) [класс=code_defect]: - [edge_concern] Обрезанное тестирование в песочнице не подтверждает прибыльность. Анализ полного периода должен согласовать закрытые убытки, оставшийся инвентарь, спред, влияние на цену и стоимость заимствования; также необходимо сверить заявленную экспозицию 275.12% с настроенной валовой экспозицией при входе 50%. - [critical] open_pending_basket требует self.clock.timestamp_ns() == self.decision_ns. Базовый шаблон явно различает часы симуляции бэктеста и системные часы, используемые в бумажной торговле и live trading. Поэтому синхронизированный дневной бар, обработанный даже немного позже времени его закрытия, вызывает rotation_execution_missed до отправки выбранных ордеров на вход. Из-за этого корзина не может исполняться в обычной бумажной или реальной торговле, несмотря на успешную проверку в песочнице. (строка 179) — исправление: проверять решение по временным меткам синхронизированных баров и различать время симулированного исполнения и доставки сигналов в бумажной или реальной торговле. Использовать поддерживаемый платформой порядок обработки на закрытии и явную политику устаревших решений, не требуя точного совпадения системного времени со временем исторического бара. - [warning] Стратегия ведёт собственный календарь биржевых выходных и торговых сессий вместо использования календаря платформы. Расписание, привязанное к временным меткам, предотвращает смещение счётчика процессов, но дублирование календарных правил может привести к расхождению с сессиями, используемыми сбором данных и исполнением. (строка 59) — исправление: строить порядковый номер сессии, привязанный к временной метке, с помощью src.strategies.helpers.sessions.is_trading_day и session_date. Сохранять настроенную начальную точку и периодичность hold_bars; не импортировать напрямую src.data.

Проверять решение по временным меткам синхронизированных баров и различать время симулированного исполнения и доставки сигналов в бумажной или реальной торговле. Использовать поддерживаемый платформой порядок обработки на закрытии и явную политику устаревших решений, не требуя точного совпадения системного времени со временем исторического бара.

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.

Стратегия ведёт собственный календарь биржевых выходных и торговых сессий вместо использования календаря платформы. Расписание, привязанное к временным меткам, предотвращает смещение счётчика процессов, но дублирование календарных правил может привести к расхождению с сессиями, используемыми сбором данных и исполнением.

Проверка не пройдена (уровень 4 — проверка QA) [класс=code_defect]: - [edge_concern] Обрезанное тестирование в песочнице не подтверждает прибыльность. Анализ полного периода должен оценить ценовой разворот с учётом спреда, влияния на цену и стоимости заимствования; дивиденды не учитываются. - [critical] Ранжирование для длинных и коротких позиций независимо разрешает равенство по возрастанию инструмента ID. При одинаковой доходности за период формирования оба списка выбирают XLB и XLE при basket_size=2.……Показать большеСвернуть

Проверка не пройдена (уровень 4 — проверка QA) [класс=code_defect]: - [edge_concern] Обрезанное тестирование в песочнице не подтверждает прибыльность. Анализ полного периода должен оценить ценовой разворот с учётом спреда, влияния на цену и стоимости заимствования; дивиденды не учитываются. - [critical] Ранжирование для длинных и коротких позиций независимо разрешает равенство по возрастанию инструмента ID. При одинаковой доходности за период формирования оба списка выбирают XLB и XLE при basket_size=2. Пересечение вызывает rotation_failure(), навсегда устанавливая rotation_phase в значение 'failed'; последующие расчёты сигнала снова приводят к ошибке. Таким образом, допустимые данные с неизменной ценой отключают стратегию вместо разрешения равенства заявленным детерминированным ранжированием. (строка 324) — исправление: детерминированно распределять выбранные инструменты по непересекающимся корзинам, сохраняя приоритет возрастания инструмента-ID для каждой стороны; например, сначала выбрать отстающие активы, затем выбрать лидеров из оставшихся инструментов. Проверить случай после полного прогрева на границе календарного периода с одинаковой доходностью.

Детерминированно распределять выбранные инструменты по непересекающимся корзинам, сохраняя приоритет возрастания инструмента-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 — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.