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

Стратегии

Отскок при возобновлении потока Stock Connect: корзина крупных акций Гонконга (HKEQ дневных баров — покупай 10 H-акций с наибольшей долей у южных инвесторов на последней сессии HK, когда материковый Stock Connect SUSPENDED из-за китайского государственного праздника; удерживай позиции до возобновления южного потока и выходи на 3-й сессии после возобновления работы Connect; контроль активности материковой сессии считывается из потока баров CNEQ, параметры 2)

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

StockConnectClosureFlowReboundHkeq

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

StockConnectClosureFlowReboundHkeq стал первым экспериментом фабрики на акциях Гонконга: стратегия покупала корзину из 10 бумаг с высокой долей южного владения на последней HK сессии каждого материкового праздничного закрытия и удерживала её до возобновления приостановленного потока Stock Connect, используя календарь закрытий с данными на момент времени. Механизм реализован точно: все 350 позиции длинные, входы — в последний будний день закрытия материкового рынка, выходы — на 3-й сессии после возобновления.……Показать большеСвернуть

StockConnectClosureFlowReboundHkeq стал первым экспериментом фабрики на акциях Гонконга: стратегия покупала корзину из 10 бумаг с высокой долей южного владения на последней HK сессии каждого материкового праздничного закрытия и удерживала её до возобновления приостановленного потока Stock Connect, используя календарь закрытий с данными на момент времени. Механизм реализован точно: все 350 позиции длинные, входы — в последний будний день закрытия материкового рынка, выходы — на 3-й сессии после возобновления. Первоначальные валовые показатели бэктеста выглядели чисто (12.61% общей доходности, PF 1.28, 58.6% прибыльных сделок), поэтому при проверке бэктеста стратегия получила вердикт «оптимизировать». Затем оптимизация выявила статистические проблемы: IS 0.910 против OOS 0.493, PBO 0.656, дефлированный коэффициент Шарпа 0.0157, провал проверки программы FDR и показатель OOS, обусловленный одним окном; при этом 350 сделок свелись к 35 независимым событиям с t = 0.90. Аналитик отказался от стратегии после одной итерации, отметив, что комиссии HKEQ фактически не списывались в бэктесте, а вычет реальных ~0.22% за полный круг опускает доходность на сделку ниже минимального порога площадки. Настроить стратегию нельзя: единственный активный параметр действует скачком, а приостановки Connect случаются примерно 7 раз в год по правилам.

Гипотеза

Календарная стратегия на потоках для нового набора данных, которого фабрика NEVER касалась: акции Гонконга (HKEQ, 174 ликвидных бумаг, чистые дневные бары с поправкой на дробление акций за 2018-01-02–2026-08; площадка уже настроена в venue_configs.py как счёт CASH с издержками 0.11% за сторону). Механизм: значительная, установленная правилами доля дневного оборота крупных компаний HK приходится на материковые деньги через Stock Connect Шанхай/Шэньчжэнь — Гонконг (южное направление). Когда биржи материкового Китая……Показать большеСвернуть

Календарная стратегия на потоках для нового набора данных, которого фабрика NEVER касалась: акции Гонконга (HKEQ, 174 ликвидных бумаг, чистые дневные бары с поправкой на дробление акций за 2018-01-02–2026-08; площадка уже настроена в venue_configs.py как счёт CASH с издержками 0.11% за сторону). Механизм: значительная, установленная правилами доля дневного оборота крупных компаний HK приходится на материковые деньги через Stock Connect Шанхай/Шэньчжэнь — Гонконг (южное направление). Когда биржи материкового Китая закрываются на многодневные государственные праздники (Лунный Новый год, Цинмин, День труда, Праздник драконьих лодок, Праздник середины осени, Национальный день/Золотая неделя, Новый год), южная торговля Connect приостанавливается (SUSPENDED), тогда как HKEX продолжает торговаться. По правилам из книги HK на эти сессии уходит постоянный нечувствительный к цене покупательский поток; акции H с высокой долей южного владения торгуются менее активно и слабеют. При открытии материкового рынка приостановленный поток возвращается всплеском. Стратегия открывает длинную позицию на возвращение потока: покупает равновзвешенную корзину из 10 крупных компаний HK с высокой долей южного владения на закрытии LAST HK сессии внутри окна закрытия и удерживает её до открытия материкового рынка. Это не идея на импульсе, возврате к среднему, парной торговле, ротации ETF, финансировании или ликвидациях — ни одно семейство в корпусе гипотез 1330 на неё не похоже, и экспериментов на HKEQ прежде не было (0 из 3068). История календаря закрытий известна, поэтому все 8.7 лет можно сегодня проверить на исторических данных без риска недоступности данных. Состояние материковых праздников определяется ONLINE, а не задаётся жёстко: 000001.CNEQ подключается как контрольная позиция SIGNAL-ONLY (без сделок): если дневной бар CNEQ не появлялся >= mainland_closed_days календарных дней, а бары HK продолжают поступать, значит материковый рынок закрыт. Допустимый запасной вариант, если дополнительная площадка CNEQ окажется неудобной для движка: статическая таблица окон материковых праздников 2018-2027 (известных заранее, без заглядывания вперёд).

Гипотеза реализована точно: длинная позиция на возврат потока в заявленной корзине крупных компаний из 10 бумаг HK; вход на последней HK сессии приостановки материкового Stock Connect и выход на 3-й сессии после возобновления южного потока. Два параметра гипотезы соответствуют min_closure_weekdays (минимальная длительность приостановки для торговли) и hold_sessions_after_resume (горизонт выхода после открытия); оба заданы в _param_bounds вместе с gross_exposure, единственным другим ограниченным значением. Я……Показать большеСвернуть

Гипотеза реализована точно: длинная позиция на возврат потока в заявленной корзине крупных компаний из 10 бумаг HK; вход на последней HK сессии приостановки материкового Stock Connect и выход на 3-й сессии после возобновления южного потока. Два параметра гипотезы соответствуют min_closure_weekdays (минимальная длительность приостановки для торговли) и hold_sessions_after_resume (горизонт выхода после открытия); оба заданы в _param_bounds вместе с gross_exposure, единственным другим ограниченным значением. Я воспользовался явно разрешённым в гипотезе запасным вариантом и получил состояние материковых праздников из статической таблицы закрытий вместо подписки на 000001.CNEQ как контрольную позицию: позиция CNEQ не просто неудобна, а дважды фатальна для этого движка. (1) Барьер базового шаблона для позиций на одном таймфрейме откладывает основной сигнал, пока у каждой дополнительной позиции того же таймфрейма нет бара с точной временной меткой бара PRIMARY; дневные бары CNEQ датированы закрытием материкового рынка (07:00 UTC), а дневные бары HKEQ — закрытием HK (08:00 UTC). Их временные метки никогда не совпадают, поэтому стратегия обработала бы ноль баров и совершила бы ноль сделок. (2) BacktestRunner выделяет каждой дополнительной площадке отдельный счёт на 100 тыс. и использует SUM начальных балансов как знаменатель доходности и просадки; поэтому бездействующий контрольный счёт 100 тыс. CNY вдвое занизил бы все показатели эффективности. Таблица содержит ту же информацию без заглядывания вперёд: 2018-01..2026-06 — фактический торговый календарь акций A (я проверил: он точно воспроизводит окна материковых праздников — 57 окон, без шума от пробелов в данных), а хвост расписания официально объявлен; регуляторы материкового рынка публикуют его примерно за год. Опубликованный календарь также позволяет буквально применить правило гипотезы для входа — на LAST сессии внутри окна. Контрольная позиция в реальном времени не смогла бы определить её без заглядывания вперёд: узнать, что «завтра материковый рынок откроется», можно лишь из общедоступного календаря. Площадка: HKEQ, как заявлено (venue_type «спот» — CASH, только лонг, плечо 1.0, на которое код не ссылается). Учёт издержек: 0.11% за сторону + примерно 4 б.п. полуспреда ≈ 0.30% за полный круг на позицию, поэтому среднее изменение корзины ~0.5% и медианное ~1.2% за период удержания дают небольшой, но положительный запас. Механизм обусловлен регуляторным потоком, а не ценовым паттерном, поэтому увеличить преимущество на сделку без отказа от события нельзя. Вычислительная сложность: все операции на баре — O(1) (один поиск в словаре, без перебора истории и растущих списков).

Измеримого преимущества нет (35 независимых событий, t = 0.90); выявлены три неустранимых критических проблемы валидности, а преимущество на сделку ниже порога HKEQ после вычета неучтённых обязательных сборов. Возможности настройки отсутствуют: единственный параметр механизма работает по принципу обрыва, а приостановки Connect по правилам происходят примерно 7 раз в год, поэтому смена формулировки не добавит независимых наблюдений. Дело не в revise_hypothesis: ограничение задаёт потолок числа событий в календаре праздников материкового Китая, который сохранится и при переформулировке корзины HK.

Реализация

Календарная стратегия на потоках для крупных компаний Гонконга (HKEQ дневных баров, площадка CASH только лонг, обязательные издержки 0.11% за сторону). В материковые праздничные дни правила приостанавливают южное направление торговли через Stock Connect Шанхай/Шэньчжэнь — Гонконг (SUSPEND), тогда как HKEX продолжает торговаться; это убирает из книги HK постоянный нечувствительный к цене спрос с материка. При открытии материкового рынка этот поток возвращается всплеском. Стратегия покупает равновзвешенную корзину……Показать большеСвернуть

Календарная стратегия на потоках для крупных компаний Гонконга (HKEQ дневных баров, площадка CASH только лонг, обязательные издержки 0.11% за сторону). В материковые праздничные дни правила приостанавливают южное направление торговли через Stock Connect Шанхай/Шэньчжэнь — Гонконг (SUSPEND), тогда как HKEX продолжает торговаться; это убирает из книги HK постоянный нечувствительный к цене спрос с материка. При открытии материкового рынка этот поток возвращается всплеском. Стратегия покупает равновзвешенную корзину из 10 акций H/HK крупных компаний с наибольшей долей южного владения (0700, 0939, 1398, 0941, 0883, 0388, 2318, 1288, 0386, 0857) на закрытии LAST HK сессии в окне закрытия и выходит на закрытии 3-й HK сессии после повторного открытия материкового рынка (hold_sessions_after_resume). Состояние закрытия материкового рынка берётся из статической таблицы окон закрытия: фактический торговый календарь акций A за 2018-01..2026-06 и опубликованное расписание до 2027 — общедоступная заранее информация, считываемая по дате каждого бара без заглядывания вперёд; на бар приходится один поиск в словаре. calculate_signal возвращает непрерывную оценку фазы в будних днях: -rem_after пока приостановка продолжается, +window_len накануне возврата потока (сила сигнала = число будних дней без потока) и -(10 + sessions_since_resume) после его возвращения — поэтому пороги входа (min_closure_weekdays) и выхода (hold_sessions_after_resume) сравниваются в собственных единицах сигнала. 35 событий за 8.7 лет (~4 в год, 350 сделок по позициям на 10 позиций), среднее удержание ~4 сессий; бюджет на позицию фиксируется при входе, чтобы сохранить равные веса корзины; размер — целое число акций, валовая экспозиция 90%, без плеча и коротких позиций.

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

Если в последний закрытый будний день бар не появился, используй последнюю сессию HK на дату окна или раньше — это всё ещё информация, известная заранее, и позволяет учесть примерно 6 событий.

Сигнал на вход срабатывает только в последний день закрытия материковых рынков WEEKDAY, а не в последний HK SESSION внутри периода. Повторное воспроизведение показывает, что пропускаются 6 периодов, в которых 1-3 HK сессий приостановки совпадают с тем, что последний закрытый будний день — праздник HK (2018-04-30..05-01, 2018-12-31..2019-01-01, 2019-10-01..07, 2022-04-04..05, 2025-05-01..05); выпадает около 15% торговых событий, включая Золотую неделю. Подход консервативный и не использует заглядывание вперёд, но и без того малая выборка становится ещё меньше.

Подсчитывать будние дни без закрытий после окончания последнего периода с помощью bisect по собственной дате бара, чтобы сигнал зависел только от временной метки.

`_resume_age` привязан к времени работы процесса (инициализируется значением resume_cap=60 в __init__), а не определяется по дате бара. Для бэктеста это безопасно, но после перезапуска бумажной или реальной торговли в середине удержания сигнал -70 появится на первом баре и закроет всю корзину вместо удержания до сессии 3; добиться совпадения с повторным воспроизведением невозможно.

Учти минимальный необходимый капитал (~1 млн HKD) или округляй размер каждой позиции вниз до биржевого лота.

Акции HK торгуются биржевыми лотами (0700=100 акций ≈ HKD 60 тыс. за лот, 0939/1398=1000, 0386/0857=2000), но размер позиции рассчитывается в отдельных акциях, а модель площадки не учитывает размер лота. Слот 9% при стартовом балансе 100 тыс. HKD меньше одного биржевого лота для большинства позиций — при таком капитале исполнить сделки нельзя.

Два момента, которые аналитик должен учитывать при проверке бэктеста. (1) COSTS ARE NOT CHARGED: инструменты HKEQ — это объекты NautilusTrader `Equity`, а `BacktestRunner._apply_fees` возвращает Equity без изменений (src/backtesting/runner.py:2178-2183), поэтому установленная законом комиссия 0.1100%/сторона, объявленная для HKEQ в venue_configs.py, не применяется — песочница сообщает NEVER total_commission 0.0. Следовательно, в avg_trade_return_pct 0.482% песочницы не учтены GROSS примерно 0.22% гербового сбора……Показать большеСвернуть

Два момента, которые аналитик должен учитывать при проверке бэктеста. (1) COSTS ARE NOT CHARGED: инструменты HKEQ — это объекты NautilusTrader `Equity`, а `BacktestRunner._apply_fees` возвращает Equity без изменений (src/backtesting/runner.py:2178-2183), поэтому установленная законом комиссия 0.1100%/сторона, объявленная для HKEQ в venue_configs.py, не применяется — песочница сообщает NEVER total_commission 0.0. Следовательно, в avg_trade_return_pct 0.482% песочницы не учтены GROSS примерно 0.22% гербового сбора и сборов за полный цикл сделки и 8 б.п. полуспреда за полный цикл (impact_folded=false); фактическая чистая прибыль на сделку составляет примерно 0.18%, лишь немного выше минимального порога 0.15% HKEQ, а ROUND_TRIP_COST_PCT['HKEQ']=0.10 занижает значение для площадки примерно на 3x. (2) EFFECTIVE SAMPLE IS 35, NOT 350: я сверил таблицу закрытия с реальным рядом 0700.HKEQ — за период 2018-01..2026-09 срабатывает ровно 35 событий входа; 10 частей каждого события — это одно коррелированное наблюдение, поэтому в отложенной выборке будет около 7 событий. Ожидай широкие доверительные интервалы и сильное снижение оценок; увеличение min_closure_weekdays до предельного значения (4) сокращает число событий примерно до 15.

Обзор бэктеста

Шарп
0,25
Общая доходность
12,61%
Максимальная просадка
9,28%
Всего сделок
350
Доля прибыльных
58,6%
Профит-фактор
1,28

Механизм точно реализован, что подтверждают записи сделок: все позиции 350 LONG; вход по каждому событию происходит на закрытии последнего буднего дня, когда материковые рынки закрыты (например, 2018-02-21, последний день закрытия LNY), а выход — на 3-й сессии HK после возобновления Connect (2018-02-26). Направление, время и размер позиции соответствуют гипотезе; таблица закрытий отражает данные на тот момент, заглядывания вперёд нет.

Действительно новый набор данных (первый эксперимент HKEQ в корпусе); не относится ни к одному неудачному семейству.

Валовой результат чистый и не объясняется плечом или сложным процентом: PF 1.28, доля прибыльных сделок 0.586, DD 9.3%, avg_position_pct 9.1% (истинная равновзвешенная корзина из 10 позиций).

Издержки по структуре не списываются, а разрыв превышает преимущество: `_apply_fees` возвращает объекты NautilusTrader `Equity` без изменений, поэтому HKEQ никогда не применяет заявленные 0.11% за сторону (total_commission 0.0, комиссия 0.0 по всем 350 сделкам). Реальный полный круг HK ≈0.22% обязательных сборов + ~0.08% спреда ≈0.30%; чистая доходность на сделку ≈0.19%, ниже минимального порога площадки 0.30% HKEQ. ROUND_TRIP_COST_PCT['HKEQ']=0.10 занижает издержки площадки примерно в 3x раз, поэтому нижний предел кода здесь не срабатывает.

Чистая экономика округляется до нуля: $12,608 валовой прибыли − $2,986 неучтённого рыночного воздействия (19.15% от валовой прибыли) − около $7,000 обязательных сборов ≈ $2,600 за 8.7 лет, или около 0.3% в год против валовой 1.46% CAGR.

Настроить нечего: gross_exposure позволяет лишь получить преимущество ниже издержек на площадке 1x CASH; hold_sessions_after_resume не добавляет запаса на сделку; min_closure_weekdays на верхней границе (4) сокращает число событий 35 примерно до 15.

Дополнительно: 35 независимых событий (не 350), sharpe_ci [-0.50, 1.03] включает ноль, PSR 0.536, коэффициент Сортино 0.040, Кальмара 0.157, длительность DD — 742 дней, положительный результат за 5 из 9 лет.

Анализ

Механизм реализован точно и без заглядывания вперёд: все 350 позиции LONG, вход в последний будний день закрытия материкового рынка в период каждой приостановки, выход на 3-й HK сессии после возобновления потока.

Результат на отложенной выборке технически положительный (коэффициент Шарпа 0.075, сделок 70) и согласуется с WF-OOS (z = -0.50); провал вызван не ухудшением на отложенной выборке.

Чувствительность к каждому структурному параметру отсутствует; просадка мала (2.7% оптимизировано) и укладывается в заранее заданный диапазон 15%; выполнено 4 из 6 заранее зарегистрированных критериев.

Действительно новый набор данных (первый запуск календаря событий HKEQ) — показательный отрицательный результат.

Три неустранимых нарушения валидности HARD: переобучение (IS 0.910 -> OOS 0.493), OOS коэффициент Шарпа 0.493 < порога 0.5, PBO 0.656 > 0.5.

На самом деле 350 сделок — это 35 событий × 10 коррелированных позиций. Среднее на событие +0.41%, стандартное отклонение 2.67%, t = 0.90 — статистически не отличается от нуля; результат соответствует DSR 0.0157, sharpe_ci_low -0.48, неудачной программе FDR.

Разрыв в издержках VERIFIED: в каждой записи сделки указана комиссия 0.0 и total_commission 0.0, хотя в venue_configs.py заданы maker/taker HKEQ = 0.0011; _apply_fees() досрочно завершает работу для всех инструментов Equity типа NT. Учёт расходов около 0.22% за сделку туда и обратно (примерно $2,080 из PnL $3,664 при среднем номинале $2,702) вместе с неучтённым рыночным воздействием снижает доходность на сделку с 0.490% до примерно 0.19%, ниже порога 0.30% HKEQ.

Единственный рычаг механизма действует скачком: hold_sessions_after_resume 2 -> 0.092, 3 -> 0.470, 4 -> 0.137; остальные параметры не влияют на результат.

OOS обусловлено одним окном (1.895 / 0.066 / -0.480); CAGR 1.46%, коэффициент Кальмара 0.174, 5 из 9 лет с положительным результатом, длительность просадки — 742 дней.

Поправка Бенджамини — Хохберга при q=0.10 среди 285 кандидатов программы сохраняет 4. Кандидат, не прошедший эту проверку, нельзя отличить от шума самой программы, какими бы хорошими ни выглядели его отдельные статистические показатели.

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

Стратегии на календарных событиях ограничены самим числом событий: 35 праздничных периодов за 8.7 лет и 10 коррелированные позиции не позволяют статистически отличить преимущество от случайности. Доходность на сделку до издержек нужно сверять с реальными расходами площадки, если движок их не учитывает.

После более раннего вердикта «оптимизировать» на проверке бэктеста аналитик вынес вердикт «отказаться» на этапе ANALYZING: три неустранимых жёстких нарушения валидности (переобучение, коэффициент Шарпа OOS 0.493 ниже порога 0.5, PBO 0.656 выше 0.5), а также вывод, что 350 позиций на деле составляют 35 коррелированных событий со средним на событие +0.41% и t = 0.90. Проверено, что комиссии не списывались (total_commission 0.0, несмотря на HKEQ комиссию мейкера/тейкера 0.11%); учёт ~0.22% обязательных сборов за полный круг и неучтённого влияния на цену снижает доходность сделки с 0.490% до ~0.19%, ниже порога площадки 0.30% HKEQ.

Покупай равновзвешенную корзину из 10 крупных гонконгских компаний с высокой долей южного владения (HKEQ дневных баров) на последней HK сессии приостановки материкового Stock Connect из-за китайского государственного праздника; удерживай позиции до открытия материкового рынка и выхода на 3-й сессии после возобновления южного потока.

За период с 2018-01 по 2026-09 первоначальный бэктест показал общую доходность 12.61% (CAGR 1.46%), коэффициент Шарпа 0.245 (CI -0.50–1.03), 350 сделок по позициям из 35 событий закрытия, долю прибыльных сделок 58.6%, фактор прибыли 1.28 и максимальную просадку 9.3%; средняя валовая доходность сделки составила 0.490% от номинала. После оптимизации: CAGR 0.469%, коэффициент Шарпа 0.269, максимальная просадка 2.69%, коэффициент Шарпа walk-forward OOS: 0.493 против IS 0.910, PBO 0.656, дефлированный коэффициент Шарпа 0.0157; проверка на отложенной выборке пройдена с коэффициентом Шарпа 0.075 на 70 сделках.

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