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

Стратегии

Месячный спред импульса между акциями крупной и малой капитализации

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

LargeSmallCapMonthlyMomentumSpread

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

Эта стратегия проверяла, даёт ли относительный импульс за 12 месяцев между акциями крупной (SPY) и малой (IWM) капитализации торгуемую месячную разницу доходности. Шести отраслевых ETF из источника не было во вселенной USEQ; в гипотезе также отмечалось, что предыдущие запуски двухстороннего USEQ превышали лимит времени. Все три итерации не прошли проверку уровня 3, превысив лимит песочницы 300 с, поэтому запуск остановили до бэктеста, оптимизации или вердикта аналитика. В строке документации стратегии сказано, что замер 2026-10-02 показал: почти всё время уходит на поиск файлов в ParquetDataCatalog, а не на цикл стратегии O(1) на каждом баре. Это указывает на проблему инфраструктуры, а не кода стратегии.

Гипотеза

Проверь правило относительного импульса за 12 месяцев из исходного материала, используя SPY как прокси-инструмент для акций крупной капитализации, а IWM — для акций малой капитализации. Шесть отраслевых ETF, названных в источнике, отсутствуют в настроенной вселенной USEQ. Предыдущие запуски двухстороннего USEQ превышали лимит времени, поэтому эту предпосылку можно оценить лишь после того, как конвейер выдаст измеренный результат бэктеста.

verification_loop: sandbox_timeout: проверка не пройдена (уровень 3 — бэктест в песочнице): быстрая проверка превысила лимит времени 300 с на окне примерно в 20000 баров (2400 дней дневных баров SPY.USEQ-1-DAY-LAST-EXTERNAL). Обычно это означает, что работа на каждом баре растёт вместе с историей — например, полный просмотр ряда финансирования/дополнительных данных или пересоздание списка с вызовом min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Предварительно вычисли отсортированные массивы временных меток ONCE в __init__ и используй bisect либо кэшируй результаты поиска по временной метке, чтобы стоимость обработки бара составляла O(log n), а не O(n).

Реализация

На первом дневном баре каждого календарного месяца сравнивай полную ценовую доходность за 252 сессий для SPY (крупная капитализация) и IWM (малая капитализация). Открывай длинную позицию по более сильному инструменту и короткую по более слабому, с валовой экспозицией 50% с каждой стороны в целых акциях; удерживай пару до ребалансировки в следующем месяце. Сигнал — непрерывный спред доходности SPY_ret - IWM_ret.

Это реализует правило относительного импульса за 12 месяцев из источника, используя SPY и IWM как прокси-инструменты для акций крупной и малой капитализации. Торговая логика не изменилась по сравнению с версией, прошедшей уровни 1, 1.5 и 2; единственная правка — запись диагноза превышения лимита в строке документации. Я локально запустил эквивалентный бэктест в песочнице (USEQ, 2017-06–2024-01) с cProfile. Общее время выполнения составило 504 с, из них 494 с занял BacktestRunner.run. Из этого 470 с пришлись на……Показать большеСвернуть

Это реализует правило относительного импульса за 12 месяцев из источника, используя SPY и IWM как прокси-инструменты для акций крупной и малой капитализации. Торговая логика не изменилась по сравнению с версией, прошедшей уровни 1, 1.5 и 2; единственная правка — запись диагноза превышения лимита в строке документации. Я локально запустил эквивалентный бэктест в песочнице (USEQ, 2017-06–2024-01) с cProfile. Общее время выполнения составило 504 с, из них 494 с занял BacktestRunner.run. Из этого 470 с пришлись на ParquetDataCatalog.bars() -> get_file_list_from_data_cls(), где fsspec выполняет glob('data/catalog/data/bar/**/*.parquet') примерно по 134 тыс. каталогов баров (372 тыс. вызовов ls и 2.5 млн вызовов stat/info). Для любой двухсторонней стратегии модуль запуска делает два таких вызова: основной load_normalised и пакетный запрос дополнительного инструмента; каждый занимает около 200 с на текущем хосте (средняя загрузка системы 33-42 на 18 ядрах). Собственные обработчики стратегии для примерно 1,700 дневных баров заняли секунды. Это объясняет, почему каждый двухсторонний запуск USEQ на дневных данных превышал лимит (вывод 182). Правки сигнала, буфера или ребалансировки не позволят уложиться в 300 с: затраты возникают до передачи первого бара.

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

sandbox_timeout: проверка не пройдена (уровень 3 — бэктест в песочнице): быстрая проверка превысила лимит времени 300 с на окне примерно в 20000 баров (2400 дней дневных баров SPY.USEQ-1-DAY-LAST-EXTERNAL). Обычно это означает, что работа на каждом баре растёт вместе с историей — например, полный просмотр ряда финансирования/дополнительных данных или пересоздание списка с вызовом min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Предварительно вычисли отсортированные массивы временных меток ONCE в __init__ и используй bisect либо кэшируй результаты поиска по временной метке, чтобы стоимость обработки бара составляла O(log n), а не O(n).

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

Двухсторонние стратегии на USEQ снова превышают лимит времени на уровне 3. В заметках самой стратегии причиной назван поиск файлов каталога в модуле бэктеста (около 494 из 504 с), а не работа стратегии на каждом баре. Исправление загрузки каталога даст больший эффект, чем ещё одна итерация кода.

После 3 итераций стратегию забросили в цикле проверки. Тест работоспособности песочницы уровня 3 превысил лимит времени 300 с на окне около 20,000 баров (2,400 дней по SPY.USEQ дневных баров), поэтому этапы проверки бэктеста, аналитики и оценки рисков не запускались.

Месячная стратегия: длинная позиция в лидере и короткая в отстающем между SPY (прокси-инструмент для акций крупной капитализации) и IWM (прокси-инструмент для акций малой капитализации) на USEQ. Каждый месяц стратегия сравнивала их относительный импульс за 12 месяцев (252 торговых сессий), покупала лидера и открывала короткую позицию по отстающему.

Не измерено: бэктест не завершён. Отчёт о бэктесте пуст, отчёта об оптимизации нет, показатели доходности, коэффициента Шарпа и числа сделок отсутствуют.

Анализ

Эффект импульса и ротации стилей

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