Стратегии
Сигнал чартиста и фундаменталиста (Бу-шо и соавторы 2017, «Блэк был прав»): тренд за 6 месяцев, нормированный на волатильность, минус отклонение логарифма цены за 5 лет; лонг/вне рынка, отдельно по активам в панели из 10-ETF классов активов (USEQ DAILY)
Итог: Отменено
ChartistMinusFundamentalistEtfPanelLongFlat
Сводка по итогам
Стратегия создана, чтобы проверить, добавляет ли «фундаменталистский» компонент возврата к среднему за 5 лет из статьи Бу-шо и соавторов что-либо к трендовому сигналу за 6 месяцев. Торгуется панель из 10-ETF классов активов с позициями лонг/вне рынка на дневных барах USEQ; контрольный вариант использует k=0. Предварительное исследование гипотезы уже указывало, что компонент не поможет (коэффициент Шарпа 0.32 против 0.33 без компонента стоимости). В коде использованы инкрементальные индикаторы O(1) и объединённые еженедельные решения. Несмотря на это, все 3 итераций превысили лимит времени бэктеста уровня 3 в песочнице (более 300 с примерно на 2400 днях данных SPY), и запуск отменили до бэктеста движка, оптимизации или вердикта аналитика.
Гипотеза
Итерация 3 сохраняет прошедшие проверку сигнал и логику определения размера позиции, одновременно объединяя запросы позиций и кэша ордеров один раз за еженедельное панельное решение. Это устраняет повторное сканирование кэша по активам в цикле принятия решений и сохраняет постоянное время обработки бара.
verification_loop: sandbox_timeout: проверка не пройдена (уровень 3 — бэктест в песочнице): дымовой тест превысил лимит времени 300 с на окне около 20000 баров (2400 дней по SPY.USEQ-1-DAY-LAST-EXTERNAL). Почти всегда это означает, что объём работы на бар растёт вместе с историей — например, полный повторный просмотр рядов ставок финансирования или дополнительных данных либо создание списка и вызов min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Предварительно отсортируй массивы временных меток ONCE в __init__ и используй bisect либо кэшируй поиск по временной метке, чтобы стоимость обработки бара была O(log n), а не O(n).
Реализация
Независимые компоненты ETF с позициями лонг/вне рынка используют сигнал: тренд за шесть месяцев, нормированный на волатильность, минус отклонение логарифма цены за пять лет; оценка проводится еженедельно с инкрементальным состоянием индикаторов.
Результаты верификации
sandbox_timeout: проверка не пройдена (уровень 3 — бэктест в песочнице): дымовой тест превысил лимит времени 300 с на окне около 20000 баров (2400 дней по SPY.USEQ-1-DAY-LAST-EXTERNAL). Почти всегда это означает, что объём работы на бар растёт вместе с историей — например, полный повторный просмотр рядов ставок финансирования или дополнительных данных либо создание списка и вызов min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Предварительно отсортируй массивы временных меток ONCE в __init__ и используй bisect либо кэшируй поиск по временной метке, чтобы стоимость обработки бара была O(log n), а не O(n).
Сводка по итогам
Мультиинструментальная панельная стратегия с разогревом в 1260 сессий должна уложиться в бюджет дымового теста песочницы в 300 секунд, прежде чем вообще можно будет проверить исследовательское утверждение. Поэтому измерь время работы со всеми подключёнными потоками инструментов, а не только расчёт индикаторов на бар.
После 3 итераций от неё отказались в цикле проверки. Бэктест уровня 3 в песочнице превысил лимит времени 300 с на окне около 20,000 баров (2400 дней дневных баров SPY.USEQ), поэтому стратегия не дошла до проверки бэктеста, оптимизации, анализа или оценки рисков.
Проверка на опровержение гипотезы Бу-шо и соавторов (2017): торгуй ETF каждого из 10 классов активов (SPY, EFA, EEM, EWJ, TLT, IEF, GLD, SLV, DBC, USO) в длинной или нулевой позиции на дневных барах USEQ. Сигнал: S = T - k*V, где T — тренд за 126 сессий EMA, нормированный на волатильность, а V — логарифмическое отклонение от 1260-сессионного SMA; k=1 задан заранее, решения принимаются еженедельно, контрольный вариант использует k=0.
Бэктест движка и оптимизация не проводились (отчёт о бэктесте пуст, отчёта об оптимизации нет). Предварительное исследование самой гипотезы на данных, доступных на тот момент, дало объединённый коэффициент Шарпа 0.32 при k=1 и 0.33 при k=0 (2006-2026, положительный результат за 15 из 21 лет), то есть компонент стоимости ничего не добавил; предварительная оценка предполагала, что стратегия не пройдёт порог 0.5 OOS.
Анализ
Блэк был прав: цена отличается от стоимости не более чем в 2 раза
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.