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

Стратегии

KO/PEP Бэктест стратегии: возврат спреда коинтеграции лог-цен, скользящий коэффициент хеджирования OLS, вход при |остаток| > 2 сигма, выход внутри 1 сигма, длинная и короткая позиции с нулевой долларовой экспозицией на барах USEQ DAILY | Stratmill

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

KoPepLogCointegrationSpreadReversion

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

Стратегия тестировала возврат к среднему спреда лог-цен KO/PEP с использованием скользящего OLS и долларово-нейтральных позиций USEQ. Она прошла три итерации, но проверка Layer-3 завершилась по тайм-ауту до расчёта показателей эффективности. Запуск прервали до анализа результатов бэктеста, оптимизации, проверки аналитиком или оценки риска.

Гипотеза

Это единственное конкретное правило из описания TradeMan для FMZ «Neutral-Hedge Statistical Arbitrage (Pure-Alpha)» (раздел 3.7); оно выделено из сканера корзин по всему рынку и применено к одной экономически связанной паре на бирже USEQ без комиссий. Правило: оценивать ln(Y) = a + b*ln(X) + c; при sigma = std(c) продавать Y и покупать X, когда c > lambda*sigma, совершать обратные сделки, когда c < -lambda*sigma, и закрывать позиции, когда c возвращается внутрь диапазона [-0.5*lambda*sigma, +0.5*lambda*sigma]. Y……Показать большеСвернуть

Это единственное конкретное правило из описания TradeMan для FMZ «Neutral-Hedge Statistical Arbitrage (Pure-Alpha)» (раздел 3.7); оно выделено из сканера корзин по всему рынку и применено к одной экономически связанной паре на бирже USEQ без комиссий. Правило: оценивать ln(Y) = a + b*ln(X) + c; при sigma = std(c) продавать Y и покупать X, когда c > lambda*sigma, совершать обратные сделки, когда c < -lambda*sigma, и закрывать позиции, когда c возвращается внутрь диапазона [-0.5*lambda*sigma, +0.5*lambda*sigma]. Y = PEP.USEQ, X = KO.USEQ. Пара выбрана заранее на основании экономических факторов, а не по результатам бэктеста: два глобальных бренда напитков и снеков с одинаковой подверженностью фактору товаров повседневного спроса, одинаковыми затратами на сырьё, одинаковым эффектом FX валютной трансляции и одинаковой чувствительностью к ставкам. Она считается классическим примером коинтеграции задолго до начала вневыборочного периода этого набора данных. Все оценки выполняются с учётом доступности данных на тот момент: при каждом дневном закрытии a и b переоцениваются методом OLS на логарифмах цен закрытия за последние N=250 сессий, а sigma — это std остатков в этом окне. Используются только данные текущего бара и более ранние. Номинал позиций в обоих плечах нейтрален по долларовой стоимости: на каждое плечо приходится 50% собственного капитала (валовая экспозиция 1.0x, значительно ниже лимита Reg-T 2x). Бета-взвешивание применяется в сигнале, а не при определении размера позиций, чтобы оставить только 2 параметров. Сканирование всего рынка, ранжирование по Хёрсту, исполнение по модели мейкер/тейкер и части про «арбитраж индекса» из исходного описания NOT перенесены: описание не содержит для них правил и кода, а сканирование множества инструментов — как раз тот подход, который здесь превышает время выполнения (L173). Тест Энгла—Грейнджера ADF и фильтр Хёрста из исходника заранее зарегистрированы как вариант B для проверки устойчивости (SEPARATE) (торговать только тогда, когда p-значение ADF остаточного ряда за последние -250 периодов меньше 0.10); результаты оцениваются отдельно. Это не часть основного утверждения (L130). Ожидаемая доля сессий без открытых позиций — около 60-70%. Почему это не противоречит выводам: L137 запрещает нейтральные стратегии с несколькими позициями BOOKS (корзины и перенос позиций между площадками). Здесь одна пара на бирже без комиссий, где дополнительное плечо стоит около 0.02-0.05% вместо 0.10-0.20%. В разделе промпта о фондовом рынке среди проверенных архетипов указаны «пары внутри сектора (стиль KO/PEP)». USEQ занимает 2.5% корпуса, а long_short — 14.7%, поэтому этот пример пополняет обе недостаточно представленные категории. История дневных данных (десятилетия) позволяет провести около 150-250 полных сделок за весь период; для криптовалютных пар в распоряжении обычно лишь десятки.

Итерация 3 меняет только показатели. Скользящий OLS уже рассчитывался инкрементально в итерации 2: O(1) на бар, с повторной синхронизацией в среднем каждые 250 баров на примерно 1650 дневных барах, поэтому вычисления стратегии занимают миллисекунды. Повторный тайм-аут в 300 с, вероятнее всего, вызван средой: средняя загрузка хоста при проверке составляла около 83. В базовом шаблоне нет пути рекурсии (проверены _submit_exit, _submit_exit_position и _submit_entry_instrument). Единственная оставшаяся работа на каждом баре — два запроса cache.positions_open для очистки осиротевшей стороны пары — теперь выполняется только при удержании пары (_held != 0). Сигнал, полосы входа/выхода, размер позиции и конфигурация не изменились, поэтому статусы проверок Layers 1-2 остаются зелёными. Если Layer 3 снова завершится по тайм-ауту, причина будет на стороне каталога/загрузки (USEQ загрузки данных), а не в коде стратегии.

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

Реализация

Возврат спреда коинтеграции лог-цен PEP/KO на дневных барах USEQ. На каждой сессии OLS ln(PEP)=a+b*ln(KO)+c переоценивается с учётом только доступных на тот момент данных за последние 250 синхронизированных сессий, используя накапливаемые суммы O(1). z=c/std(c). Вход при |z|>2: короткая позиция по PEP/длинная по KO, если z>2; длинная по PEP/короткая по KO, если z<-2. Выход, когда остаток возвращается внутрь +/-1 сигма. Долларовая нейтральность: 50% капитала на каждую сторону, целое число акций, общий объём 1.0x.

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

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

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

В следующих итерациях вся работа на каждом баре должна оставаться независимой от истории и укладываться в лимит времени песочницы.

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

Стратегия пыталась торговать возврат к среднему скользящих остатков лог-цен OLS между PEP.USEQ и KO.USEQ с долларово-нейтральными позициями в обоих инструментах.

Доходность, коэффициент Шарпа и число сделок неизвестны, поскольку отчёт о бэктесте не был создан. Проверка дошла до трёх итераций, но не завершила бэктест в песочнице Layer-3.

Анализ

【Новое: нейтральный хедж, статистический арбитраж】(Pure-Alpha, мечта)|【Neutral-Hedge Statistical Arbitrage New】(Pure-Alpha dream version)

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