Стратегии
Портфель Double-7s (pinkfish, F. Aultman по Connors и Alvarez): покупать при минимуме закрытия за 7 дней выше SMA за 200 дней, продавать при максимуме закрытия за 7 дней; равные веса для SPY/QQQ/DIA/IWM, дневные бары USEQ, только лонг
Итог: Отменено
Double7sPortfolioUseq
Сводка по итогам
Double7sPortfolioUseq применяет правило Double-7s Connors и Alvarez к четырём широким индексным ETF US на площадке USEQ с нулевой комиссией; стратегия работает только в лонг и использует равные веса, а также режимный фильтр SMA из 200. Проверка не пройдена: дымовые тесты бэктеста в изолированной среде на слое 3 завершались тайм-аутом через 300 с во всех 3 итерациях, включая итерацию 2, где обработка каждого бара была инкрементальной. Согласно заметкам профилирования итерации -3, время уходило на сканирование инструментов каталога в runner бэктеста, а не на стратегию. Работу прекратили до бэктеста, оптимизации, проверки аналитиком или оценки рисков, поэтому преимущество стратегии так и не было измерено.
Гипотеза
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).
Реализация
Перевод pinkfish стратегии double-7s-portfolio от F. Aultman (MIT). Правило Double 7s Connors и Alvarez применяется к дневным барам USEQ SPY/QQQ/DIA/IWM; стратегия работает только в лонг, веса равны 1/N. ETF покупается, когда цена закрывается на минимуме за 7 дней и выше SMA за 200 дней. Инструмент продаётся, когда цена закрывается на максимуме за 7 дней или ниже стопа (значение по умолчанию stop_loss_pct=1.0 задаёт стоп на уровне 0, поэтому он никогда не срабатывает, как и в исходном коде).
Результаты верификации
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).
Сводка по итогам
Если тайм-аут в изолированной среде вызван сканированием каталога до первого бара, а не кодом стратегии, переписывание стратегии проблему не решит: требуется исправить инфраструктуру, а не продолжать циклы доработок кода.
После 3 итераций работу прекратили: проверка зашла в цикл, поскольку каждый бэктест в изолированной среде на слое 3 превышал лимит времени 300 с на дневном окне SPY.USEQ длиной 2400 дней. В заметках к итерации -3 говорится, что профилирование связало задержку со сканированием glob в ParquetDataCatalog.instruments() по каталогу (около 56 тыс. папок Polymarket), которое выполняется до запуска кода стратегии, а не с обработкой отдельных баров.
Лонговый портфель Double-7s с равными весами и возвратом к среднему на SPY/QQQ/DIA/IWM дневных барах USEQ (перевод примера pinkfish с правилом Connors и Alvarez): купить ETF на минимуме закрытия за 7 дней, если цена выше 200-дневной SMA, и продать на максимуме закрытия за 7 дней.
Данных о результатах нет. Отчёт бэктеста пуст, оптимизация не запускалась, а доходность, коэффициент Шарпа и число сделок не рассчитаны.
Анализ
double-7s-portfolio
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.