Стратегии
Квант-трейдинг GDX–GLD: точный перевод стратегии QuantRocket с дневными весами Йохансена и полосами Боллинджера, USEQ | Stratmill
Итог: Отменено
GdxGldJohansenBollingerPairs
Сводка по итогам
GdxGldJohansenBollingerPairs стремилась как можно точнее перенести стратегию парной торговли Йохансена и Боллинджера GDX/GLD на площадку USEQ, повторно реализовав coint_johansen из statsmodels на numpy, поскольку statsmodels недоступен в песочнице. За 3 итераций дымовой тест слоя 3 в песочнице снова и снова превышал лимит в 300 секунд на дневном окне GDX примерно в 20,000 баров. Запуск остановили в этом цикле проверки. Бэктест, оптимизация и оценка аналитика не проводились, поэтому неизвестно, есть ли у стратегии преимущество.
Гипотеза
Переведи исполняемый класс GDX_GLD_Pair QuantRocket, сохранив ежедневные скользящие веса Йохансена, полосы в одно стандартное отклонение, независимые устойчивые состояния длинного и короткого сигналов, ежедневный пересчёт целевых весов и исполнение при открытии следующей сессии. Используй GDX.USEQ как основной инструмент, а GLD.USEQ — как вторую торговую позицию; для обоих возьми бары 1-DAY-LAST-EXTERNAL. Исходные значения по умолчанию: LOOKBACK_WINDOW=20, BBAND_STD=1, DB_FIELDS=['Close','Open']; класс выбирает GDX и GLD из usstock-1d. Исходная комиссия USStockCommission составляет $0.005 за акцию; замени её нулевыми комиссиями платформы USEQ и моделируемыми спредом и влиянием на цену, явно указав разницу. Не заявляй о прибыльности исходной стратегии и не добавляй фильтры, стоп-лоссы, тесты значимости коинтеграции или оптимизацию параметров.
Явная просьба о точном переводе исходника определяет инструменты и механизм. Эта пара добавляет длинную и короткую позиции по двум акциям в корпус, где преобладают стратегии только с длинными позициями на Binance. Она не закрывает квоты Hyperliquid или торговли между площадками. Данные о концентрации корпуса отсутствовали, поэтому оценить долю исследований по отдельным инструментам нельзя. В отличие от предыдущего предложения по акциям разных классов, эта стратегия торгует акциями золотодобытчиков против золота в слитках и ежедневно пересчитывает веса по Йохансену; однако её экономика по-прежнему не подтверждена.
verification_loop: sandbox_timeout: проверка не пройдена (слой 3 — бэктест в песочнице): дымовой тест превысил лимит времени 300 с на окне примерно в 20000 баров (2400 дней по GDX.USEQ-1-DAY-LAST-EXTERNAL). Почти всегда это означает, что объём работы на каждом баре растёт вместе с длиной истории: например, полный перебор рядов финансирования и дополнительных данных либо повторное создание списка с вызовом min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Заранее вычисляй отсортированные массивы временных меток ONCE в __init__ и используй bisect либо кэшируй результаты поиска по временной метке, чтобы затраты на бар были O(log n), а не O(n).
Реализация
Точный перевод Stratmill подкласса QuantRocket GDX_GLD_Pair (PairsStrategy, Apache-2.0). На каждой сессии модель оценивает вектор хеджирования Йохансена (det_order=0, k_ar_diff=1) по ценам закрытия за предыдущие 20 сессий для [GLD, GDX]. Для сегодняшнего спреда рассчитываются полосы Боллинджера за 20 сессий с шириной 1 сигм (ddof=1). Независимые сохраняющиеся состояния длинной и короткой позиции по спреду возникают при выходе за полосу и закрываются при возвращении к среднему. Целевые веса равны сигналу × хеджированию × цене закрытия и нормируются до валовой экспозиции 1x. Через одну сессию обе позиции ребалансируются до целевых значений в целых акциях.
Результаты верификации
sandbox_timeout: проверка не пройдена (слой 3 — бэктест в песочнице): дымовой тест превысил лимит времени 300 с на окне примерно в 20000 баров (2400 дней по GDX.USEQ-1-DAY-LAST-EXTERNAL). Почти всегда это означает, что объём работы на каждом баре растёт вместе с длиной истории: например, полный перебор рядов финансирования и дополнительных данных либо повторное создание списка с вызовом min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Заранее вычисляй отсортированные массивы временных меток ONCE в __init__ и используй bisect либо кэшируй результаты поиска по временной метке, чтобы затраты на бар были O(log n), а не O(n).
История итераций
Проверка не пройдена (слой 1.5 — согласованность гипотезы и конфигурации) [class=hypothesis_mismatch]: - optimization_plan фиксирует плечо на уровне 1.0
Сводка по итогам
При скользящем расчёте Йохансена матрицы пересоздаются и обращаются либо раскладываются на каждом баре. Чтобы такой расчёт на чистом numpy укладывался в лимит времени песочницы, затраты на бар должны быть низкими: например, кэшируй результаты по временным меткам и избегай повторного просмотра буферов.
Запуск остановили после 3 итераций цикла проверки. Бэктест в песочнице слоя 3 превысил лимит в 300 с на окне примерно в 20,000 баров (2400 дней по GDX.USEQ дневных баров), поэтому проверка бэктеста, оптимизация, проверка аналитиком и проверка рисков не проводились.
Это был прямой перенос стратегии парной торговли GDX/GLD на дневные бары USEQ. Каждый день рассчитывалось отношение хеджирования по тесту Йохансена на последних 20 ценах закрытия; спред торговался относительно полос Боллинджера шириной в одно стандартное отклонение, а целевые веса восстанавливались через одну сессию. Комиссии были нулевыми, спред и влияние на цену моделировались.
Данных о доходности нет: отчёты о бэктесте и оптимизации, а также число сделок не получены, поскольку стратегия не прошла проверку.
Анализ
PairsStrategy
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.