Стратегии
Порт TrendDayStrategy от QuantRocket: продолжение дневного тренда во второй половине дня с плечом-ETF (покупка в лонг, если рост превышает 6% относительно предыдущего закрытия на дневной контрольной точке; короткая позиция, если падение превышает 6%; без позиции на закрытии сессии) на TQQQ/SQQQ/UVXY USEQ 1-HOUR
Итог: Отменено
TrendDayLeveragedEtfUseq
Сводка по итогам
TrendDayLeveragedEtfUseq перенёс правило продолжения дневного тренда во второй половине дня из QuantRocket на три ETF с плечом и волатильностью с часовыми барами USEQ. Оно было адаптировано к контрольной точке 14:30 ET, поскольку в часовой сетке Yahoo нет закрытия в 14:00. Обе итерации не прошли бэктест в песочнице Layer 3: время превысило лимит 300 с на окне 833 дней TQQQ. Разработчик отнёс превышение времени к поиску файлов каталога при высокой нагрузке ввода-вывода на хосте, а не к логике стратегии. Запуск прекратили в цикле проверки, так и не дойдя до бэктеста, оптимизации, аналитической или риск-проверки; преимущество стратегии так и не измерили.
Гипотеза
Точный порт торговой стратегии QuantRocket, предоставленной пользователем. Параметры по умолчанию (MIN_PCT_CHANGE = 0.06, фиксированный вес 20%, предел 1.0, вход в тот же день, выход MOC) сохранены без изменений. Настраивается только один порог в узком диапазоне вокруг исходного значения. Площадка USEQ и направление длинных и коротких позиций заполняют недостаточно представленные категории (USEQ 5.7%, длинные-короткие 17%); в корпусе почти нет истории по ETF 3. Сигнал основан на наблюдении за рынком (внутридневном движении 6%), а не на календарной дате, поэтому урок L179 неприменим. Принудительное закрытие позиций при ребалансировке ETF с плечом-ETF отличает эту стратегию от неработающего семейства импульсных стратегий на бессрочных криптоконтрактах. Период 1-HOUR заменяет 1-минутный только потому, что история USEQ за 1 минут охватывает примерно 38 сессий.
verification_loop: sandbox_timeout: проверка не пройдена (Layer 3 — бэктест в песочнице): дымовой тест превысил лимит времени 300 с на окне примерно в 20000 баров (833 дней по TQQQ.USEQ-1-HOUR-LAST-EXTERNAL). Обычно это означает, что работа на каждом баре растёт вместе с объёмом истории — например, полный повторный просмотр ряда финансирования или дополнительных данных либо создание списка и вызов min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Заранее вычисли массивы временных меток с сортировкой ONCE в __init__ и используй bisect либо кэшируй запросы по временной метке, чтобы затраты на каждый бар составляли O(log n), а не O(n).
Реализация
Порт TrendDayStrategy от QuantRocket на TQQQ/SQQQ/UVXY с барами USEQ-HOUR длительностью 1. Для каждого ETF сравни цену закрытия бара 14:30 ET с ценой закрытия предыдущей сессии. Открывай длинную позицию, если рост превышает 6%, и короткую, если падение превышает 6%. Размер каждой позиции — 20% капитала (уменьшается, если валовая экспозиция превысит 1.0); вход — рыночным ордером на закрытии бара 14:30, выход — на баре 16:00. Позиции не переносятся на ночь; стоп-лоссов нет.
Результаты верификации
sandbox_timeout: проверка не пройдена (Layer 3 — бэктест в песочнице): дымовой тест превысил лимит времени 300 с на окне примерно в 20000 баров (833 дней по TQQQ.USEQ-1-HOUR-LAST-EXTERNAL). Обычно это означает, что работа на каждом баре растёт вместе с объёмом истории — например, полный повторный просмотр ряда финансирования или дополнительных данных либо создание списка и вызов min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Заранее вычисли массивы временных меток с сортировкой ONCE в __init__ и используй bisect либо кэшируй запросы по временной метке, чтобы затраты на каждый бар составляли O(log n), а не O(n).
Сводка по итогам
Если стратегия с работой O(1) на каждом баре всё ещё превышает лимит времени в песочнице, исследуй инфраструктуру (поиск каталога, нагрузку ввода-вывода на хосте), а не отправляй повторно код без реальных изменений: итерации только с изменением кода не устранят причину на стороне хоста.
После 2 итераций работу прекратили в цикле проверки. Оба раза дымовой тест Layer 3 в песочнице достигал лимита времени 300 с на окне примерно в 20,000 баров, 833 дней, TQQQ.USEQ 1-часового периода (sandbox_timeout). В итерации 2 внесли только микрооптимизации: разработчик считал, что затраты на каждый бар уже имеют сложность O(1), и связал проблему с каталогом и вводом-выводом на хосте.
Порт TrendDayStrategy от QuantRocket на TQQQ/SQQQ/UVXY с барами длительностью 1 часа USEQ: в контрольной точке 14:30 ET открывается длинная позиция, если ETF вырос более чем на 6% относительно закрытия предыдущей сессии, или короткая, если снизился более чем на 6%; в каждую активную позицию вкладывается 20% капитала, выход — на закрытии сессии 16:00.
Метрики бэктеста и оптимизации отсутствуют, поскольку стратегия не прошла проверку. Единственные цифры — непроверенные валовые значения предварительного исследования гипотезы: TQQQ n=45, среднее +0.31%; SQQQ n=44, среднее +0.41%; UVXY n=94, среднее +0.98%.
Анализ
TrendDayStrategy
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.