Эксперимент 264 — держать дольше: свип горизонта на сплите 29/31

617 книг · 68 состояний · 68 цепочек · 617/617 завершено · 1.62 ч движка · config drift 0
обучение до 2026-08-29 · dev 2026-08-29 → 2026-08-31 · основное окно 2026-08-31 → 2026-09-05 · свежий holdout 2026-09-05 → 2026-09-07
617 книг · 68 состояний · 68 цепочек · 617/617 завершено · 1.58 ч движка · config drift 0
обучение до 2026-08-29 · dev 2026-08-29 → 2026-08-31 · основное окно 2026-08-31 → 2026-09-05 · свежий holdout 2026-09-05 → 2026-09-07

Терминальный статус
COMPLETE
617/617 книг · 68 цепочек · 68 состояний
Контроль t20 · основное
$3,440/день
1,115 сделок · 143.0 bp/$ч · под общим потолком
Контроль t20 · holdout
$268/эфф. день
2026-09-05 → 2026-09-07, два свежих дня
Прод t20 · основное
$4,724/день
1,346 сделок · веса заморожены · сплит 08-19/08-21
Бьют прод t20
136 / 617
форвард: 158 · holdout по эфф. дням: 231
Лучшая рука свипа
$8,213/день
B_tmo720__thm3__tp40__f77 · горизонт 720 мин
Кандидатов после P1–P5
0
NO_EDGE: 348 · REGIME_LOADING: 268 · CONTROL: 1
P2 · загрузка режима
268 из 268
не удержали 50 % преимущества после удаления 3 токенов
Чистый клок против настроенных
модель добавляет
лучший клок $7,452/день против $7,961/день у настроенных · 68 чистых клоков
Общий потолок капитала
$53,004
источник: frz_t20 · все гейты решаются на этом базисе
Терминальный статус
COMPLETE
617/617 книг · 68 цепочек · 68 состояний
Контроль t20 · основное
$3,440/день
1,115 сделок · 143.0 bp/$ч · под общим потолком
Контроль t20 · holdout
−$2,641/эфф. день
2026-09-05 → 2026-09-07, два свежих дня
Прод t20 · основное
$4,724/день
1,346 сделок · веса заморожены · сплит 08-19/08-21
Бьют прод t20
133 / 617
форвард: 164 · holdout по эфф. дням: 268
Лучшая рука свипа
$8,159/день
B_tmo720__thm3__tp40__f77 · горизонт 720 мин
Кандидатов после P1–P5
0
NO_EDGE: 339 · REGIME_LOADING: 277 · CONTROL: 1
P2 · загрузка режима
277 из 277
не удержали 50 % преимущества после удаления 3 токенов
Чистый клок против настроенных
модель добавляет
лучший клок $7,459/день против $7,961/день у настроенных · 68 чистых клоков
Общий потолок капитала
$53,004
источник: frz_t20 · все гейты решаются на этом базисе

Вердикт по пререгистрированным порогам P1–P6

Пороги заморожены в context/00_PLAN.md до запуска свипа. Всё решающее считается на общем потолке капитала; standalone-числа без потолка публикуются, но решений не несут.

P1 · основное окно и holdout
268 из 616
Рука обходит переобученный контроль t20 по capped c50 $/день на обоих окнах. Победа на одном окне — INCONCLUSIVE.
контроль: $3,440/день на основном, $268/эфф. день на holdout · только основное: 293 · только holdout: 421 · строгое чтение holdout без поправки на срез ленты: 267
P2 · бета-контроль — гейт эксперимента
0 из 268
Преимущество обязано сохранить ≥ 50 % себя со знаком после удаления 3 токенов с наибольшим вкладом в разность рука − контроль, на обоих окнах.
REGIME_LOADING: 268 · медиана доли среди прошедших P1: -9 % осн. / 12 % holdout · по всем рукам: 3 %
P3 · капитал
238 из 616
$/день на $1k среднего капитала не хуже 0.95× контроля. Ось «дольше» по построению держит капитал дольше.
контроль: 343.3 $/день на $1k · медианное отношение по свипу: 0.84×
P4 · просадка
449 из 616
Максимальная просадка под общим потолком не глубже 1.25× контроля.
контроль: −$4,434 · медианное отношение: 1.02×
P5 · ширина
10 из 616
n_eff после кластеризации по ключу за 30 мин ≥ 1000, и доля прибыльных падает не более чем на 3 пп между окнами.
медиана n_eff: 810 (контроль 836) · медиана падения доли: 5.61 пп · план не называет окно для n_eff; взят весь форвард, а пооконные показания публикуются рядом
P6 · ungated
3 из 36
Рука со снятыми гейтами безопасна только внутри 1.10× просадки гейтованного близнеца при PnL не ниже его. Иначе — «ёмкость», не эдж.
пар с обоими снятыми гейтами: 12 · медианное ×DD: 1.69× · медианный рост сделок: 2.01×
срез · выход выключен и чистый клок
68 чистых клоков
θ = −3.0 держит learned exit ниже достижимой шкалы предсказаний. Доля срабатываний измерена по книгам, а не предположена.
максимум срабатываний в срезе: 87.27 % (169 книг) против 92.7 % у настроенных · лучший клок $7,452/день против лучшей настроенной $7,961/день
Sharpe · не считается
н/д
lib.metrics.MIN_OBS = 30 дневных наблюдений. Окна 264 — 5 и 2 дня.
порог lib.metrics.MIN_OBS не достигнут ни на одном окне, Sharpe не публикуется
P1 · основное окно и holdout
277 из 616
Рука обходит переобученный контроль t20 по capped c50 $/день на обоих окнах. Победа на одном окне — INCONCLUSIVE.
контроль: $3,440/день на основном, −$2,641/эфф. день на holdout · только основное: 293 · только holdout: 549 · строгое чтение holdout без поправки на срез ленты: 277
P2 · бета-контроль — гейт эксперимента
0 из 277
Преимущество обязано сохранить ≥ 50 % себя со знаком после удаления 3 токенов с наибольшим вкладом в разность рука − контроль, на обоих окнах.
REGIME_LOADING: 277 · медиана доли среди прошедших P1: -17 % осн. / 29 % holdout · по всем рукам: 2 %
P3 · капитал
235 из 616
$/день на $1k среднего капитала не хуже 0.95× контроля. Ось «дольше» по построению держит капитал дольше.
контроль: 343.3 $/день на $1k · медианное отношение по свипу: 0.84×
P4 · просадка
448 из 616
Максимальная просадка под общим потолком не глубже 1.25× контроля.
контроль: −$4,434 · медианное отношение: 1.02×
P5 · ширина
11 из 616
n_eff после кластеризации по ключу за 30 мин ≥ 1000, и доля прибыльных падает не более чем на 3 пп между окнами.
медиана n_eff: 893 (контроль 934) · медиана падения доли: 8.17 пп · план не называет окно для n_eff; взят весь форвард, а пооконные показания публикуются рядом
P6 · ungated
3 из 36
Рука со снятыми гейтами безопасна только внутри 1.10× просадки гейтованного близнеца при PnL не ниже его. Иначе — «ёмкость», не эдж.
пар с обоими снятыми гейтами: 12 · медианное ×DD: 1.74× · медианный рост сделок: 2.02×
срез · выход выключен и чистый клок
68 чистых клоков
θ = −3.0 держит learned exit ниже достижимой шкалы предсказаний. Доля срабатываний измерена по книгам, а не предположена.
максимум срабатываний в срезе: 86.48 % (169 книг) против 93.0 % у настроенных · лучший клок $7,459/день против лучшей настроенной $7,961/день
Sharpe · не считается
н/д
lib.metrics.MIN_OBS = 30 дневных наблюдений. Окна 264 — 5 и 2 дня.
порог lib.metrics.MIN_OBS не достигнут ни на одном окне, Sharpe не публикуется

Сводный вердикт свипа: REGIME_LOADING — преимущество не переживает бета-контроль. Через все пять решающих гейтов (P1–P5) прошли 0 рук из 616. Разбивка: NO_EDGE 348 · REGIME_LOADING 268 · CONTROL 1. P6 — не решающий гейт, а классификатор: он отделяет эдж от ёмкости и никого не продвигает. Ни одна рука этим отчётом не промотируется в деплой.Сводный вердикт свипа: REGIME_LOADING — преимущество не переживает бета-контроль. Через все пять решающих гейтов (P1–P5) прошли 0 рук из 616. Разбивка: NO_EDGE 339 · REGIME_LOADING 277 · CONTROL 1. P6 — не решающий гейт, а классификатор: он отделяет эдж от ёмкости и никого не продвигает. Ни одна рука этим отчётом не промотируется в деплой.

Накопленный реализованный PnL и капитал

только форвард, с 31 авг · капитал как торговался

Лента продлена до 2026-09-07 18:00. Весь свип пересчитан на этой ленте; подробности подставляются сюда при переключении. Разбор края — в секции «Лента до упора», популяционное сравнение двух лент — в «Что удлинение ленты сделало со всем свипом».
p10–p90 всех книг p25–p75 медиана клик по строке таблицы — вывести модель сюда

PnL реализуется в момент policy_exit на общей часовой сетке; перцентильная полоса берётся по всем книгам свипа в каждый час, поэтому край полосы — это не одна модель, и ни одна из опорных линий в неё не входит. Опорных линий четыре: рецепт t20 и рецепт t26, переобученные на календаре 29/31, и те же две боевые линии с замороженными весами, переигранные на этой же ленте. Переключатель базы решает, относительно какой из них считается разница; в режиме разница она становится нулевой линией. Переключатель ленты меняет прогон целиком: те же 617 точек, тот же календарь обучения, конец ленты сдвинут с 07.09 00:00 на 07.09 18:00 — и вместе с кривыми переключается весь свип: лидерборд справа, KPI, гейты P1–P6, кривая горизонта и сетка θ/TP. Линия с замороженными весами рисуется ровно до конца своего реплея и там обрывается с подписью, а не тянется плоско до края. Полосы предпосчитаны в 02_analyze.py для каждой комбинации переключателей. Кликабельна любая строка лидерборда: все кривые вшиты в страницу как base64-дельты int16 и разжимаются по клику.

Занятый капитал, та же сетка

Взвешенный по времени задействованный капитал: каждый час — средние USD, реально стоящие под риском, собранные поминутно по всем открытым позициям. На оси «дольше» это не формальность: рука на 720 мин паркует тот же доллар вчетверо дольше, и именно здесь ось платит за себя. Читать вместе с колонкой $/д на $1k — это гейт P3.

Лидерборд — основное окно, против переобученного контроля

колонки

Строка — одна книга. гор. — LABEL_TIMEOUT_MIN, главная ось эксперимента. Колонка вердикт — это результат последовательного применения P1→P6 из 02_analyze.py, а не ранжирование по деньгам: NO_EDGE не прошла P1, REGIME_LOADING прошла P1 и провалила бета-контроль P2, CAPITAL_COST — P3, DRAWDOWN — P4, TOO_NARROW — P5, CAPACITY_ONLY — P6. Метрики следуют за переключателем потолка капитала.

PnL против горизонта, с разложением по θ и take-profit

Срез лестница A+B — единственное место, где разница между горизонтами есть разница в горизонте: один и тот же рецепт, одна ось, идентичный веер 5θ × 5TP на каждом горизонте. Срез все группы смешивает разметку, глубину и гейты, поэтому он описывает свип, а не измеряет ось. Пунктирная линия — переобученный контроль t20 на 180 мин.

Что говорит машина о форме этой кривой. Ниже — вывод lib.forensics.read_bin_curve на тех же двух массивах, что нарисованы выше (срез лестница A+B, агрегат по всем θ и TP). Ни одно утверждение о монотонности, плато или пике в тексте отчёта не сделано по картинке: если детектор молчит про тренд, значит тренда в этих числах нет, как бы линия ни выглядела. Колонка n — сколько книг стоит за каждой точкой; там, где она мала, форма — это шум одной книги.

FINDINGS (2 fired, 3 clean)
[MED ] BIN/sample · 10 of 10 bins have n < 30 (min 25) — those points are noise
[MED ] BIN/label_timeout_min-noisy · 75% of steps reverse direction — curve is not a trend
median capped c50 $/day (paper) by label_timeout_min (10 bins)
bin       y  n
180 3271.19 25
240 3611.61 25
300 2062.16 25
360 3352.18 25
420 3236.00 25
480 3450.54 25
540 2662.34 25
600 2993.52 25
720 3574.88 25
900 4342.25 25
CLEAN: monotone (rho +0.24), spread, interior-span (68%)
NOTE: 10 bins · median capped c50 $/day (paper) 3,271 -> 4,342 · min 2,062 max 4,342
FINDINGS (2 fired, 3 clean)
[MED ] BIN/sample · 10 of 10 bins have n < 30 (min 25) — those points are noise
[MED ] BIN/label_timeout_min-noisy · 100% of steps reverse direction — curve is not a trend
median capped c50 $/effective day (holdout) by label_timeout_min (10 bins)
bin         y  n
180  361.1250 25
240 1077.4300 25
300   30.5619 25
360 2481.2900 25
420  -44.9963 25
480 3424.5600 25
540  671.2200 25
600 2483.4100 25
720 1497.4700 25
900 1951.9900 25
CLEAN: monotone (rho +0.45), spread, interior-span (100%)
NOTE: 10 bins · median capped c50 $/effective day (holdout) 361.1 -> 1,952 · min -45 max 3,425

Что говорит машина о форме этой кривой. Ниже — вывод lib.forensics.read_bin_curve на тех же двух массивах, что нарисованы выше (срез лестница A+B, агрегат по всем θ и TP). Ни одно утверждение о монотонности, плато или пике в тексте отчёта не сделано по картинке: если детектор молчит про тренд, значит тренда в этих числах нет, как бы линия ни выглядела. Колонка n — сколько книг стоит за каждой точкой; там, где она мала, форма — это шум одной книги.

FINDINGS (2 fired, 3 clean)
[MED ] BIN/sample · 10 of 10 bins have n < 30 (min 25) — those points are noise
[MED ] BIN/label_timeout_min-noisy · 50% of steps reverse direction — curve is not a trend
median capped c50 $/day (paper) by label_timeout_min (10 bins)
bin       y  n
180 3271.19 25
240 3433.06 25
300 2048.44 25
360 3246.71 25
420 3326.71 25
480 3522.07 25
540 2635.67 25
600 3048.63 25
720 3575.24 25
900 4273.85 25
CLEAN: monotone (rho +0.39), spread, interior-span (69%)
NOTE: 10 bins · median capped c50 $/day (paper) 3,271 -> 4,274 · min 2,048 max 4,274
FINDINGS (3 fired, 2 clean)
[MED ] BIN/sample · 10 of 10 bins have n < 30 (min 25) — those points are noise
[MED ] BIN/label_timeout_min-monotone · monotone in label_timeout_min (rho=+0.84): -2,581 -> 2,109
[MED ] BIN/label_timeout_min-noisy · 75% of steps reverse direction — curve is not a trend
median capped c50 $/effective day (holdout) by label_timeout_min (10 bins)
bin         y  n
180 -2580.930 25
240 -1624.020 25
300 -2772.320 25
360  -383.185 25
420 -1976.110 25
480  1163.260 25
540 -1127.400 25
600  1159.830 25
720  1290.110 25
900  2109.030 25
CLEAN: spread, interior-span (83%)
NOTE: 10 bins · median capped c50 $/effective day (holdout) -2,581 -> 2,109 · min -2,772 max 2,109

Срез «выход выключен» и чистый клок — контроль беты

Сетка — группа B (плюс контрольный горизонт 180 из A): полный веер 5θ × 5TP на каждом горизонте. Колонка θ −3.0 — это самый низкий порог дизайна, а не выключенный выход. Раньше в этом месте стояло «learned exit не срабатывает вообще»; книги это опровергают, и панель выше теперь печатает измеренные доли. Клетка θ −3.0 × без TP названа «чистый клок» по конфигу (θ на полу и без take-profit), но по факту клоком не является: выход всё равно срабатывает. Таких книг ровно по одной на состояние.

Если чистый клок на длинном горизонте зарабатывает столько же, сколько настроенные руки, то деньги идут от срока удержания, а не от модели, — и это ровно тот вывод, ради которого в плане стоит гейт P2. Сравнение ведётся на общем потолке капитала.

Форензика среза: клок против настроенных рук. Первый блок — сам чистый клок по горизонтам, второй — разность «чистый клок минус медиана настроенных» на том же горизонте. Второй и есть проверка беты: если разность не уходит вниз с ростом горизонта, модель выхода не добавляет ничего сверх времени удержания. Чистый клок — одна книга на горизонт, поэтому n = 1 в первой таблице, и любая её «форма» обязана читаться как единичное наблюдение, а не как кривая отклика.

FINDINGS (3 fired, 2 clean)
[MED ] BIN/sample · 10 of 10 bins have n < 30 (min 1) — those points are noise
[MED ] BIN/label_timeout_min-monotone · monotone in label_timeout_min (rho=+0.84): 2,707 -> 6,819
[MED ] BIN/label_timeout_min-noisy · 62% of steps reverse direction — curve is not a trend
pure-clock capped c50 $/day (paper) by label_timeout_min (10 bins)
bin       y  n
180 2706.88  1
240 3177.33  1
300 4146.96  1
360 3352.18  1
420 5013.76  1
480 3898.32  1
540 3786.07  1
600 5694.61  1
720 7452.14  1
900 6819.42  1
CLEAN: spread, interior-span (90%)
NOTE: 10 bins · pure-clock capped c50 $/day (paper) 2,707 -> 6,819 · min 2,707 max 7,452
FINDINGS (3 fired, 2 clean)
[MED ] BIN/sample · 10 of 10 bins have n < 30 (min 1) — those points are noise
[MED ] BIN/label_timeout_min-monotone · monotone in label_timeout_min (rho=+0.81): -564.3 -> 2,477
[MED ] BIN/label_timeout_min-noisy · 62% of steps reverse direction — curve is not a trend
pure clock MINUS tuned median, $/day by label_timeout_min (10 bins)
bin       y  n
180 -564.31  1
240 -434.28  1
300 2084.80  1
360    0.00  1
420 1777.76  1
480  447.78  1
540 1123.73  1
600 2701.09  1
720 3877.26  1
900 2477.17  1
CLEAN: spread, interior-span (97%)
NOTE: 10 bins · pure clock MINUS tuned median, $/day -564.3 -> 2,477 · min -564.3 max 3,877

Форензика среза: клок против настроенных рук. Первый блок — сам чистый клок по горизонтам, второй — разность «чистый клок минус медиана настроенных» на том же горизонте. Второй и есть проверка беты: если разность не уходит вниз с ростом горизонта, модель выхода не добавляет ничего сверх времени удержания. Чистый клок — одна книга на горизонт, поэтому n = 1 в первой таблице, и любая её «форма» обязана читаться как единичное наблюдение, а не как кривая отклика.

FINDINGS (3 fired, 2 clean)
[MED ] BIN/sample · 10 of 10 bins have n < 30 (min 1) — those points are noise
[MED ] BIN/label_timeout_min-monotone · monotone in label_timeout_min (rho=+0.84): 2,707 -> 6,908
[MED ] BIN/label_timeout_min-noisy · 62% of steps reverse direction — curve is not a trend
pure-clock capped c50 $/day (paper) by label_timeout_min (10 bins)
bin       y  n
180 2706.88  1
240 3095.89  1
300 3901.82  1
360 3208.49  1
420 4863.19  1
480 3895.89  1
540 3849.35  1
600 5621.33  1
720 7459.26  1
900 6908.37  1
CLEAN: spread, interior-span (92%)
NOTE: 10 bins · pure-clock capped c50 $/day (paper) 2,707 -> 6,908 · min 2,707 max 7,459
FINDINGS (3 fired, 2 clean)
[MED ] BIN/sample · 10 of 10 bins have n < 30 (min 1) — those points are noise
[MED ] BIN/label_timeout_min-monotone · monotone in label_timeout_min (rho=+0.83): -564.3 -> 2,635
[MED ] BIN/label_timeout_min-noisy · 62% of steps reverse direction — curve is not a trend
pure clock MINUS tuned median, $/day by label_timeout_min (10 bins)
bin       y  n
180 -564.31  1
240 -337.17  1
300 1853.38  1
360  -38.22  1
420 1536.48  1
480  373.82  1
540 1213.68  1
600 2572.70  1
720 3884.02  1
900 2634.52  1
CLEAN: spread, interior-span (95%)
NOTE: 10 bins · pure clock MINUS tuned median, $/day -564.3 -> 2,635 · min -564.3 max 3,884

P2 — бета-контроль: что остаётся после удаления трёх токенов

Удаляются не три самых прибыльных токена руки, а три токена с наибольшим вкладом в разность рука − контроль, знаково развёрнутую в сторону этой разности. Разница принципиальная: длинная рука на растущей ленте держит тех же победителей, что и контроль, поэтому ранжирование по абсолютному PnL удалило бы общие токены и почти не тронуло дельту. доля сохраняет знак: отрицательная означает, что преимущество не уменьшилось, а перевернулось. Порог — ≥ 50 % на обоих окнах.

Форензика распределения долей P2. lib.forensics.read_distribution по всем рукам, прошедшим P1. Смотреть надо не на медиану, а на левый хвост: доля ниже нуля означает, что после удаления трёх токенов преимущество не сжалось, а сменило знак — такая рука зарабатывала на трёх именах, а не на правиле. Порог 50 % отсекает по обоим окнам сразу.

FINDINGS (3 fired, 2 clean)
[MED ] DIST/skew · skew = -8.84 — mean is not the typical outcome
[MED ] DIST/kurtosis · excess kurtosis = 101.0 — fat tails
[MED ] DIST/outliers · 43 values beyond 5x MAD (max 114.8)
QUANTILES (P2 share of edge kept (paper))
   q  P2 share of edge kept (paper)
0.00                    -114.808585
0.01                     -36.654662
0.05                     -11.638170
0.25                      -1.330717
0.50                      -0.076804
0.75                       0.365905
0.95                       0.613902
0.99                       0.650073
1.00                       0.679059
CLEAN: tail-mass (28.0%), zero-mass
NOTE: n=270 · mean -2.233 · median -0.0768 · std 8.847 · total -603
FINDINGS (4 fired, 1 clean)
[HIGH] DIST/tail-mass · top 1% (3 of 270) carry 97.1% of total magnitude
[MED ] DIST/skew · skew = -16.41 — mean is not the typical outcome
[MED ] DIST/kurtosis · excess kurtosis = 269.4 — fat tails
[MED ] DIST/outliers · 28 values beyond 5x MAD (max 5,365)
QUANTILES (P2 share of edge kept (holdout))
   q  P2 share of edge kept (holdout)
0.00                     -5364.941362
0.01                       -21.243513
0.05                        -2.011422
0.25                        -0.403253
0.50                         0.116281
0.75                         0.279079
0.95                         0.418427
0.99                         0.447678
1.00                         0.469131
CLEAN: zero-mass
NOTE: n=270 · mean -20.93 · median +0.1163 · std 326.6 · total -5,651

Форензика распределения долей P2. lib.forensics.read_distribution по всем рукам, прошедшим P1. Смотреть надо не на медиану, а на левый хвост: доля ниже нуля означает, что после удаления трёх токенов преимущество не сжалось, а сменило знак — такая рука зарабатывала на трёх именах, а не на правиле. Порог 50 % отсекает по обоим окнам сразу.

FINDINGS (3 fired, 2 clean)
[MED ] DIST/skew · skew = -9.09 — mean is not the typical outcome
[MED ] DIST/kurtosis · excess kurtosis = 99.4 — fat tails
[MED ] DIST/outliers · 43 values beyond 5x MAD (max 204.5)
QUANTILES (P2 share of edge kept (paper))
   q  P2 share of edge kept (paper)
0.00                    -204.518559
0.01                     -61.791534
0.05                     -13.128056
0.25                      -1.450585
0.50                      -0.162471
0.75                       0.365429
0.95                       0.612953
0.99                       0.652629
1.00                       0.679059
CLEAN: tail-mass (37.5%), zero-mass
NOTE: n=279 · mean -3.515 · median -0.1625 · std 16.02 · total -980.6
FINDINGS (3 fired, 2 clean)
[MED ] DIST/skew · skew = -7.75 — mean is not the typical outcome
[MED ] DIST/kurtosis · excess kurtosis = 73.8 — fat tails
[MED ] DIST/outliers · 43 values beyond 5x MAD (max 23.4)
QUANTILES (P2 share of edge kept (holdout))
   q  P2 share of edge kept (holdout)
0.00                       -23.398777
0.01                        -9.008962
0.05                        -1.746172
0.25                         0.060763
0.50                         0.286754
0.75                         0.373622
0.95                         0.500777
0.99                         0.603647
1.00                         0.618663
CLEAN: tail-mass (24.9%), zero-mass
NOTE: n=279 · mean -0.1745 · median +0.2868 · std 2.024 · total -48.7

Капитал и просадка — P3 и P4

Слева — цена длинного горизонта в капитале: $/день против среднего задействованного капитала на основном окне. Правило P3 (≥ 0.95× контроля по $/день на $1k) — это диагональ, а не потолок: рука имеет право быть дороже, только если столько же и заработала. Справа — просадка под общим потолком против $/день; правило P4 — не глубже 1.25× контроля.

Ungated: снятие vol-гейтов входа — P6

Каждая ungated-книга сопоставлена с гейтованной книгой в той же точке overlay — та же θ, тот же take-profit на состоянии-близнеце, чей рецепт совпадает с ней во всём, кроме двух полей гейтов. Близнецы находятся сравнением самих рецептов, не по руками составленному списку; в 264 ungated-руки живут на двух горизонтах, поэтому каждая находит своего близнеца на своём горизонте, а не схлопывается на контроль. ×DD — отношение просадки к близнецу. Правило P6: снятие безопасно только внутри 1.10× просадки близнеца при PnL не ниже его.

Контроли: против чего считаются P1–P4

Обе строки живут внутри свипа — тот же движок, та же лента, тот же потолок капитала. Решающий базис — A_ctl__thm3__tp25__f77; t26 публикуется как вторая ссылка и решений не несёт.

линиясплитрецептосн. 31 авг → 5 сенholdout 5 → 7 сенholdout, $/эфф. деньфорвардпросадкаbp за $·чсделокпик кап.Jaccard входов
ctl t20
A_ctl__thm3__tp25__f77
08-31 / 09-05рецепт t20, переобученный на 29/31 · tmo 180$3,440$251$268$2,529−$4,434143.01,115$39,7380.47
к прод-t20
ctl t26
A2_t26__thm1__tp40__f77
08-31 / 09-05рецепт t26 (C_tmo120), переобученный на 29/31 · tmo 120$886−$329−$343$539−$3,210130.71,038$17,4780.48
к прод-t20

Замороженные боевые линии, переигранные на этой же ленте

линиясплитрецептосн. 31 авг → 5 сенholdout 5 → 7 сенholdout, $/эфф. деньфорвардпросадкаbp за $·чсделокпик кап.Jaccard входов
прод t20
веса заморожены · парити: стабильный префикс, сверен на пересечении окон (слабее) (н/д)
08-19 / 08-21optimized_K4__r14_zm05 · tmo 180 · θ −3.0 · TP 0.25 · сплит 19/21$4,724$2,195$2,341$4,001−$2,470168.61,346$39,730136 · 231
бьют: осн. · holdout
↳ A_ctl__thm3__tp25__f77
группа A: тот же рецепт t20, переобученный на 29/31
08-31 / 09-05тот же рецепт, веса переобучены на свежем сплите$3,440
-27 %
$251
-89 %
$268$2,529
-37 %
−$4,434143.01,115$39,7380.47
Jaccard входов
прод t26
веса заморожены · парити: стабильный префикс книги (слабее) (н/д)
08-25 / 08-27C_tmo120__thm1__tp40 · tmo 120 · θ −1.0 · TP 0.40 · сплит 25/27$5,094$6,170$6,438$5,401−$1,808309.71,275$31,849112 · 111
бьют: осн. · holdout
↳ A2_t26__thm1__tp40__f77
группа A2: тот же рецепт t26, переобученный на 29/31
08-31 / 09-05тот же рецепт, веса переобучены на свежем сплите$886
-83 %
−$329
-105 %
−$343$539
-90 %
−$3,210130.71,038$17,4780.51
Jaccard входов

Обе боевые линии переигрываются с замороженными весами на том же снапшоте, что и весь свип, поэтому их числа сравнимы со свипом напрямую. Под каждой — рука свипа с тем же рецептом, переобученная на календаре 29/31: разница между этими двумя строками и есть цена переобучения, всё остальное совпадает. Колонка «бьют» — сколько книг свипа из 617 обошли линию на основном окне и на holdout (по эффективным дням). Окно 2026-08-29 → 2026-08-31 для прод-линий вне обучения, а для свипа это его калибровка, поэтому честно сравнивать можно только по основному окну, holdout и форварду.

frozen-replay: cutoff 2026-09-07 00:00:00 · снапшот /workspace/modelier/workspace/snapshots/shock_v2_20260907_0000_264 · режимы парити: t26 — стабильный префикс книги (слабее), t20 — стабильный префикс, сверен на пересечении окон (слабее) · без падений
t26: 3,492 входов, $53,611 итогового c50, порог 0.6960 · t20: 4,916 входов, $51,320 итогового c50, порог —

Форензика самой контрольной кривой. lib.forensics.read_series на накопленной кривой переобученного контроля t20 — той самой линии, относительно которой считаются P1–P4. Если у контроля своя концентрация или свой режим, то и всякая дельта к нему наследует эту же проблему; это единственная причина, по которой блок стоит здесь, а не в приложении.

TIMEFRAME  n=216 · 1h spacing (regular) · 9.0d span · 2026-08-29 00:00..2026-09-06 23:00 UTC
FINDINGS (4 fired, 12 clean)
[HIGH] DD/unrecovered · worst drawdown never recovered — 23.0h under water to end of series
[HIGH] STRUCTURE/segment-dominance · one slow_grind segment holds 53.9% of total (2026-08-30 14:00..2026-09-06 00:00, 73.3% of elapsed time)
[MED ] REGIME/sign-flip · 1 of 6 segments net-negative; worst -6,934.50 at 2026-09-06 01:00
[MED ] DD/anatomy · single worst row is 63% of max DD (-4,344.30 of -6,934.50)
SHAPE  slow_grind(27.0h, +332$/h) -> spike(+1.05e+04$ in 4.0h) -> slow_grind(4.0h, +510$/h) -> slow_grind(6.4d, +139$/h) -> steep_selloff(5.0h, -1.39e+03$/h) -> slow_grind(16.0h, +239$/h)
DRAWDOWNS (worst 3)
  #1 -6,934 (-16.2%) · peak 2026-09-06 00:00 -> trough 2026-09-06 06:00 (6.0h) · NOT recovered
  #2 -4,344 (-14.6%) · peak 2026-08-31 21:00 -> trough 2026-08-31 22:00 (1.0h) · recovered in 41.0h
  #3 -2,043 (-5.0%) · peak 2026-09-05 01:00 -> trough 2026-09-05 05:00 (4.0h) · recovered in 9.0h
STABILITY  worst_half=+2676  evenness=1723.309  sign_consistency=0.88  best_chunk_share=0.355
CLEAN: top-trade, top-day, drop-top-3, gini, segment-spread, arrival, dd-depth (-6,934), dd-repeat, ladder, worst_half, sign-consistency, evenness

Контроли: против чего считаются P1–P4

Обе строки живут внутри свипа — тот же движок, та же лента, тот же потолок капитала. Решающий базис — A_ctl__thm3__tp25__f77; t26 публикуется как вторая ссылка и решений не несёт.

линиясплитрецептосн. 31 авг → 5 сенholdout 5 → 7 сенholdout, $/эфф. деньфорвардпросадкаbp за $·чсделокпик кап.Jaccard входов
ctl t20
A_ctl__thm3__tp25__f77
08-31 / 09-05рецепт t20, переобученный на 29/31 · tmo 180$3,440−$2,521−$2,641$1,325−$4,434143.01,115$39,7380.47
к прод-t20
ctl t26
A2_t26__thm1__tp40__f77
08-31 / 09-05рецепт t26 (C_tmo120), переобученный на 29/31 · tmo 120$886−$1,543−$1,591$24−$3,210130.71,038$17,4780.48
к прод-t20

Замороженные боевые линии, переигранные на этой же ленте

линиясплитрецептосн. 31 авг → 5 сенholdout 5 → 7 сенholdout, $/эфф. деньфорвардпросадкаbp за $·чсделокпик кап.Jaccard входов
прод t20
веса заморожены · парити: точное совпадение популяций выходного референса (точное)
08-19 / 08-21optimized_K4__r14_zm05 · tmo 180 · θ −3.0 · TP 0.25 · сплит 19/21$4,724−$39−$41$3,034−$2,470168.61,346$39,730133 · 268
бьют: осн. · holdout
↳ A_ctl__thm3__tp25__f77
группа A: тот же рецепт t20, переобученный на 29/31
08-31 / 09-05тот же рецепт, веса переобучены на свежем сплите$3,440
-27 %
−$2,521
+6295 %
−$2,641$1,325
-56 %
−$4,434143.01,115$39,7380.47
Jaccard входов
прод t26
веса заморожены · парити: точное совпадение популяций выходного референса (точное)
08-25 / 08-27C_tmo120__thm1__tp40 · tmo 120 · θ −1.0 · TP 0.40 · сплит 25/27$5,094$4,022$4,148$4,714−$1,808309.71,275$31,849108 · 100
бьют: осн. · holdout
↳ A2_t26__thm1__tp40__f77
группа A2: тот же рецепт t26, переобученный на 29/31
08-31 / 09-05тот же рецепт, веса переобучены на свежем сплите$886
-83 %
−$1,543
-138 %
−$1,591$24
-99 %
−$3,210130.71,038$17,4780.51
Jaccard входов

Обе боевые линии переигрываются с замороженными весами на том же снапшоте, что и весь свип, поэтому их числа сравнимы со свипом напрямую. Под каждой — рука свипа с тем же рецептом, переобученная на календаре 29/31: разница между этими двумя строками и есть цена переобучения, всё остальное совпадает. Колонка «бьют» — сколько книг свипа из 617 обошли линию на основном окне и на holdout (по эффективным дням). Окно 2026-08-29 → 2026-08-31 для прод-линий вне обучения, а для свипа это его калибровка, поэтому честно сравнивать можно только по основному окну, holdout и форварду.

frozen-replay: cutoff 2026-09-07 18:00:00 · снапшот /workspace/modelier/workspace/snapshots/shock_v2_20260907_1800_264 · режимы парити: t20 — точное совпадение популяций выходного референса, t26 — точное совпадение популяций выходного референса · без падений
t20: 4,824 входов, $47,153 итогового c50, порог 0.6914 · t26: 3,660 входов, $52,334 итогового c50, порог 0.6960

Форензика самой контрольной кривой. lib.forensics.read_series на накопленной кривой переобученного контроля t20 — той самой линии, относительно которой считаются P1–P4. Если у контроля своя концентрация или свой режим, то и всякая дельта к нему наследует эту же проблему; это единственная причина, по которой блок стоит здесь, а не в приложении.

TIMEFRAME  n=234 · 1h spacing (regular) · 9.7d span · 2026-08-29 00:00..2026-09-07 17:00 UTC
FINDINGS (6 fired, 10 clean)
[HIGH] REGIME/segment · rate spread 3.3x across segments: +331.9/h (2026-08-29 00:00) -> +101.1/h (2026-08-30 14:00)
       verify: forensics.segment_series(t, cum)
[HIGH] DD/depth · max drawdown -10,613.70 = 33% of final total, trough 2026-09-07 16:00
       verify: forensics.drawdown_table(t, level)
[HIGH] DD/unrecovered · worst drawdown never recovered — 41.0h under water to end of series
[HIGH] STRUCTURE/segment-dominance · one slow_grind segment holds 58.1% of total (2026-08-30 14:00..2026-09-07 08:00, 81.2% of elapsed time)
[MED ] CONCENTRATION/day · top-1 day = 43.5% of total (2026-08-30)
[MED ] REGIME/sign-flip · 1 of 5 segments net-negative; worst -7,896.50 at 2026-09-07 09:00
SHAPE  slow_grind(27.0h, +332$/h) -> spike(+1.05e+04$ in 4.0h) -> slow_grind(4.0h, +510$/h) -> slow_grind(7.8d, +101$/h) -> steep_selloff(8.0h, -987$/h)
DRAWDOWNS (worst 3)
  #1 -1.061e+04 (-24.7%) · peak 2026-09-06 00:00 -> trough 2026-09-07 16:00 (40.0h) · NOT recovered
  #2 -4,344 (-14.6%) · peak 2026-08-31 21:00 -> trough 2026-08-31 22:00 (1.0h) · recovered in 41.0h
  #3 -2,043 (-5.0%) · peak 2026-09-05 01:00 -> trough 2026-09-05 05:00 (4.0h) · recovered in 9.0h
STABILITY  worst_half=+501.3  evenness=1027.675  sign_consistency=0.75  best_chunk_share=0.404
CLEAN: top-trade, drop-top-3, gini, arrival, dd-repeat, dd-single-row, ladder, worst_half, sign-consistency, evenness

Распределение по всем книгам свипа

Перцентили считаются по книгам внутри выбранной популяции; колонки контроль — это позиция самого контроля в этом распределении, а не отдельная популяция. Популяция лестница — группы A+B, чистый клок — книги с θ = −3.0 и без take-profit. Название историческое и вводит в заблуждение: выход в этих книгах срабатывает, см. секцию «Срез „выход выключен“».

Маргинальный эффект каждой оси

Медиана по всем книгам с данным уровнем оси. Это маргинальный, а не причинный эффект: уровни не сбалансированы между группами, поэтому ось, встречающаяся в основном внутри одной группы, наследует её уровень. Срез лестница — это единственный сбалансированный срез в дизайне.

Конец ленты: аудит на артефакт обрезки

открыто на cutoff
0
Ни одна из 1,496,393 строк в 617 книгах не имеет горизонта, уходящего за 2026-09-07 00:00:00 (TAPE_CUTOFF_INCLUSIVE=False, контракт cf84ac8920a654f5). Движок отказывается открывать позицию, чей клок не помещается в ленту.
выходов на/после cutoff
0
Ни одного policy_exit ≥ cutoff. Списывать в «−капитал» нечего: закрывать на границе нечего.
запас последнего входа
+1.25 мин
Минимум по всем книгам расстояния от последнего входа до cutoff − LABEL_TIMEOUT_MIN. Отрицательное значение означало бы обрезанную позицию; их нет.
строк ровно на −100 %
2,834
Это 0.19 % строк и это настоящие раги, разбросанные по ленте. Из них вошли в последние 12 ч ленты 1.6%, в последние 24 ч — 41.0%. Списание на границе дало бы здесь ~100 %.
регион разгрузки
3 ч → 15 ч
Последние LABEL_TIMEOUT_MIN минут новых входов нет вообще. У контроля 180 м это 3 часа, у 900 м — 15. Хвост кривой в этой зоне не сопоставим ни с её телом, ни между руками; он заштрихован на графике.
на общем окне входов
×4.39
Если обрезать окно входов до 06.09 09:00, одинакового для всех горизонтов, лучшая рука даёт $10,476/день против $2,385/день у контроля 180 м. В отчётном окне это было ×3.67. Край ленты занижал длинные горизонты, а не завышал.

Проверка идёт по книгам: 617 паркетов прочитаны целиком в lib/08_tail_artifact_audit.py, lib/09_tail_hourly.py, lib/10_starved_tail_control.py и lib/11_capital_clip_bias.py; ни одно число здесь не снято с картинки. Реконструкция кривой из книг совпала с нарисованной с точностью до шага квантования (max|Δ| = $0.5 на всех 216 часах).

1 · Обрезки нет: последний вход против cutoff

горизонт, мкнигпоследний входзапас, миноткрыто на cutoffвыход ≥ cutoffхудший pnl_frac
120252026-09-06 21:24+36.0000-1.00
1801032026-09-06 20:53+7.0000-1.00
240252026-09-06 19:56+4.0000-1.00
300252026-09-06 18:39+21.0000-1.00
3601152026-09-06 17:56+4.0000-1.00
420252026-09-06 16:58+1.2500-1.00
480252026-09-06 15:43+17.0000-1.00
540672026-09-06 14:51+9.0000-1.00
600312026-09-06 13:35+24.7700-1.00
7201452026-09-06 11:57+3.0000-1.00
900312026-09-06 08:58+2.0000-1.00

Столбец запас — минуты между последним входом книги и cutoff − горизонт. Он положителен во всех 617 книгах, то есть движок ни разу не открыл позицию, которая не успевала бы отработать клок до конца ленты. Поэтому «активные позиции засчитаны как −капитал» — не про этот свип: активных позиций на конце ленты попросту нет. Худший pnl_frac = −1.00 достигается, но это раги в середине ленты, а не списание на границе.

2 · Что на самом деле происходит в хвосте

горизонт, мразгрузка, ч$/ч хвост$/ч телоexit сработал хвосттеломедиан. удержание хвосттелодоля плюсовых хвосттело
1202−$21$1660 %24 %120 м120 м40 %59 %
1803$263$19923 %37 %180 м180 м48 %59 %
2404$163$22645 %61 %240 м158 м55 %61 %
3005$0$16480 %95 %286 м63 м50 %61 %
3606−$36$21542 %62 %360 м194 м47 %61 %
4207−$69$20393 %99 %97 м69 м32 %64 %
4808−$189$20350 %85 %464 м175 м27 %61 %
5409−$139$20732 %88 %540 м75 м30 %65 %
60010−$42$17992 %99 %174 м82 м30 %64 %
72012−$248$30430 %85 %720 м114 м27 %67 %
90015−$30$24457 %95 %464 м71 м43 %69 %

Просадка на конце кривой реальна, но её механизм — состав, а не бухгалтерия. В последние горизонт минут новых входов нет, поэтому туда попадают только позиции, открытые раньше и дожившие до этого часа, — то есть ровно те, на которых take-profit и обученный выход не сработали. Для 720 м это видно буквально: медианное удержание в хвосте 720 м (полный клок) против 114 м в теле, выход срабатывает в 30 % случаев против 85 %, доля плюсовых сделок 27 % против 67 %. Хвост — это осадок, а не торговля. Он заштрихован на графике выше, и его ширина разная у разных рук: 3 часа у контроля 180 м, 12–15 часов у длинных.

2b · Откуда взялась просадка на конце: посделочно

рукагоризонтзона разгрузкивыходовPnL зонывходов внутридоехали до клокаPnL клок-выходовсработал выходPnL выходов
B_tmo720__thm3__tp40__f77720 м12 ч144−$7,4240129−$8,72815$1,304
A_ctl__thm3__tp25__f77180 м3 ч25$832018−$2013$474

Вопрос по существу: чтобы закрыть сделку в последний час просадки, нужны её следующие 12 часов — либо они в ленте, либо сделки не должно быть в книге. В ленте. Последний вход руки 720 м — 2026-09-06 11:49:00, его клок кончается 2026-09-06 23:49:00, то есть до 2026-09-07 00:00:00. Все 144 выходов последних 12 часов принадлежат сделкам, открытым 2026-09-06 00:05:00 … 2026-09-06 11:49:00; входов внутри окна просадки — 0. Просадку делают не новые сделки, а 129 из 144 позиций, доехавших до полного клока: они дают −$8,728, тогда как 15 сработавших выходов дают $1,304. Цены живые, не залипшие: у этих клок-выходов 125 различных значений pnl_frac на 129 сделок; форма та же, что у клок-выходов в теле книги (медиана -0.155 против -0.111), просто левый хвост тяжелее (-0.925 против -0.504) — это рынок тех часов, а не подмена марки. Просадка ещё и концентрирована: 42 токенов, худшие три дают −$4,138 из −$7,424, то есть 56%. У контроля 180 м его собственная зона разгрузки — 3 часа, 25 сделок, $832, входов внутри тоже 0.

3 · Решающий контроль: одинаковое окно входов

горизонт, мкниг$/день как в отчёте$/день на общем окнеΔholdout: дней входа из 2holdout $/день номиналпо доступному окну
12025$2,782$2,476-11.0 %1.92$2,261$2,360
180103$2,626$2,589-1.4 %1.88$497$530
24025$2,900$2,992+3.2 %1.83$988$1,077
30025$1,492$1,572+5.4 %1.79$27$31
360115$3,354$3,745+11.6 %1.75$2,383$2,723
42025$2,274$2,504+10.1 %1.71−$38−$45
48025$3,247$3,600+10.9 %1.67$2,854$3,424
54067$1,959$2,072+5.8 %1.62$1,178$1,449
60031$2,719$2,824+3.9 %1.58$1,997$2,522
720145$3,496$3,894+11.4 %1.50$1,419$1,892
90031$2,622$2,879+9.8 %1.38$1,079$1,569

Если это смещение и правда красит длинные горизонты, оно исчезнет на окне, где у всех рук одинаковая возможность войти. Такое окно — 31.08 → 06.09 09:00: это cutoff − 900 м, самый широкий горизонт дизайна, и любой вход в нём успевает отработать при любом таймауте свипа. Преимущество не исчезает, а растёт: медиана $/день поднимается на каждом горизонте от 240 м и выше. Основное окно (paper, 31.08 → 05.09) вообще не затронуто — оно кончается на двое суток раньше cutoff, доступных дней входа там 5.00 при любом горизонте. Затронут holdout: у 900 м реально доступно 1.38 дня входа из номинальных 2.00, а делится всё равно на 2.00 — это штраф длинным рукам до −31 %, а не подарок.

4 · Единственное смещение в пользу длинных: P3

горизонт, мкапитало-время недосчитаноP3 в отчёте, $/день/1kP3 без обрезки краязавышение P3
1201.52 %415409+1.5 %
1801.77 %349341+2.3 %
2401.87 %299294+1.7 %
3003.13 %314303+3.4 %
3601.10 %261260+0.5 %
4203.23 %353340+3.9 %
4800.85 %224222+0.9 %
5403.93 %146140+4.2 %
6001.85 %283273+3.5 %
7203.53 %274261+4.7 %
9005.30 %365332+10.1 %

lib.capital.window_capital_stats обрезает интервал удержания правой границей окна, а _window_economics берёт PnL сделки целиком, если её вход попал в окно. На правом краю paper эти два правила расходятся: позиция, открытая 04.09 в 22:00 с горизонтом 720 м, приносит все свои доллары, но отдаёт в знаменатель только 2 часа капитала из 12. usd_per_day_per_1k_capital сводится к 24000 × PnL / капитало-часы, поэтому недосчёт знаменателя завышает P3 — и тем сильнее, чем длиннее горизонт. Масштаб мал: +4.7 % на 720 м и +10.1 % на 900 м против +2.3 % у контроля 180 м, то есть чистая фора 2–8 п.п. Вердикт свипа это не двигает: связывающим был P2 (бета-контроль), а он прошёл 0 рук из 268 и от капитала не зависит.

Лента до упора: тот же дизайн на ленте до 07.09 18:00

вердикт
край ленты — 60% просадки, остальное рынок
Те же 12 часов 06.09 12:00 → 07.09 00:00 давали −$7,424, когда короткая лента уже запретила там входы. На длинной ленте, где входы разрешены, те же часы дают −$2,933. Значит $4,491 из просадки (60%) — это зона разгрузки, а −$2,933 остаются и являются рынком тех часов. Ни одна из двух версий целиком не верна, и обе были заявлены раньше.
лента не переписывает прошлое
0 расхождений входа
Проверено по книгам: 1,445,686 позиций с входом до 06.09 09:00 в 617 парах книг. Ноль расхождений в size, score, pnl_frac, entry и exit — цены, размеры и метки под длинной лентой те же до последнего бита. Двигается только выход: 22,930 позиций (1.59%) закрываются в другую минуту, 4,887 раз переключается triggered, максимальный сдвиг 898 мин. Это переобученная exit-модель, а не утечка в ленте. Единственная асимметрия входа — 31 позиций, которых на короткой ленте нет вовсе, при нуле в обратную сторону; на 1.4 млн сделок это шум допуска, но он не нулевой.
новая зона разгрузки
−$1,998
Просадка переехала вместе с краем: последние 12 ч длинной ленты (2026-09-07 06:00:00 → 2026-09-07 18:00:00, 11 часов с выходами) снова отрицательны. Входов внутри — 0 при 63 выходах.
подпись края, 617 книг × 2 ленты
79.1% / 99.7% хуже интерьера
Последние 3 часа ленты против тех же часов суток 1–4 дня раньше, по каждой книге отдельно. Край хуже собственного контроля у 79.1% книг короткой ленты и у 99.7% длинной; отрицателен у 54% против 18% в интерьере и у 88% против 26%. Входов внутри окна — медиана 0 против 19–29 в интерьере: там не торгуют, там разгружаются. Но величина не воспроизводится: медиана края −$38 на короткой ленте и −$1,400 на длинной. Пара −$2,117 / −$2,194 у фокусной руки — совпадение при n = 2; на популяции устойчиво только направление, не сумма.
цена переобучения выхода
нетто $5,302
По 617 книгам сумма сдвигов PnL на общем окне — $5,302 при максимуме $7,102 на одной книге и 151 книгах, совпавших до цента. Сдвиг почти симметричен: это шум переобучения, а не систематическая фора длинной ленте. Но он ставит предел точности любого сравнения двух прогонов на уровне нескольких тысяч долларов на книгу.
тело длинной ленты
$104,501
Всё, что до новой зоны разгрузки. Это и есть та часть кривой, которую имеет смысл сравнивать между руками; хвост — осадок.

Тот же дизайн из 617 точек, тот же календарь обучения (train 29.08 · val 31.08 · paper 05.09), единственное отличие — конец ленты сдвинут с 2026-09-07 00:00:00 на 2026-09-07 18:00:00, до последней минуты, которая вообще есть в реплике. Книги сопоставлены по _model_id, а не по point_id: другой cutoff меняет дайджест конфига, поэтому одна и та же рука получает разный идентификатор ячейки. Источник — lib/15_cutoff_compare.py, читает книги целиком.

Накопленный PnL руки B_tmo720__thm3__tp40__f77 под двумя лентами

зона разгрузки ленты до 00:00зона разгрузки ленты до 18:00−$6,504$23,847$54,199$84,550$114,90130.0831.0801.0902.0903.0904.0905.0906.0907.09последний вход, одинаково доступный обеим лентамлента до 07.09 00:00лента до 07.09 18:00

Красная полоса — зона разгрузки короткой ленты (2026-09-06 12:00:00 → 2026-09-07 00:00:00), зелёная — зона разгрузки длинной (2026-09-07 06:00:00 → 2026-09-07 18:00:00). До 06.09 09:00 кривые обязаны совпадать и совпадают: там сделки идентичны. Расходятся они ровно там, где короткая лента уже запретила входы, а длинная — ещё нет. Контроль 180 м за то же время: 2,264 сделок и $39,813 на короткой ленте против 2,486 и $32,379 на длинной.

Тело против зоны разгрузки, по горизонтам и лентам

горизонт, млента докнигPnL телавыходов$/выход телоPnL разгрузкивыходов$/выход разгрузка
12000:0025$823,77055,763$14.77−$1,446112−$12.91
12018:0025$731,30460,875$12.01$4,644825$5.63
18000:00103$4,303,708273,617$15.73$67,4792,241$30.11
18018:00103$3,734,108299,006$12.49−$151,8244,086−$37.16
24000:0025$1,024,36957,410$17.84$18,546840$22.08
24018:0025$933,61162,449$14.95−$60,874951−$64.01
30000:0025$862,66157,151$15.09$215299$0.72
30018:0025$827,68661,642$13.43−$138,0091,808−$76.33
36000:00115$5,506,337271,287$20.30−$25,1313,907−$6.43
36018:00115$5,819,170289,404$20.11−$1,095,32011,267−$97.21
42000:0025$1,142,73857,010$20.04−$13,844540−$25.64
42018:0025$1,162,10261,243$18.98−$215,7512,182−$98.88
48000:0025$1,032,82057,200$18.06−$36,315800−$45.39
48018:0025$1,074,62660,915$17.64−$140,4771,360−$103.29
54000:0067$2,834,549149,450$18.97−$81,8271,961−$41.73
54018:0067$2,850,796158,990$17.93−$326,6954,854−$67.30
60000:0031$1,454,74168,274$21.31−$38,9161,545−$25.19
60018:0031$1,469,13873,464$20.00−$81,2831,808−$44.96
72000:00145$9,905,640355,732$27.85−$594,58514,264−$41.68
72018:00145$9,682,100385,482$25.12−$110,8366,641−$16.69
90000:0031$1,660,15865,397$25.39−$26,0281,593−$16.34
90018:0031$1,674,16971,241$23.50−$26,9911,072−$25.18

Колонка $/выход — единственная честная в этой таблице: у тела и у разгрузки разное число выходов, поэтому абсолютные суммы несравнимы. Если у одного и того же горизонта $/выход разгрузка заметно ниже $/выход тело на обеих лентах, это свойство зоны, а не даты.

Край против интерьера — все 617 книг каждой ленты

горизонт, млента докнигдоля минусовых краёвмедиана краямедиана интерьеракрай хуже интерьеравходов в крае
1202026-09-07 00:002520%$1,186$28720%1
1802026-09-07 00:0010322%$788$41137%0
2402026-09-07 00:002540%$46$28472%0
3002026-09-07 00:002580%−$28$233100%0
3602026-09-07 00:0011561%−$192$40986%0
4202026-09-07 00:002560%−$27$239100%0
4802026-09-07 00:002560%−$142$587100%0
5402026-09-07 00:006760%−$213$34776%0
6002026-09-07 00:003148%$0$596100%0
7202026-09-07 00:0014568%−$974$27897%0
9002026-09-07 00:003168%−$215$371100%0
1202026-09-07 18:002576%−$94$465100%22
1802026-09-07 18:00103100%−$1,218$554100%0
2402026-09-07 18:0025100%−$1,888$367100%0
3002026-09-07 18:002580%−$2,817$265100%0
3602026-09-07 18:0011597%−$4,430$504100%0
4202026-09-07 18:002580%−$5,658$264100%0
4802026-09-07 18:0025100%−$5,243$456100%0
5402026-09-07 18:006782%−$4,112$18699%0
6002026-09-07 18:003177%−$2,815$186100%0
7202026-09-07 18:0014585%−$618$47399%0
9002026-09-07 18:003165%−$459$393100%0

Интерьер — те же часы суток за 1, 2, 3 и 4 дня до конца ленты, медиана по четырём окнам, считается для каждой книги отдельно; так снимается и время суток, и размер книги. Край систематически хуже интерьера на обеих лентах, и это не обрезка позиций (её закрывает секция «Конец ленты»), а состав выходов: входов внутри окна медианно ноль. На короткой ленте край положителен на 120 и 180 м (+$1,186 и +$788): такая рука успевает и войти, и выйти внутри окна. На длинной он отрицателен на всех горизонтах, причём максимум просадки — в середине (360–480 м), а не на самых длинных. То есть ширина зоны разгрузки задаёт знак, а сумму задаёт рынок тех конкретных часов.

Что удлинение ленты сделало со всем свипом

основное окно не выросло
5.00 д на обеих
У 617 из 617 книг capped_paper_days совпадает до второго знака. Добавленные 18 часов физически не могут попасть в основное окно, поэтому решающая метрика лидерборда на обеих лентах меряет одни и те же пять дней. Всё новое — в forward: 617 из 617 книг, 7.00 → 7.75 д.
forward: добавленное время красное
медиана −$725/день
По 617 книгам медиана capped_forward_c50_usd_per_day падает с $2,764 до $1,833/день, медиана поштучной дельты −$725; ухудшились 580 (94.0 %), улучшились 37 (6.0 %). p10 −$1,254, p90 −$60. Это тот же вывод, что у 18_edge_signature, только на популяции свипа, а не на крае.
порядок рук устоял
ρ = 0.9981
Спирмен по 617 книгам на основном окне 0.9981, на forward 0.9678 (scipy.stats.spearmanr). Топ-15 совпадает на 15 из 15. Лента сдвигает уровни, но не переупорядочивает свип: выбор руки не зависит от того, где кончилась лента.
вердикты почти не двинулись
29 из 617
NO_EDGE 348 → 339, REGIME_LOADING 268 → 277, CONTROL 1 → 1. Переехали 29 книги: 19 из NO_EDGE в REGIME_LOADING и 10 обратно. P1 43.4 % → 44.9 %, P2 0 из 617 на обеих лентах. Ни одна рука не становится кандидатом от того, что лента длиннее.

Обе ленты — один и тот же дизайн из 617 книг, сопоставленных по _model_id. Гипотеза раунда — «держать дольше лучше» — проверяется здесь на forward, единственном окне, которое выросло. Вывод: добавленные 18 часов убыточны для всех горизонтов, но длинные теряют кратно меньше — на сбалансированной лестнице группы B медиана Δ идёт от −$1,181 на 240 м до −$164 на 720 м. Это относительное преимущество удержания, а не заработок.

Лестница горизонтов внутри одной группы B (225 книг, 9 горизонтов) — состав рецептов зафиксирован, меняется только удержание

горизонт, мкнигосн. $/д на 00:00Δ осн., медианавыросли осн.fwd $/д на 00:00Δ fwd, медианавыросли fwd
24025$3,612−$8120 %$2,900−$1,1810 %
30025$2,062−$1116 %$1,492−$9180 %
36025$3,352−$3424 %$3,008−$9030 %
42025$3,236−$2520 %$2,274−$1,2270 %
48025$3,451$7172 %$3,247−$6260 %
54025$2,662−$048 %$1,959−$7870 %
60025$2,994−$644 %$2,712−$4030 %
72025$3,575$580 %$2,844−$16416 %
90025$4,342−$3536 %$3,472−$1770 %

Тот же срез по всему свипу — читать осторожно: состав групп на разных горизонтах разный

горизонт, мкнигосн. $/д на 00:00Δ осн., медианавыросли осн.fwd $/д на 00:00Δ fwd, медианавыросли fwd
12025$2,838$00 %$2,782−$6780 %
180103$3,424$013 %$2,563−$1,2290 %
24025$3,612−$8120 %$2,900−$1,1810 %
30025$2,062−$1116 %$1,492−$9180 %
360115$3,589$030 %$3,170−$8670 %
42025$3,236−$2520 %$2,274−$1,2270 %
48025$3,451$7172 %$3,247−$6260 %
54067$2,600−$046 %$1,959−$5991 %
60031$3,021−$1739 %$2,719−$4030 %
720145$4,099$152 %$3,565−$7925 %
90031$3,286−$3829 %$2,622−$1850 %

Боевые линии с замороженными весами

линияосн. $/д на 00:00Δ осн.fwd $/д на 00:00Δ fwd
frz_t20$4,724$0$4,001−$968
frz_t26$5,094$0$5,401−$688
Строки этой таблицы сравнивать между лентами нельзя напрямую. Реплей прод-линий получает exit_reference_parity только тогда, когда research-лента точно воспроизводит популяцию выходного референса боевой линии; иначе он падает в более слабую реконструкцию по префиксу книги. На короткой ленте обе линии получили слабый режим, на длинной — точный. Значит разница между лентами у этих двух строк несёт в себе и длину ленты, и смену режима реконструкции, и разделить их этим прогоном нельзя. Книг свипа это не касается: они на обеих лентах считаются одним и тем же движком, поэтому все карточки и лестницы выше остаются в силе.
линиярежим на ленте 00:00режим на ленте 18:00входов 00:00 → 18:00итоговый c50 00:00 → 18:00
t20стабильный префикс, сверен на пересечении окон (слабее)точное совпадение популяций выходного референса4,916 → 4,824$51,320 → $47,153
t26стабильный префикс книги (слабее)точное совпадение популяций выходного референса3,492 → 3,660$53,611 → $52,334

Что здесь не измерено. Основное окно у всех книг одинаковой длины, входы совпадают до бита (17_exit_only_drift: 0 расхождений входа на 1 445 686 сделок), и всё же у 458 книг из 617 метрика основного окна сдвигается на небольшую величину (медиана ровно $0, p10 −$96, p90 $83); ровно нулевую дельту дают 159 книг. Правдоподобный канал — жадный реплей под общим потолком капитала, где сдвинувшийся выход у края освобождает капитал в другую минуту, но это не проверено по книгам и здесь как гипотеза. Источник секции — lib/20_tape_compare.py.

Чему в этом отчёте верить нельзя

  1. Holdout в два дня — это фильтр знака, а не измеритель величины. Окно 2026-09-05 → 2026-09-07 даёт 2 дня. Оно годится, чтобы отбросить руку, которая перевернулась, и не годится, чтобы поверить в её $/день. Любое число holdout в этом отчёте читается как знак, а не как оценка.
  2. Sharpe здесь не считается вообще. lib.metrics.MIN_OBS = 30 дневных наблюдений; у окон 264 их 5 и 2. Ни одна ячейка отчёта не содержит Sharpe, и её отсутствие — не пропуск, а правило репозитория.
  3. Эффекты осей — маргинальные, а не причинные. Уровни label_timeout_min, max_depth, n_exit_families не сбалансированы между группами: ось, встречающаяся в основном внутри одной группы, наследует её уровень. Единственный сбалансированный срез — лестница A+B, где на каждом горизонте стоит идентичный веер 5θ × 5TP. Все причинные утверждения про горизонт делаются только там.
  4. Последние LABEL_TIMEOUT_MIN минут ленты — не торговля, а разгрузка. Входов там нет вообще: движок не открывает позицию, чей клок не помещается до 2026-09-07 00:00:00. Значит, выходы в этой зоне — смещённая выборка: только те позиции, на которых take-profit и обученный выход не сработали. Зона заштрихована на графике; её ширина 3 ч у контроля 180 м и 12–15 ч у длинных рук, поэтому хвосты кривых нельзя сравнивать между руками. На метрики это не влияет: окна режутся по входу, и у каждого входа исход полный. Разбор — в секции «Конец ленты».
  5. Rug-снапшот содержит look-ahead. Признаки безопасности токена собраны на момент снятия снапшота, а не на момент входа, поэтому лента систематически чище, чем была в реальном времени. Это смещение общее для свипа и для контроля и потому почти уходит из разностей; в абсолютных $/день оно остаётся и завышает их.
  6. Holdout скорректирован на срез ленты. Рука с таймаутом 900 мин не успевает закрыть последние входы внутри holdout, поэтому публикуется c50_usd_per_effective_day — PnL, делённый на реально доступное руке время, а не на календарные двое суток. Поправка помогает длинным рукам, поэтому рядом печатается p1_pass_strict — тот же гейт без неё.
  7. Потолок капитала — это правило сравнения, а не свойство руки. Все решающие числа пересчитаны под общим потолком $53,004 (frz_t20): при его достижении вход пропускается. Standalone-числа без потолка публикуются рядом и решений не несут — рука на 720 мин иначе «выигрывает» просто тем, что держит вчетверо больше денег.
  8. Этот отчёт ничего не промотирует. Он ранжирует и классифицирует; решение о деплое принимается отдельно и требует замороженного реплея на свежей ленте, которого здесь нет.

Источники

Каждое число на странице подставлено из файла ниже; ничего не набрано руками и ничего не снято с картинки.
02_leaderboard.csv — 668,033 байт · sha256 f6fde63572e25314
02_gates.csv — 430,117 байт · sha256 205dcca50121f960
02_theta_tp.csv — 144,307 байт · sha256 3563335f0adcce1f
02_exit_off.csv — 39,896 байт · sha256 2b018a91481cc927
02_horizon_curve.csv — 34,501 байт · sha256 4a4ac9d92ede8d15
02_percentiles.csv — 42,211 байт · sha256 3bd7803ddb5a9a65
02_parameter_effects.csv — 30,409 байт · sha256 976ef374010c089a
02_ungated.csv — 9,656 байт · sha256 52df7fc5be25bef7
02_curves.json — 1,989,698 байт · sha256 4e91f1915a060857
02_analysis_receipt.json — 10,503 байт · sha256 7ee91c69d2a951a7
02_all_models_full.csv — 3,467,984 байт · sha256 40e7ab1873067c73
08_tail_audit.csv — 235,821 байт · sha256 f09f9cdbcb754e74
09_tail_hourly.csv — 188,945 байт · sha256 4a5593d045878c9f
10_starved_tail.csv — 361,302 байт · sha256 d1148e2ca4cd43f6
11_capital_clip.csv — 146,173 байт · sha256 d97d72eccd375631
12_tail_decomposition.json — 1,962 байт · sha256 aca7e674625200b4
frozen_replay_summary.json — 1,200 байт · sha256 1cae2e3ed795f8dd