Стратегии
SPY Откат на бычьем рынке: контртрендовая стратегия (точный перенос pinkfish «ac-countertrend» Farrell Aultman) — только длинные позиции, весь капитал, DAILY баров, SPY.USEQ
Итог: Отменено
SpyAcCountertrendPullback
Сводка по итогам
SpyAcCountertrendPullback перенёс стратегию покупки просадок на бычьем рынке «ac-countertrend» из pinkfish на дневные SPY.USEQ, без изменений сохранив правила, настройки по умолчанию и особенность расчёта отката в исходнике. Было выполнено 3 итераций, но тестовая среда Layer 3 неоднократно превышала лимит времени 300 с. В последней версии обновления для каждого бара уже выполнялись за O(1), а разработчик отметил, что время, по всей видимости, тратилось вне кода стратегии. Запуск прервали в цикле верификации до получения метрик бэктеста, поэтому сама гипотеза так и не была проверена.
Гипотеза
В итерации 3 исправлена вторая ошибка Layer-3 sandbox_timeout. Правила, индикаторы и параметры не менялись, выходные сигналы численно совпадают с v2 (максимальное относительное различие около 3e-15 на 3,000 тестовых барах). Диагностика урока 155(c): версия v2 уже обрабатывала каждый бар за O(1). В окне всего около 1,650 дневных баров — при нагрузке хоста около 50 на обработку стратегии уйдёт меньше 1 с. Значит, реальное время, скорее всего, тратится на каталог/движок вне стратегии (тот же вывод, что и при диагностике тайм-аута Eth/Bnb v3). Тем не менее обработка каждого бара стала ещё дешевле: скользящее стандартное отклонение доходности и выход SMA используют накопительные суммы вместо копирования списков и повторного суммирования на каждом баре. Скользящий максимум close за 20 баров вычисляется перебором дека из фиксированных 20 элементов, а EMA задаются начальным значением один раз, затем обновляются рекурсивно. Если запуск снова завершится по тайм-ауту, причина — работа песочницы или нагрузка на хост, а не код стратегии.
verification_loop: sandbox_timeout: верификация не пройдена (Layer 3 — бэктест в песочнице): дымовой тест превысил лимит реального времени 300 с на окне примерно в 20000 баров (2400 дней по SPY.USEQ-1-DAY-LAST-EXTERNAL). Почти всегда это означает, что работа на каждом баре растёт вместе с длиной истории — например, повторное сканирование всего ряда funding/дополнительных данных или создание списка и вызов min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Заранее вычисли отсортированные массивы временных меток ONCE в __init__ и используй bisect либо кэшируй результаты поиска по временной метке, чтобы стоимость обработки бара была O(log n), а не O(n).
Реализация
Точный перенос pinkfish «ac-countertrend» в Stratmill (Farrell Aultman, MIT) на дневных барах SPY.USEQ. В бычьем режиме (SMA, похожая на TA-Lib, с начальным значением по EMA40 > EMA80) покупает на весь капитал (целые акции, плечо 1), когда pullback = (максимум закрытия за 20 дней, включая текущий бар - close) / выборочное стандартное отклонение pct_change за 40 баров >= 3.0 (сохранена особенность исходника: доллары делятся на безразмерную величину). Выход при смене режима на медвежий, close > SMA20, close < entry*(1-0.15) или после 20 баров в позиции.
Результаты верификации
sandbox_timeout: верификация не пройдена (Layer 3 — бэктест в песочнице): дымовой тест превысил лимит реального времени 300 с на окне примерно в 20000 баров (2400 дней по SPY.USEQ-1-DAY-LAST-EXTERNAL). Почти всегда это означает, что работа на каждом баре растёт вместе с длиной истории — например, повторное сканирование всего ряда funding/дополнительных данных или создание списка и вызов min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Заранее вычисли отсортированные массивы временных меток ONCE в __init__ и используй bisect либо кэшируй результаты поиска по временной метке, чтобы стоимость обработки бара была O(log n), а не O(n).
Сводка по итогам
Разработчик уже сократил работу на каждом баре до O(1), используя накопительные суммы и декы фиксированного размера. В его заметках указано, что время тратилось вне кода стратегии — на каталог/движок при высокой нагрузке на хост. Поэтому повторные тайм-ауты песочницы на USEQ дневных барах следует проверять как проблему инфраструктуры, а не пытаться решить новыми переписываниями кода.
Запуск прервали в цикле верификации после 3 итераций. Решающее препятствие: бэктест в песочнице Layer 3 превысил лимит реального времени 300 с на дневном окне 20,000 баров (~2,400 дней) по SPY.USEQ. До проверки бэктеста, оптимизации, анализа аналитиком и оценки рисков дело не дошло.
Точный перенос стратегии Farrell Aultman «ac-countertrend» из pinkfish на дневные SPY.USEQ: только длинные позиции, весь капитал; стратегия покупает просадки ниже максимума закрытия за 20 дней, когда EMA(40) > EMA(80), и выходит при закрытии выше SMA(20), срабатывании стопа 15%, смене режима или по истечении 20 баров. Особенность исходного расчёта «pullback»: долларовое значение делится на стандартное отклонение доходности — намеренно сохранена.
Данных о результативности нет: отчёт бэктеста пуст, отчёта об оптимизации нет, доходность, коэффициент Шарпа и число сделок не рассчитывались.
Анализ
ac-countertrend
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.