Стратегии
Avellaneda-Lee: реверсия остаточного s-score в одной паре сектора ETF: XOM против XLE, хеджирование по бете, канонические фиксированные пороги, без позиции около 55% времени (USEQ DAILY, нулевая комиссия, лонг-шорт)
Итог: Отменено
XomXleAvellanedaLeeSScorePair
Сводка по итогам
Стратегия пыталась ежедневно проводить XOM/XLE статистический арбитраж, торгуя экстремумами остаточного s-score для ETF-факторной модели и сохраняя хеджирование по бете. Зафиксированного результата бэктеста нет, поскольку дымовой тест в песочнице на уровне Layer 3 превысил лимит в 300 секунд примерно на 20,000 барах. После трёх итераций проверка завершилась по тайм-ауту, и до последующих этапов дело не дошло.
Гипотеза
Исправление производительности итерации 3: удалены выполнявшиеся для каждого бара запросы сверки позиций и ордеров по основному активу и хеджу из calculate_signal. Управление хеджем по-прежнему привязано к входу и выходам по сигналу, а скользящая подгонка ограничена 60 наблюдениями на бар. Это сохраняет ранее пройденные статический и синтетический уровни и устраняет дорогую работу с кэшем, вызвавшую тайм-аут на уровне Layer-3.
verification_loop: sandbox_timeout: проверка не пройдена (уровень 3 — бэктест в песочнице): дымовой тест превысил лимит времени 300 с на окне примерно в 20000 баров (2400 дней из XOM.USEQ-1-DAY-LAST-EXTERNAL). Почти всегда это означает, что объём работы на бар растёт вместе с историей — например, повторно просматривается полный ряд ставок финансирования или дополнительных данных либо внутри calculate_signal()/on_bar() на каждом баре пересобирается список и вызывается min()/sorted(). Предварительно вычислите отсортированные массивы временных меток ONCE в __init__ и используйте bisect либо кэшируйте результаты запросов по временной метке, чтобы стоимость обработки бара составляла O(log n), а не O(n).
Реализация
Торговля остаточным s-score Avellaneda-Lee между XOM и XLE с помощью регрессии доходности за скользящее окно в 60 сессий, подгонки кумулятивного остатка OU, построения бета-нейтральной пары лонг/шорт и канонических порогов входа, выхода и периода полураспада.
Результаты верификации
sandbox_timeout: проверка не пройдена (уровень 3 — бэктест в песочнице): дымовой тест превысил лимит времени 300 с на окне примерно в 20000 баров (2400 дней из XOM.USEQ-1-DAY-LAST-EXTERNAL). Почти всегда это означает, что объём работы на бар растёт вместе с историей — например, повторно просматривается полный ряд ставок финансирования или дополнительных данных либо внутри calculate_signal()/on_bar() на каждом баре пересобирается список и вызывается min()/sorted(). Предварительно вычислите отсортированные массивы временных меток ONCE в __init__ и используйте bisect либо кэшируйте результаты запросов по временной метке, чтобы стоимость обработки бара составляла O(log n), а не O(n).
Сводка по итогам
Расчёты для каждого бара не должны повторно просматривать полные дополнительные ряды или пересобирать и сортировать данные; результаты поиска следует предварительно вычислять или кэшировать.
Стратегию оставили после трёх итераций, когда проверка завершилась тайм-аутом в песочнице. До последующих этапов конвейера дело не дошло.
Стратегия пыталась торговать возвращающиеся к среднему остатки с хеджированием по бете между XOM и XLE, используя пороги s-score модели Avellaneda-Lee с ETF факторами на дневных данных USEQ.
Метрики бэктеста не были зафиксированы, поскольку проверка остановилась во время бэктеста в песочнице. Дымовой тест превысил лимит в 300 секунд примерно на 20,000 барах.
Анализ
Арбитраж vs фактор-трейдинг: бэктестинг | Stratmill
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.