Стратегии
US Лотерейный спрос на акции крупной капитализации (MAX): извлечение премии за асимметрию — долларово-нейтральный кросс-секционный лонг/шорт по 30 отдельным акциям USEQ, диверсифицированным по секторам; ранжирование MAX, нормированное на волатильность; ребалансировка каждые 21 сессий по DAILY барам (2 основных параметров + стоп от резкого убытка 1)
Итог: Отменено
UsLargeCapMaxLotteryDemandSkewPremiumLS
Сводка по итогам
Гипотеза
coding_stuck_3_timeouts
Реализация
Результаты верификации
sandbox_timeout: проверка не пройдена (слой 3 — бэктест в песочнице): дымовой тест превысил лимит времени 300 с на окне примерно в 20000 баров (2400 дней по AAPL.USEQ-1-DAY-LAST-EXTERNAL). Почти всегда это означает, что работа на каждом баре масштабируется с историей — например, полный пересмотр ряда финансирования/дополнительных данных или повторное создание списка и вызов min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Предварительно отсортируй массивы временных меток ONCE в __init__ и используй bisect либо кэшируй поиск по временной метке, чтобы стоимость обработки бара была O(log n), а не O(n).
Установи n_max=2 или зафиксируй отклонение, чтобы аналитик не оценил результат MAX(3) относительно прогноза MAX(2).
В зарегистрированной гипотезе MAX определена как средняя доходность TWO наибольших дневных доходностей; в коде по умолчанию задано n_max=3. Структура (среднее k наибольших значений / собственная волатильность) совпадает, а n_max ограничена диапазоном [1,5], поэтому отклонение касается величины, но проверяется не та статистика, что была зарегистрирована заранее.
Укажи снижение риска в метаданных запуска или восстанови gross_cap=0.90.
Размер позиций — половина заявленного: гипотеза — около 8% на эмитента и валовая экспозиция около 80%; код использует per_name_pct 0.04 при gross_cap 0.45, то есть около 4% на позицию и валовая экспозиция около 45%. Структура (равные долларовые доли, нулевая долларовая экспозиция, без плеча) соблюдена, но доходность и просадки нельзя сравнивать с зарегистрированными заранее значениями.
Считать и регистрировать отброшенные позиции; если после _execute число позиций в длинной части не равно числу позиций в короткой, закрыть все позиции, а не запускать непарный портфель.
Отправка заявки на вход обёрнута в голый `except Exception: pass`, а позиции размером 0 акций молча пропускаются — из-за этого одна сторона парного портфеля может исчезнуть без записи в журнале, и «долларово-нейтральный» портфель станет направленным до следующей ребалансировки (именно этот класс дефектов пытались устранить итерации 4 и 6).
Исключай позицию, данные по которой устарели более чем на N основных баров, ранжируй оставшиеся по широте данных и записывай исключение в журнал.
Ленивое подключение на барьере выравнивания работает только в одну сторону: подключённая позиция никогда не удаляется, поэтому если по одному из 30 инструментов перестают поступать бары (пропуск в конце ряда, смена названия, делистинг), основной поток блокируется навсегда, и стратегия молча перестаёт торговать.
Допустимо без изменений (ограничено и задокументировано); если расхождение знаков метрик повторится, закрой и открой позицию одним неттинговым ордером.
Позиции со сменой знака закрываются на баре ребалансировки и открываются только на следующей сессии; поэтому при каждой ребалансировке возникает задержка в одну сессию и кратковременный дисбаланс числа позиций.
Анализ
Бэктест: - метрики ненадёжны: несогласованность: знак коэффициента Шарпа 0.04 не совпадает со знаком total_return -17.23% — коэффициент Шарпа рассчитан по ряду mtm_equity_curve, а доходность — по кривой капитала. Оценивай по кривой капитала.
Сводка по итогам
Поведенческая аномалия, описанная для небольших, недорогих акций с высокой идиосинкратической волатильностью, не сохраняется при переносе на выборку из 30 акций мегакапитализации; если сетка параметров до учёта издержек везде отрицательна, дальнейшие итерации кода лишь заканчиваются превышением лимита времени.
Прогон закрыли на этапе написания кода с причиной «coding_stuck_3_timeouts» после 8 итераций, поэтому до анализа бэктеста и проверок аналитика и риск-специалиста дело не дошло; в заметках разработчика по итерации-7 уже рекомендовалось закрыть стратегию после того, как сетка из 108 конфигураций до издержек дала отрицательный результат после -2013 и на контрольном отрезке.
Получайте премию за лотерейный спрос / асимметрию MAX, формируя кросс-секционный лонг/шорт-портфель с нулевой долларовой экспозицией на 30 диверсифицированных по секторам акциях крупных компаний USEQ: продавайте в шорт акции с 5 наивысшими и покупайте акции с 5 наименьшими оценками MAX, нормированными на волатильность, с ребалансировкой каждые 21 торговых сессий по дневным барам.
Для этого запуска не был создан отчёт бэктеста, а оптимизация не запускалась, поэтому проверенных метрик конвейера нет; в собственных заметках кода стратегии указаны пять ранее завершённых бэктестов на той же выборке за 31.5 лет (примерно по 4,600 сделок), и все они убыточны — -51.0% (PF 0.92), -38.9% (PF 0.91), -8.4% (PF 0.986), -17.8% (PF 0.967) и -17.2%; доля прибыльных сделок неизменно равна 50.4-51.3%.
Обзор бэктеста
- Шарп
- 0,04
- Общая доходность
- -17,23%
- Максимальная просадка
- 30,46%
- Всего сделок
- 4714
- Доля прибыльных
- 50,0%
- Профит-фактор
- 0,97
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.