Внутримесячный цикл моментума: институциональная механика
Суть идеи
Традиционный моментум — покупай то, что росло последние 3–12 месяцев, продавай отстающих — работает уже 30+ лет, и никто толком не договорился, почему. Психология? Медленное распространение информации? Компенсация за риск? Авторы предлагают другой ответ: институциональные игроки управляют кэшем по календарному расписанию. Подписки/выкупы фондов, ребалансировки, margin calls и аллокации происходят в предсказуемые точки месяца — и именно это создаёт повторяющийся внутримесячный паттерн в доходностях моментум-портфелей.
Механизм примерно такой: в начале месяца свежие деньги заходят в фонды, которые уже держат победителей — это толкает их выше. В конце месяца те же фонды продают для выплат или ребалансировки. Итог — моментум не равномерен внутри месяца, а концентрирован в конкретных окнах. Авторы показывают это на данных по акциям, разбивая месячную доходность моментум-портфеля по дням.
Это принципиально отличается от «поведенческих» объяснений: здесь есть конкретный агент с конкретным расписанием, а не абстрактная «недореакция рынка». Если механизм реален — он должен быть стабилен во времени и воспроизводим в других классах активов, где институционалы играют заметную роль.
Применимость к крипте
На первый взгляд крипта — не то место: розничный поток, 24/7, нет классических fund flows. Но это уже не так. С 2021 года CME-фьючерсы на BTC/ETH несут значимый институциональный отпечаток. COT-отчёт показывает позиции dealer’ов, asset managers и lev funds — и их ребалансировки тоже привязаны к календарю (квартальные экспирации, месячные роллы, funding-окна).
Funding rate на перп-фьючерсах — это прокси на агрегированный спрос лонгов/шортов и меняется предсказуемо вокруг экспираций и конца месяца. Basis между спотом и CME-фьючерсом тоже имеет сезонность вокруг роллов. Если внутримесячный цикл моментума — это артефакт институциональных cash flows, то в крипте его аналог нужно искать именно там: в funding, basis и COT-позиционировании, а не в классическом price momentum.
Что адаптировать: вместо fund-flow дат брать даты экспирации опционов/фьючерсов Deribit и CME, даты funding-расчётов, конец календарного месяца. Сигнал — не просто «цена росла», а «цена росла И институциональный поток по COT подтверждает направление».
Тестируемо ли
Да, частично. У нас есть: спот BTC/ETH (дневные/часовые), CME-COT еженедельно, funding rate (8h), basis, даты экспираций. Чего нет: реальных fund-flow данных по крипто-фондам с дневной разбивкой — это существенный пробел, придётся использовать COT как прокси. Rolling-z по funding и basis можно считать прямо в движке. Walk-forward с окном 6–12 месяцев реален.
Сомнения
Главный риск — data-snooping на акциях: авторы нашли паттерн, разбив месяц на дни, что само по себе умножает число проверяемых гипотез. Перенос на крипту добавляет ещё один слой подгонки — мы выбираем «похожие» даты постфактум. Режимная хрупкость очевидна: в 2022 году институциональный поток в крипту схлопнулся, и любой calendar-based сигнал должен был сломаться. Независимых «месяцев» с устойчивым институциональным участием в BTC/ETH — от силы 30–40, это статистически бедно.
Следующий шаг
Прогнать walk-forward на дневном BTC: сигнал — лонг в первые 5 торговых дней месяца при условии, что COT lev-funds net > rolling-z(+0.5) за последние 52 недели; выход — на 6-й день или при развороте funding ниже нуля. Горизонт теста: 2020–2024, OOS-окно 6 месяцев, метрика — Deflated Sharpe.
Результаты тестов
Дописано 21 августа 2026 — прогон «Следующего шага» на нашем движке и данных. Сама статья выше не менялась.
Спека выполнена буквально: дневной BTC, лонг в первые 5 дней месяца при условии COT lev-funds net > rolling-z(+0.5) за 52 недели, выход на 6-й день или при развороте funding ниже нуля, горизонт 2020–2024, walk-forward с OOS-окном 6 месяцев, Deflated Sharpe. Сверх буквы: ETH вторым рукавом, семейство из 48 конфигураций на актив (окно {3, 5, 7} дней × счёт дней {календарные, биржевые} × гейт {нет, z>0, z>+0.5, z>+1.0} × выход {фиксированный, по развороту funding}) и — главное — три отдельные проверки самого механизма, а не только его торговой обёртки: профиль дня месяца у цены, у кросс-секционного моментум-портфеля и у денежного потока спотовых ETF.
Инструмент — перп Binance (спот-бэкфилл левее сентября 2019), издержки 6 б.п. на единицу оборота, funding в P&L по фактическим выплатам, вход на следующий день. Приговор выносит ротационный max-T; DSR приводим, раз спека его просила.
Нуль: перестановка порядка дней ВНУТРИ месяца
Клейм статьи — не «месяц прибыльный», а «прибыль концентрирована в определённых днях месяца». Правильный нуль для такого утверждения один: перемешать порядок дневных доходностей внутри каждого месяца. Месячная сумма и весь набор движений сохраняются точно, гибнет только привязка к позиции в месяце. Всё, что переживёт такой нуль, — настоящий календарный эффект, а не снос, не тренд и не волатильность.
Дальше сравниваем не отдельные дни (15 ячеек — это 15 гипотез), а контрасты: среднее по окну против среднего по остальным дням того же месяца. Контраст свободен от сноса по построению и втрое мощнее поячеечного теста. Окон три — классическое окно смены месяца [−1, +1, +2, +3], окно статьи [+1..+5] и зеркальное [−1..−5]; перестановки общие для всех трёх, поэтому максимум по строке — честный family-wise порог.
Калибровка: что этот тест вообще способен увидеть
Прежде чем что-то отрицать, надо показать, что тест работает. Прогоняем ту же машинку на индексе Nasdaq Composite за 55 лет — эффект конца месяца в акциях документирован десятилетиями:
| выборка | месяцев | окно смены месяца | t | p | MDE |
|---|---|---|---|---|---|
| Nasdaq 1971–2026 | 665 | +9.5 б.п./день | 3.49 | 0.001 | 8.9 б.п. |
| Nasdaq, последние 8 лет | 95 | +3.3 б.п./день | 0.39 | 0.695 | 26.6 б.п. |
| S&P 500, последние 8 лет | 95 | +2.8 б.п./день | 0.43 | 0.663 | 21.0 б.п. |
Первая строка — тест находит эффект там, где он есть. Вторая — тот же эффект на выборке нашего размера уже невидим: минимально детектируемая величина 26.6 б.п. против истинных 9.5. Это не придирка, а рамка всего прогона: на сотне месяцев сильнейшая документированная календарная аномалия акций не обнаруживается в принципе.
Для крипты MDE ещё хуже — волатильность выше в разы:
| месяцев | окно смены месяца | p | MDE | сколько месяцев нужно | |
|---|---|---|---|---|---|
| BTC | 107 | +16.5 б.п./день | 0.341 | 53.9 б.п. | 1142 (95 лет) |
| ETH | 107 | +34.7 б.п./день | 0.112 | 70.7 б.п. | 444 (37 лет) |
Знак у обоих активов тот же, что в акциях, и точечная оценка BTC даже вдвое больше «акционной» — но чтобы отличить её от нуля, нужен век наблюдений. Отрицательный результат ниже — это в первую очередь свойство выборки, и формулировать его надо именно так.
Торгуемая спека: не работает, и гейт мешает
| Sharpe | в рынке | p (ротац.) | p_max | DSR | |
|---|---|---|---|---|---|
| BTC, первичная ячейка, 2020–2024 | +0.08 | 2.2% | 0.544 | 0.992 | 0.108 |
| BTC, первичная, весь спан COT | −0.02 | 4.0% | 0.654 | 0.996 | 0.059 |
| BTC, только календарь (без гейта) | +0.45 | 16.4% | 0.350 | 0.930 | 0.345 |
| BTC, только гейт (без календаря) | +0.24 | 16.1% | 0.626 | 0.998 | 0.192 |
| BTC, buy & hold | +0.90 | 100% | — | — | 0.725 |
| ETH, первичная ячейка, 2020–2024 | −0.37 | 2.3% | 0.894 | 1.000 | 0.001 |
| ETH, только календарь | +0.86 | 16.4% | 0.218 | 0.738 | 0.392 |
| ETH, только гейт | −0.23 | 20.7% | 0.936 | 1.000 | 0.003 |
Walk-forward по букве спеки (expanding IS ≥ 365 дней, OOS 182 дня): BTC +0.24 против +0.50 у buy&hold на том же куске, ETH на полном спане +0.02 против +0.36. Ни один из 48 конфигов ни на одном активе не подошёл к family-wise порогу: E[max Sharpe] под ротационным нулём и так 0.99–1.13 годовых, то есть перебор сеткой сам по себе рисует «стратегию» лучше всего, что мы нашли.
Два разложения объясняют, почему.
Гейт COT вычитает, а не добавляет. Отдельный нуль фильтра — циклический сдвиг только COT-гейта при неподвижных календарном сигнале и рынке (скважность и персистентность гейта сохраняются точно, гибнет лишь выравнивание с рынком):
| база без гейта | Δ от гейта | p | нуль: среднее / p95 | |
|---|---|---|---|---|
| BTC 2020–2024 | +0.45 | −0.37 | 0.608 | −0.25 / +0.41 |
| BTC весь спан | +0.44 | −0.48 | 0.844 | −0.18 / +0.27 |
| ETH 2020–2024 | +0.86 | −0.93 | 0.820 | −0.49 / +0.29 |
Настоящий гейт хуже случайно сдвинутого гейта той же скважности. Причина видна напрямую, без бэктеста, — по лаговому профилю самого ряда COT: корреляция недельного Δ(lev-funds net) с недельной доходностью даёт пик на k = 0 (неделя, закончившаяся отчётным вторником) величиной −0.32 у BTC и −0.41 у ETH, а на следующей неделе — +0.04 и +0.05, то есть ноль. Ряд датирован верно и смотрит строго назад; вперёд он не смотрит вовсе. И знак важнее величины: на росте недели хедж-фонды CME сокращают нетто-лонг, а не наращивают — они ведут себя как носители базисной сделки, а не как «институциональный поток, толкающий победителей». Агента, которого требует механизм статьи, в этом ряду нет.
Окно «первые 5 дней» ничем не выделено среди 28 фаз месяца. Тот же однонаправленный трейд, запущенный с любого дня месяца: факт +0.45 — это 61-й перцентиль (BTC 2020–2024) и 75-й на полном спане, при медиане фаз +0.33 и +0.16 и разбросе от −0.34 до +1.32. Любое пятидневное окно на растущем активе даёт около трети Sharpe — это экспозиция, а не календарь.
Механизм: где его нет и где он всё-таки виден
Кросс-секционный моментум крипты — прямой аналог того, что меряет исходная статья (у неё моментум-портфель, а не один актив). Собрали WML на 93 парах Binance (ребаланс 1-го числа, лонг верхняя шестая по 90-дневному моментуму с пропуском 5 дней, шорт нижняя, универсум — топ-30 по трейлинг-обороту с ≥180 днями истории на момент ребаланса): сам фактор за 81 месяц даёт Sharpe −0.79 (кросс-секционный моментум в крипте отрицателен и без всякого календаря), а его внутримесячный профиль пуст: окно [+1..+5] даёт −14.5 б.п./день при MDE 63.8 — не просто незначимо, а с обратным знаком. Ноги по отдельности — то же самое.
Зато самый прямой тест премисы дал результат. «В начале месяца свежие деньги заходят в фонды» — в крипте это наблюдаемо буквально: чистые создания/погашения спотовых ETF. (Ловушка данных, которую пришлось снять: ряд идёт по биржевым дням, и праздники США записаны ровно нулём — 26 дней из 675. Нули сидят на фиксированных календарных позициях, 1 января это ячейка +1, и без чистки они смещают ровно те ячейки, которые мы тестируем.)
| BTC, поток спотовых ETF (30 мес.) | отклонение | t | p | p_FWER |
|---|---|---|---|---|
| начало [+1..+5] | +14.9 $млн/день | 0.45 | 0.670 | 0.951 |
| смена месяца [−1,+1,+2,+3] | −11.4 $млн/день | −0.33 | 0.753 | 0.981 |
| конец [−1..−5] | −77.0 $млн/день | −2.76 | 0.007 | 0.021 |
| последний биржевой день | −113.3 $млн/день | −2.75 | 0.005 | 0.121 |
Средний приток в последние пять биржевых дней месяца — 32 $млн/день против 97 в остальные; в последний день 2024–2026 годов он в среднем отрицателен (−7.7 $млн при +85.5 в обычный день). Эффект переживает переход к рангам внутри месяца (то есть держится не на одном выбросе: p = 0.009 для последнего дня) и одинаков по знаку в обеих половинах выборки.
То есть вторая половина механизма статьи — «в конце месяца фонды продают для выплат и ребалансировок» — в крипте видна прямо в деньгах. Первой половины — притока в начале месяца — нет.
Находка, которую мы не засчитываем (и почему)
Дальше напрашивается очевидное: если поток в конце месяца сохнет, должна сохнуть и цена. В эре спотовых ETF так и есть. Шорт BTC в последний биржевой день месяца, январь 2024 — июль 2026: 31 сделка, Sharpe +1.87 нетто, суммарно +32.6%, 25 падений из 31, средний день −1.15%. ETH в том же окне — −1.23% и 17 падений из 25. До запуска ETF (2017–2024, 77 месяцев) тот же день давал +0.74% и 48% падений. Ротационный max-T по семейству из 42 фаз бизнес-месяца: p = 0.000.
И всё же это не находка, а кандидат. Три причины.
Первая и главная: окно «эра ETF» мы выбрали, посмотрев на данные — сначала нашли просадку потока, потом пошли искать цену там же. Ротационный нуль корректирует выбор фазы, но не выбор окна. Плацебо на два этапа сразу: прогоняем те же 42 фазы по всем 78 скользящим 31-месячным окнам истории BTC и смотрим, какой Sharpe даёт лучшая фаза в каждом. Медиана +1.05, p90 +1.83, максимум +2.02. Наши +1.87 — это 91-й перцентиль, то есть p ≈ 0.09. Как только заплатить за оба этапа поиска, значимость исчезает.
Вторая: датировка не сходится с объяснением. По годам последний биржевой день был положительным в 2017–2022 (+2.45%, −1.13%, +2.35%, +0.30%, +1.78%, +1.06%) и отрицательным в 2023–2026 (−0.62%, −1.56%, −0.93%, −0.82%). Знак сменился в 2023 — за год до запуска спотовых ETF. Поток ETF корреспондирует с эффектом только на его второй половине.
Третья: сам по себе внутримесячный профиль нестабилен ровно так, как боялась статья. Контраст окна смены месяца по эрам:
| эра | месяцев | BTC | ETH |
|---|---|---|---|
| 2017–2020, до институтов | 39 | +51.2 б.п. | +39.3 б.п. |
| 2021–2023, CME-эра | 34 | +15.3 б.п. | +99.5 б.п. (p_FWER 0.027) |
| 2024+, эра спотовых ETF | 30 | −31.6 б.п. | −51.9 б.п. |
Единственная ячейка, прошедшая family-wise порог во всём прогоне помимо потока ETF, — ETH в CME-эре — в следующей же эре меняет знак на противоположный. Статья сама писала: «если механизм реален — он должен быть стабилен во времени». На наших данных он не стабилен.
Контроли
Пустышки (20 миров с циклически сдвинутым рынком): ложных срабатываний max-T 5% у BTC и 0% у ETH, ложных профилей 0% — нуль откалиброван по номиналу. Мощность теста (эдж внедряется прямо в дни 1–5): профиль ловит его начиная с 40–80 б.п./день, при 20 б.п. и ниже не ловит. Мощность конструкции (мир, где статья верна: бамп в дни 1–5 ровно тогда, когда настоящий COT-z > +0.5, — эдж входит как вход, который вся связка обязана найти): 6% миров при 5–10 б.п., 31% при 40, 81% при 80 и 100% при 160 б.п./день. То есть конструкция статьи начинает работать с эффекта примерно вдесятеро больше акционного.
Датировка COT проверена против первоисточника CFTC: 436 недель, расхождений ноль. Отчётная дата — вторник, кроме пяти праздничных недель, где CFTC сдвигает её на понедельник; фиксированный «+3 дня» давал бы тогда четверг, то есть на день раньше пятничного релиза, поэтому доступность считается как «докатить до пятницы недели релиза, затем +1 день» — суббота во всех 436 неделях без исключения. Лукахед проверен порчей будущего: всё правее середины выборки заменяется шумом, позиции левее обязаны совпасть побитово — совпали.
Независимый верификатор (verify_intramonth.py, 34 проверки, реализация с нуля: свои перестановки явным циклом, свой контраст Уэлча, свой numpy-бэктест, свой DSR по формуле, эффект конца месяца перепроверен на Yahoo против FRED) прошёл 34 из 34. Одна ловушка сверки заслуживает упоминания отдельно: pandas.std() считает с ddof = 1, numpy.std() — с ddof = 0, и на выборке в 1827 дней это расхождение Sharpe в четвёртом знаке, которого достаточно, чтобы завалить побитовую сверку на ровном месте. Конвенции обязаны совпадать между реализациями.
Вердикт
Торгуемая спека — мертва. Первичная ячейка даёт Sharpe +0.08 на BTC и −0.37 на ETH, ни один из 48 конфигов не проходит family-wise порог, walk-forward уступает buy&hold, а COT-гейт активно вычитает — потому что нетто хедж-фондов на CME по прямому измерению не несёт форвардной информации и вдобавок движется против цены, а не за ней. Перенос механизма через COT в том виде, как он предложен, не работает.
Клейм о механизме — не проверяем на нашей выборке, а не опровергнут. Ни BTC, ни ETH, ни кросс-секционный моментум-портфель не показывают внутримесячного профиля, но MDE в 50–70 б.п./день против «акционных» 9.5 означает, что мы бы не увидели и настоящий эффект. Честная формулировка: чтобы отличить наблюдаемые +16.5 б.п. у BTC от нуля, нужно 95 лет истории.
Единственное, что реально видно, — денежная половина механизма. Приток в спотовые ETF BTC статистически значимо проседает в последние пять биржевых дней месяца (−77 $млн/день, p_FWER 0.021), и в те же дни в 2024–2026 слаба цена. Но окно эры выбрано постфактум, плацебо двухэтапного поиска даёт p ≈ 0.09, а смена знака в ценах датируется 2023 годом — раньше самих ETF. Это кандидат на форвард-трек, а не результат.
Скрипты: research_intramonth.py (прогон), verify_intramonth.py (верификация).