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

Стратегии

Порт 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. Разработчик отнёс превышение времени к поиску файлов каталога при высокой нагрузке ввода-вывода на хосте, а не к логике стратегии. Запуск прекратили в цикле проверки, так и не дойдя до бэктеста, оптимизации, аналитической или риск-проверки; преимущество стратегии так и не измерили.

Гипотеза

Порт открытой стратегии Moonshot от QuantRocket «TrendDayStrategy» (код «trend-day», https://github.com/quantrocket-codeload/trend-day, Apache-2.0, автор QuantRocket LLC, которому принадлежит авторство). ORIGINAL RULES, точно в исходном виде: вселенная «leveraged-etf» на данных с интервалом US минут по 1 акциям; DB_TIMES 14:00 и 15:59; MIN_PCT_CHANGE = 0.06. Каждый день: доходность = (OPEN бара 14:00 - CLOSE бара 15:59 предыдущей сессии) / цена закрытия предыдущей сессии. Сигнал +1 (длинная позиция), если……Показать большеСвернуть

Порт открытой стратегии Moonshot от QuantRocket «TrendDayStrategy» (код «trend-day», https://github.com/quantrocket-codeload/trend-day, Apache-2.0, автор QuantRocket LLC, которому принадлежит авторство). ORIGINAL RULES, точно в исходном виде: вселенная «leveraged-etf» на данных с интервалом US минут по 1 акциям; DB_TIMES 14:00 и 15:59; MIN_PCT_CHANGE = 0.06. Каждый день: доходность = (OPEN бара 14:00 - CLOSE бара 15:59 предыдущей сессии) / цена закрытия предыдущей сессии. Сигнал +1 (длинная позиция), если доходность > +0.06, -1 (короткая позиция), если доходность < -0.06, иначе 0. Веса: allocate_fixed_weights_capped(сигналы, 0.20, cap=1.0), поэтому на каждую активную позицию приходится 20% капитала, а все веса пропорционально уменьшаются, если валовая экспозиция превысит 100%. Позиции открываются в день сигнала лимитной заявкой MARKET по цене 14:01 (цена закрытия бара 14:00 служит ценой входа) и закрываются рыночной заявкой на закрытии (MOC) по цене закрытия сессии 16:00. Стоп-лоссов, тейк-профита и переноса позиций на ночь нет. В исходной стратегии комиссия составляла $0.005 за акцию, а проскальзывание — 3 б.п.; в нашей модели используется USEQ, где комиссия нулевая, а спред и влияние на цену моделируются. PLATFORM ADAPTATION, без прикрас: (1) Вселенная включает 3 ETF с плечом или волатильностью, доступных в нашей вселенной и каталоге USEQ: TQQQ.USEQ, SQQQ.USEQ и UVXY.USEQ. Другие ETF с плечом, такие как SOXL, SPXL и TNA, не собираются. (2) Таймфрейм — 1-HOUR, а не 1-минутный. USEQ 1-минутные бары начинаются 2026-08-06, это около 38 сессий, что дало бы меньше 10 сигналов при пороге 6%. USEQ бары 1-HOUR охватывают период с 2024-08-14 по настоящее время, около 530 сессий. Часовые бары Yahoo имеют отметку времени закрытия 10:30, 11:30, 12:30, 13:30, 14:30, 15:30 и 16:00 ET, поэтому ни один бар не закрывается в 14:00. Следовательно, контрольная точка — CLOSE бара с отметкой времени 14:30 ET, на 30 минут позже исходного 14:00, а удержание длится с 14:30 по 16:00, а не с 14:01 по 16:00. В дни сокращённых сессий (закрытие в 13:00) бара 14:30 нет, поэтому сделка не совершается; это совпадает с исходной стратегией, поскольку в сокращённые дни отсутствует её бар 14:00. (3) Цена закрытия предыдущей сессии — это цена закрытия последнего бара предыдущей сессии (с отметкой времени 16:00 ET или 13:00 в сокращённые дни), что эквивалентно закрытию бара 15:59 в исходной стратегии. Размер позиции: номинал 20% от текущего капитала на каждый активный инструмент, как и в исходной стратегии. При 3 инструментах валовая экспозиция не превышает 60%, поэтому лимит 1.0 не срабатывает, но он всё равно реализован. Разрешены длинные и короткие позиции; USEQ — маржинальный счёт Reg-T, работающий с плечом 1.0. Обрати внимание: TQQQ и SQQQ — зеркальные инструменты, поэтому сильный день Nasdaq обычно даёт сигнал по обоим: длинную позицию по одному и короткую по другому. По сути, это одна и та же ставка на два инструмента, с чистой экспозицией около 40% капитала в направлении Nasdaq. Исходная стратегия делает то же самое, и здесь это сохранено без изменений. Предварительное исследование по нашему каталогу 1h (валовые показатели, от закрытия до закрытия, без издержек), порог 6%, доходность в направлении сигнала с 14:30 по 16:00: TQQQ n=45, среднее +0.31%, доля прибыльных сделок 64%; SQQQ n=44, среднее +0.41%, доля прибыльных сделок 66%; UVXY n=94, среднее +0.98%, доля прибыльных сделок 70%. Всего это около 183 позиционных дней за примерно 2 лет. Считай эти числа непроверенными до запуска нашего бэктеста.

Точный порт торговой стратегии 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. Позиции не переносятся на ночь; стоп-лоссов нет.

Итерация 2 не меняет правила. Тайм-аут в песочнице вызван хостом, а не стратегией: работа на каждом баре уже имела сложность O(1), использовала только скалярное состояние, без буферов истории и дополнительных данных. Локальный запуск кода итерации-1 на окне песочницы выполнялся примерно при 9% CPU более 10 минут. Дочерний процесс бэктеста застрял при поиске файлов каталога под нагрузкой ввода-вывода на хосте около 65% и средней загрузке около 87. Были внесены два небольших ускорения: поиск индексов инструментов и……Показать большеСвернуть

Итерация 2 не меняет правила. Тайм-аут в песочнице вызван хостом, а не стратегией: работа на каждом баре уже имела сложность O(1), использовала только скалярное состояние, без буферов истории и дополнительных данных. Локальный запуск кода итерации-1 на окне песочницы выполнялся примерно при 9% CPU более 10 минут. Дочерний процесс бэктеста застрял при поиске файлов каталога под нагрузкой ввода-вывода на хосте около 65% и средней загрузке около 87. Были внесены два небольших ускорения: поиск индексов инструментов и InstrumentId теперь выполняется один раз, а смещение ET UTC кэшируется на каждый день UTC вместо пересоздания дат и времени 4 на каждом баре. Кэшированное смещение сверили с zoneinfo America/New_York на 20 тыс. временных меток сессий; расхождений: 0. Логика сигнала, входа и выхода, размер позиции и параметры не изменились. Адаптации платформы из итерации 1 по-прежнему действуют: контрольная точка 14:30 ET на часовой сетке Yahoo и набор инструментов 3-ETF. Если снова возникнет тайм-аут, причина будет в каталоге и нагрузке на хост; нужна повторная проверка инфраструктуры, а не правка кода.

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

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