Стратегии
USEQ Ротация моментума по классам активов: удерживать топ--3 ETF из 5 (SPY/EFA/EEM/IEF/GLD) по доходности за 12 месяцев, равные веса, ежемесячная ребалансировка, дневные бары, только длинные позиции, без плеча
Итог: Отменено
UseqAssetClassTop3MomentumRotation
Сводка по итогам
Гипотеза предполагала 20-летний USEQ тест ротации по моментуму классов активов по принципу топ--3 из -5 (SPY/EFA/EEM/IEF/GLD) с ежемесячной ребалансировкой, чтобы добавить в исследовательский корпус механизм, не связанный с криптовалютами. Разработчик подготовил частичную реализацию с ранжированием, равными весами позиций и дополнительным фильтром абсолютного моментума SHY. Этап кодирования трижды завершился по таймауту, а запуск был прекращен со статусом «coding_stuck_3_timeouts». Бэктест, оптимизация и заключение аналитика не проводились, поэтому сама идея остается непроверенной.
Гипотеза
Итерация 2: единственное изменение — исправлен сбой уровня -2. _pending() вызывал self.cache.orders_inflight, которого нет в синтетическом макете кеша. Теперь он всегда использует orders_open и вызывает orders_inflight только при наличии этого метода в кеше (он есть в настоящем кеше NautilusTrader). Сигнал, ребалансировка, размер позиции и конфигурация не изменены. Валовая экспозиция не превышает 0.97x капитала: продажи происходят в одну сессию, покупки — в более позднюю.
coding_stuck_3_timeouts
Реализация
Ежемесячная ротация, привязанная к календарю: переход в топ--3 из SPY/EFA/EEM/IEF/GLD по доходности за предыдущие 252 сессий; равный вес 1/3 для каждой позиции, целые акции, только длинные позиции, без плеча, дневные бары USEQ. В предварительно зарегистрированном варианте (use_abs_filter=True) слоты с отрицательным моментумом переводятся в SHY.
История итераций
Проверка не пройдена (уровень 2 — синтетические сценарии): Использованы параметры: ['top_n', 'cash_symbol', 'min_notional', 'notional_pct', '_param_bounds', 'abs_threshold', 'lookback_bars', 'use_abs_filter'] Убедитесь, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: AttributeError: у '_MockCache' нет атрибута 'orders_inflight' (временная метка бара: 1735704780000) - steady_downtrend: AttributeError: у '_MockCache' нет атрибута 'orders_inflight' (временная метка бара: 1735704780000) - flat_ranging: AttributeError: у '_MockCache' нет атрибута 'orders_inflight' (временная метка бара: 1735704780000) - volatility_spike: AttributeError: у '_MockCache' нет атрибута 'orders_inflight' (временная метка бара: 1735704780000) - zero_volume: AttributeError: у '_MockCache' нет атрибута 'orders_inflight' (временная метка бара: 1735704780000) - price_gap: AttributeError: у '_MockCache' нет атрибута 'orders_inflight' (временная метка бара: 1735704780000)
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).
Сводка по итогам
Код ежедневной ротации с несколькими позициями, сохранением состояния слотов и поэтапным исполнением выходов и входов трижды не уложился в лимит времени на программирование. Поэтому следующую попытку следует начать с более простой минимальной реализации (например, только с основного варианта), которую можно завершить в отведённое время.
Запуск был прекращён на этапе программирования по причине «coding_stuck_3_timeouts» после 3 итераций. До проверки, анализа бэктеста, оптимизации, анализа аналитиком или оценки рисков он не дошёл.
Ежемесячная ротация только в длинные позиции и без плеча на USEQ: пять ETF классов активов (SPY, EFA, EEM, IEF, GLD) ранжируются по доходности за 12 месяцев, а позиции в топ-3 удерживаются с равным весом на основе временного и межрыночного моментума (Asness-Moskowitz-Pedersen 2013); в предварительно зарегистрированном варианте любое название из топ--3 с отрицательной доходностью переводится в SHY.
Данных о результативности нет: отчёт бэктеста пуст, оптимизация не запускалась, показатели Шарпа, доходности и числа сделок отсутствуют.
Анализ
Моментум классов активов
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.