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

Стратегии

Библиотека QuantConnect: внутридневной арбитраж между индексными ETF

Итог: Отменено

SpyIvvIntradayQuotientArbitrage

Сводка по итогам

Стратегия пыталась торговать внутридневной арбитраж SPY/IVV по соотношению цен с возвратом к скользящему среднему. Метрики эффективности не получены: проверка Layer 3 превысила лимит времени после трёх итераций. Конвейер остановил её до проверки бэктеста, анализа, оценки рисков и продвижения.

Гипотеза

Реализует порог отношения Marshall-Nguyen-Visaltanachoti / Kakushadze-Serur для двух ETF, отслеживающих S&P 500. Согласно L155, после двух тайм-аутов без метрик я проверил все три изменяемых фактора: (a) конфигурацию — необходим тип бара 1 минут, поскольку бары 1-HOUR (7 за сессию) не позволяют выразить внутридневное расхождение длительностью в несколько минут; (b) каталог — SPY.USEQ-1-MINUTE — это 193 неуплотнённых часовых фрагментов Parquet против 10 уплотнённых фрагментов IVV, а средняя нагрузка хоста — около 50-60; профилирование итерации -2 показало, что 100% времени уходит на поиск файлов в ParquetDataCatalog.query; (c) затраты на бар — уже O(1): инкрементальная сумма deque, целочисленный счётчик времени ET, без сканирования истории. Удалён только избыточный поиск в кэше. Я сомневаюсь в гипотезе: расхождения отношения SPY/IVV около 2 б.п. меньше спреда туда и обратно плюс влияние на четыре исполнения (~2-4 б.п.).

verification_loop: sandbox_timeout: проверка не пройдена (Layer 3 — бэктест в песочнице): дымовой тест превысил лимит времени 300 с на окне примерно в 20000 баров (30 дней по SPY.USEQ-1-MINUTE-LAST-EXTERNAL). Почти всегда это означает, что объём работы на бар растёт вместе с историей — например, полное повторное сканирование ряда финансирования/дополнительных данных или пересоздание списка с вызовом min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Заранее подготовь отсортированные массивы временных меток ONCE в __init__ и используй bisect либо кэшируй поиск по временной метке, чтобы затраты на бар составляли O(log n), а не O(n).

Реализация

Внутридневной арбитраж SPY/IVV по соотношению цен на барах 1 минут USEQ. Сигнал — отклонение SPY/IVV в б.п. от скользящего среднего за 30 баров той же сессии. Выше +entry_bps: короткая позиция по SPY / длинная по IVV; ниже -entry_bps: наоборот, целые акции с равными суммами в долларах, по 45% капитала на каждую сторону (90% общий объём, в пределах 2x Reg-T). Выход при возврате к среднему в пределах exit_bps, через 30 минут или в 15:55 ET.

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

sandbox_timeout: проверка не пройдена (Layer 3 — бэктест в песочнице): дымовой тест превысил лимит времени 300 с на окне примерно в 20000 баров (30 дней по SPY.USEQ-1-MINUTE-LAST-EXTERNAL). Почти всегда это означает, что объём работы на бар растёт вместе с историей — например, полное повторное сканирование ряда финансирования/дополнительных данных или пересоздание списка с вызовом min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Заранее подготовь отсортированные массивы временных меток ONCE в __init__ и используй bisect либо кэшируй поиск по временной метке, чтобы затраты на бар составляли O(log n), а не O(n).

Сводка по итогам

Ограничивай доступ к данным на каждом баре, чтобы время проверки не росло вместе с историей.

Стратегию остановили после превышения лимита песочницы в 300 секунд на окне примерно в 20,000 баров. До следующих этапов конвейера дело не дошло.

Стратегия пыталась торговать внутридневной арбитраж SPY/IVV по соотношению цен, используя отклонения от соотношения за ту же сессию и согласованные противоположные позиции.

Метрики бэктеста и оптимизации не получены. Проверка достигла трёх итераций, но бэктест в песочнице Layer 3 не завершился.

Анализ

Внутридневной арбитраж между индексными ETF

Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.