📉 1000 сделок в бэктесте — это 1000 независимых ставок? Чаще всего нет.
Спор о бэктесте обычно идёт про то, хороша ли кривая. Сначала надо спросить другое: сколько в ней НЕЗАВИСИМЫХ наблюдений. От этого числа зависит, насколько кривой вообще можно верить, — и оно почти всегда меньше числа строк в журнале.
🧮 «У меня тысяча сделок, выборка огромная»
Строка журнала — не ставка. Десять входов в одну сторону на одном движении — это одна идея, сыгранная десять раз. Лестница, которая докупает поверх стоящей позиции, — одна ставка, нарезанная на куски. В одной такой системе на фьючерс MXI я насчитал 84 % входов, открытых поверх уже стоящей позиции.
Сколько ставок на самом деле, считает поправка на кластеры:
N_eff = N / (1 + (m − 1)·ρ)
N — строк в журнале, m — средний размер «пачки» сделок на одной идее, ρ — корреляция результатов внутри пачки. Если пачек нет, а результаты цепляются друг за друга во времени, та же идея через автокорреляцию:
N_eff = N / (1 + 2·Σρₖ)
Пример: 1000 сделок, пачки по 10, ρ = 0,5. Знаменатель 5,5, N_eff ≈ 180. Значимость стоит на корне из N: t-статистика 4,0, посчитанная по строкам, превращается в 1,7 по ставкам. Было «точно не случайность», стало «может быть».
🔍 «Profit Factor 2,5 — я гений»
Слишком хороший результат на малом числе независимых ставок — сначала повод искать ошибку, потом хвалить систему. Три частые причины:
— заглядывание вперёд: решение принято по цене закрытия бара, а исполнено по открытию того же бара;
— псевдорепликация: одна идея посчитана как десять сделок, см. выше;
— утечка из будущего через данные: склейка фьючерсов, пересчитанная назад, или параметры, подобранные на всём ряду.
Две проверки, которые ловят это механически. Сдвиньте исполнение на один бар позже: честный край слабеет плавно, а заглядывание обваливается в ноль. Прогоните систему на перемешанных доходностях того же инструмента: там она обязана дать ноль минус издержки. Если зарабатывает — ошибка в коде.
📈 «Walk-forward прошёл — система устойчива»
Скользящая проверка честна в одном: каждый кусок проверки лежит после своего окна подбора. Но окна подбора соседних шагов почти целиком совпадают. Подбор на 12 месяцах со сдвигом на месяц — соседние окна общие на 11/12. За 10 лет истории это 108 переоптимизаций, а непересекающихся окон подбора среди них 9. Параметры, выбранные на соседних шагах, — почти одно и то же решение, а не 108 независимых подтверждений.
Как пересечение подделывает вывод, я видел на своём замере. Проверял, сохраняется ли порядок вариантов параметра от окна к окну. Полное окно против собственной второй половины дало ранговую корреляцию 0,97 — «порядок переносится». Две непересекающиеся половины того же ряда — 0,20: не переносится. Прибор тот же, вердикты противоположные, разница целиком в пересечении.
Склеенная кривая проверки превращается в коллаж из одних и тех же лет, только если шаг меньше окна проверки — тогда один день попадает в неё несколько раз. В обычной схеме этого нет, и обвинять её в этом не нужно.
⚠️ Оговорка, без которой пост будет враньём
Поправка на кластеры требует знать ρ, а её оценка по тем же данным тоже шумит. Число N_eff — порядок величины, а не точный ответ: 150 или 250, но точно не 1000.
0,97 и 0,20 сняты на одной системе и одном инструменте; на другом ряду цифры будут другими, направление — то же.
И главная дыра скользящей проверки — не пересечение, а выбор её самой. Длину окна, шаг и критерий подбора тоже выбирают, обычно после нескольких попыток. Перепробовали пять схем и показали лучшую — склеенная кривая снова стала подгонкой.
💡 В сухом остатке
Считайте ставки, а не строки: N_eff, а не длину журнала. Слишком хороший результат на малом N_eff — сначала сдвиг на бар и перемешанный ряд, потом радость.
Walk-forward описывает, как система меняет параметры во времени. Доказательством устойчивости служат непересекающиеся окна и отложенный кусок истории, который ни разу не участвовал ни в подборе, ни в выборе схемы проверки.
📊 Пять стратегий в терминале — это пять ставок? Посчитайте
Спор о диверсификации обычно идёт про число: сколько систем, сколько инструментов, сколько таймфреймов. Число ничего не говорит. Пять систем, которые зарабатывают и теряют в одни и те же дни, — это одна ставка на рынок, размазанная по пяти окнам.
🧮 «У меня пять разных логик»
Сколько ставок на самом деле, считает формула эффективного числа:
N_eff = N / (1 + (N − 1)·ρ)
N — число систем, ρ — средняя попарная корреляция их дневных результатов. При ρ = 0 выходит N, при ρ = 1 — ровно одна ставка, сколько систем ни добавляй.
Пример: пять систем, ρ = 0,6. Знаменатель 1 + 4·0,6 = 3,4, N_eff ≈ 1,5. Полторы ставки вместо пяти.
Формула стоит на двух допущениях: веса равные и волатильность систем сопоставима. Если одна система несёт половину риска, считать надо по весам риска, иначе N_eff выйдет завышенным.
🔬 «А как это выглядит на живых системах»
Мой замер: четыре системы, одна на индекс, три на рубль — через доллар и юань. Корреляции считал по дням, интервалы — блочным бутстрапом.
Индекс с валютными системами: ρ от −0,05 до 0,03, неотличима от нуля. Валютные между собой: 0,40–0,63, и в одну сторону они стоят 85–93 % общих дней. ρ = 0,24, N_eff = 2,32 из 4. Портфель — это индекс плюс один валютный блок, а не четыре ноги.
🌪 «Почему считать дважды»
Корреляция, снятая за всю историю, — это в основном спокойные дни. В панике продают всё подряд, и связи между системами на одном рынке обычно растут. Поэтому N_eff считают дважды: по средней ρ и по кризисной.
На тех же четырёх системах: ρ = 0,70 даёт 4 / (1 + 3·0,7) = 1,29 ставки. Было 2,32 — стало 1,29.
Главное, что показал замер: ошибка ОЦЕНКИ корреляции сдвигает ответ на ±0,17 ставки (интервал 2,16–2,50). Допущение о режиме — на целую ставку. Мерить ρ точнее бессмысленно, решает то, какой режим вы закладываете.
🎯 «И что с этим делать»
Читать разрыв между двумя числами. N_eff в спокойное время 2,3, в кризис 1,3 — разница и есть цена «защиты», которая исчезнет ровно тогда, когда понадобится.
Размер позиции ограничивать по кризисному N_eff, а не по спокойному. Портфель, который выдерживает просадку при 1,3 ставки, переживёт и 2,3, — обратное неверно.
⚠️ Оговорка, без которой пост будет враньём
ρ = 0,70 в моём примере — допущение, а не замер: кризисных дней в истории мало, и корреляция по ним шумит сильнее, чем по всей выборке. Кризисное N_eff — это стресс-сценарий, который задают, а не оценивают.
Рост корреляций в кризис — не закон. Трендовая система в обвал может встать против рынка и ослабить связь, а не усилить. Поэтому кризисную ρ смотрят по своим системам в свои плохие дни, а не берут из учебника.
И независимость сама по себе ничего не стоит. Я находил семейство систем с ρ = 0,25 и тремя эффективными ставками — с нулевым краем. Подмешанное 50/50 к рабочей системе, оно уронило отношение доходности к просадке с 3,4 до 1,5. Диверсифицирует только то, что зарабатывает.
💡 В сухом остатке
Считайте ставки, а не стратегии: N_eff по средней корреляции и по кризисной. Разрыв между ними — цена иллюзии.
Размер — по кризисному числу. Новая система в портфеле стоит места, только если она и зарабатывает сама, и не ходит в ногу с остальными.
🪙 Золото — тихая гавань? Проверил 27 лет по дням.
Спор «защищает золото или нет» обычно идёт мимо сути. Сначала надо спросить: от чего? От слабого рубля — да, и с запасом. От просадок самого золота — нет: они бывают в десятки процентов и на годы.
Взял учётные цены ЦБ на золото с января 1999 по сентябрь 2026 — 6 879 дней — и пересчитал в доллары по курсу ЦБ того же дня. $GLDRUB_TOM $GDZ6
🛡 «Спаси от девальвации»
Грамм стоил 187 ₽, сейчас 11 569 ₽: в 62 раза, 16 % в год. Доллар за это время подорожал с 20,65 до 84,34 ₽, в 4 раза. Остальное — рост самого металла: унция $281 → $4 266, 10 % в год.
Здесь золото отработало честно. Это сразу две ставки: на слабый рубль и на дорогой металл.
🕳 «Да оно же не падает»
Падает. В долларах с сентября 2011 по декабрь 2015 — минус 45 %. К пику 2011 года цена вернулась только в июле 2020-го: 8,9 года под водой.
В рублях быстрее и резче. 11 марта 2022 года, при курсе ЦБ 120 ₽, грамм стоил 7 731 ₽, к октябрю — на 62 % дешевле. Мартовский уровень вернулся только в сентябре 2024-го.
И прямо сейчас: от январского пика в долларах −21 %, от мартовского в рублях −14 %.
Больше половины всех дней за 27 лет золото провело в просадке глубже 10 % от своего максимума. В долларах четверть дней — глубже 20 %.
📐 «Хвосты жирные — значит, риск бесконечный»
Частая ошибка — мерить хвост по УРОВНЯМ цены. Уровень — ряд с трендом, его точки не независимы. График Ципфа по уровням показывает, как долго цена росла, а не как часто и как сильно она падает. Хвост риска живёт в ИЗМЕНЕНИЯХ.
Как считать. Берём недельные доходности, выписываем убыточные недели и сортируем по размеру. Показатель хвоста по Хиллу — по k самым большим убыткам:
α = 1 / среднее ln(xᵢ / x₍ₖ₎)
Смысл: вероятность убытка больше x падает как x^(−α). При α < 1 нет даже среднего, при α < 2 — дисперсии, при α < 4 нельзя верить эксцессу.
Золото, 10 % худших недель: в рублях α ≈ 2,7, в долларах ≈ 2,9.
Читается так: хвост жирный, но конечный. Дисперсия есть, а по эксцессу истории верить нельзя. Недель за 3σ в рублях 1,7 % вместо 0,27 % у нормального закона — в шесть раз чаще. Худшая неделя — декабрь 2014 года, −15,7 %, это −5,6σ.
Для контраста: если подставить в ту же формулу уровни цены, выйдет 2,2. Число есть, смысла нет.
⚠️ Оговорка, без которой пост будет враньём
Оценка Хилла зависит от k: на 5–20 % худших недель в рублях она гуляет от 2,1 до 3,5, в долларах от 2,4 до 4,3. Поэтому число тут — для класса хвоста («жирный, но не бесконечный»), а не для расчёта резерва.
Цены — учётные ЦБ, не биржевые сделки. В марте 2022 официальный курс и реальный обмен расходились, так что рублёвый пик того месяца — порядок величины. Доллары — пересчёт по курсу ЦБ, а не лондонский фиксинг.
Хранение, спред банка на слитках и обезличенном счёте, НДС на слитки до марта 2022 не учтены — на круге это легко 5–10 %. Инфляцию доллара я не вычитал: в реальных долларах яма 2011–2015 глубже и дольше.
💡 В сухом остатке
Золото — не тихая гавань, а валютный хедж со своей волатильностью. От рубля защищает с запасом. От самого себя — никак: минус 45 % и почти 9 лет ожидания уже были.
Держать его имеет смысл долей портфеля и на горизонте, который переживёт такую яму. Сложить в него всё, чтобы спать спокойно, — ровно тот случай, когда спокойно спать не выйдет.
🎯 Трендовой ноге нужен напарник, который зарабатывает в болтанке. Нашёл его в опционах.
Трендовая система на Si живёт движением: курс идёт — позиция едет. Теряет она в боковике: пробой, откат, встречный пробой, серия мелких стопов. Фильтр «не входи во флэт» тут не спасает — флэт видно только задним числом.
Я пошёл с другой стороны: поставить рядом ногу, которой болтанка выгодна.
📉 «Продай тряску»
Раз в месяц продаю колл и пут одного страйка у текущего курса — стрэддл. Покупатель сразу платит премию, на Si это 3–4 % цены на месяц. На экспирации я отдаю столько, сколько курс ушёл от страйка.
Почему это не лотерея: цена опциона зашита в ожидаемую волатильность, а на Si она систематически выше той, что потом случается. Страховку покупают дороже, чем она стоит в среднем. Эта переплата и есть край.
⚖️ «Убери направление»
Голый стрэддл — ставка на то, что курс никуда не уйдёт. Поэтому каждый вечер считаю дельту опционов по модели Блэка — на сколько фьючерсов позиция «весит» — и довожу её до нуля фьючерсом. Пример: 10 стрэддлов, курс ушёл на 1,2 % вверх, дельта −2,56 → докупаю 3 фьючерса.
После хеджа остаётся одна ставка: тряска за месяц окажется меньше оплаченной. Спокойный день — заработок на времени (тета). Резкий — убыток на подстройке (гамма), и он растёт как квадрат хода.
🪽 «Закрой опасный хвост»
Сверху докупаю дешёвый колл на +8 %: рубль исторически рушится рывками. Выше крыла убыток не растёт — декабрь 2014 года цикл закончил в плюсе. Нижний хвост держу размером: пут-крыло на истории стоило дороже, чем спасало.
🔗 Как это легло на трендовую ногу
137 месячных циклов, 2014–2026. Связь результатов ноги и опционов −0,41, знак держится в обеих половинах истории.
В четверть худших месяцев ноги она теряла в среднем 0,85 % номинала, а опционы в те же месяцы зарабатывали 0,87 %.
В процентах номинала, без реинвеста:
нога одна — +225 %, просадка 6,05 %
+1 стрэддл на контракт — +264 %, просадка 4,16 %
+2 стрэддла — +303 %, просадка 3,52 %
Сами опционы слабые: +39 % за 12 лет при просадке 6,97 %. Ценность не в их доходе, а в том, КОГДА он приходит.
🧪 Что не сработало
Два улучшения проверял с условиями успеха, записанными до прогона. Фильтр «не продавать дешёвую премию» — сигнала нет, отсеянные месяцы не хуже оставшихся. Серии на 2–3 месяца вместо месячных — не лучше, а худший цикл глубже. Оба отклонены.
А длинная история срезала ожидания: на 2022–2026 край был +0,45 % цены за цикл, с 2014 года — около +0,2 %. Первое окно оказалось удачным.
⚠️ Оговорка, без которой пост будет враньём
Опционы посчитаны по расчётным ценам биржи, спред — только на входе. Это верхняя оценка. Крыло +8 % в месячной серии почти не торгуется, но его держат до экспирации и платят один раз по аску — живой стакан показал переплату около 0,02 % цены. Сейчас идёт теневой прогон на живых котировках, без денег.
Выйти досрочно дорого — около 0,39 % цены, почти прибыль цикла. Стоп, как на фьючерсе, сюда не повесишь. Худший цикл истории — не обвал, а болтанка июня 2022 года на высокой волатильности: −3,4 % цены.
И на графике ровная полка в 2018 году — там опционной истории почти нет, один цикл.
💡 В сухом остатке
Диверсификация — это не «добавить ещё систему», а добавить ту, что зарабатывает в чужие плохие месяцы. Тренд платит за движение, проданный стрэддл — за его отсутствие.
Слабая стратегия сделала сильную ровнее. Отдельно я бы её не торговал.
🎲 Корреляция говорит «вместе». Но молчит о том, что будет на краю.
Когда в портфеле несколько систем, главный вопрос не «сколько каждая зарабатывает», а «сложатся ли их убытки в один день». Обычный ответ — корреляция, одно число. Но она описывает середину, а платит счёт за края.
Инструмент, который говорит про края отдельно, — копула. Разбираю его на $SiZ6 $CRZ6 $MMZ6.
🧩 «Раздень зависимость от масштаба»
Возьмите доходности системы и замените каждый день не процентом, а МЕСТОМ в её собственном ряду: «худшие 5 % моей истории», «середина, 50 %». Число от 0 до 1. Так же со второй.
Теперь у обеих одна шкала, и весь масштаб — хвосты, асимметрия, плечо — из картинки ушёл. Что осталось, то и есть копула: когда у первой выпадает 0.03, что обычно выпадает у второй.
Распределение разбирается на маргиналы (какая нога сама по себе) и копулу (как они сцеплены). Значит, можно взять честные исторические хвосты своих систем и приклеить к ним ЛЮБУЮ связь.
🎛 Семейства спорят ровно об одном — о краях
Гауссова. В середине связь есть, но на краю ноги расцепляются: вероятность «вторая тоже в катастрофе, раз первая уже там» стремится к нулю. Плюс — один параметр, прозрачно и быстро. Минус — обещает, что в кризис системы разойдутся. А они сходятся.
t-Стьюдента. Хвосты степенные, углу не даёт опустеть. Плюс — честнее описывает совместные обвалы. Минус — второй параметр, который и управляет краями, приходится оценивать в самом хвосте, где данных меньше всего.
Клейтона. Слипается только НИЗ: падают хором, растут врозь — на рынок похоже. Минус — асимметрия тихо съедает доходность модели, и легко принять «риск уменьшился» за «дрейф исчез». Я на этом обжёгся. Гумбеля — зеркальная.
🔧 Мой приём: не оценивать связь, а назначить её руками
Копулу можно оценить по истории. Я так не делаю — и это главная мысль поста.
Оценка отвечает «как ноги ходили вместе раньше». Мне нужно другое: «а если слипнутся сильнее». Поэтому маргиналы беру из своей истории как есть, а корреляцию внутри копулы ВБИВАЮ: по валютным фьючерсам историческая выходила 0.38 и 0.62 — в стресс ставлю 0.70, в катастрофу 1.00.
Слабость гауссовой связи это не чинит, а компенсирует: занижает края — задираю вход.
📏 Три замера, а не рассуждения
Первый. Сравнил грубую фиксированную 0.70 с тонкими: асимметричной и со случайно плавающей. CVaR95 просадки — 9.3 % против 7.5 % и 6.4–6.9 %. Грубое допущение оказалось КОНСЕРВАТИВНЕЕ изощрённых. Менять не на что.
Второй. Одинаково ли строга вбитая 0.70 на разном числе систем? Мерил долю пути от независимости до полного слипания: 0.70–0.73 на четырёх составах, из двух и трёх ног, при исторической связи от 0.03 до 0.62. Число ног ручку не сдвигает.
Третий. Во сколько раз связь 0.70 ухудшает CVaR против независимости: на паре ×1.47, на тройке ×1.84. На трёх ногах стресс бьёт сильнее — там больше диверсификации, которую он разрушает. Приём масштабируется сам.
🚪 Почему я так и не перешёл на t-копулу
Собирался — и не стал, после одного вопроса: если связь вбивается руками, что даст другое семейство? Ничего. При 1.00 гауссова копула вырождается в комонотонность: каждый день все ноги берут ОДИН И ТОТ ЖЕ процентиль своей истории. Сцепить сильнее не может ни одна. t-копула — другая дорога к тому же пределу, а не точка за ним.
⚠️ Оговорка, без которой пост будет враньём
Комонотонность строго доказана как максимум для ОДНОДНЕВНОГО убытка. Моя мерка — просадка по пути, а не сумма. Довод сильный, теоремой я его не называю. И числа сняты с моих систем и моего окна: на другом наборе доля будет другой.
И свой прокол: на 5 000 путей разброс вышел 0.67–0.73, и я чуть не принял его за зависимость от состава. На 20 000 он схлопнулся — шум, а не сигнал.
💡 В сухом остатке
Корреляция — это наклон. Копула — ещё и края, а края и есть риск.
Оценивать копулу осмысленно, когда вы ей ЦЕНИТЕ: так считали транши облигаций и в 2008 сгорели. Если вы ей себя пугаете, семейство почти не важно — важно, докуда готовы выкрутить ручку и помечено ли это как допущение.
Вбитое число честнее оценённого ровно до тех пор, пока подписано вбитым.
⚖️ Правило, которое дважды подряд дало мне ответ наоборот
Проверял идею: вместо того чтобы выбирать один параметр стратегии, торговать сразу несколько её версий с разными настройками, разделив капитал поровну.
Правило приёмки объявил заранее, до замеров — так, чтобы не подгонять его под результат. Три условия: профит-фактор не ниже худшей из версий, просадка ниже, чем у боевой, и версии должны быть достаточно независимы.
Правило отработало. Дало ровно противоположный ответ. Дважды из двух.
🪤 Где ловушка
Портфель из четырёх версий по четверти капитала несёт меньше риска, чем одна версия на полном размере. Не потому, что диверсификация работает, а просто потому, что размер меньше. Я замерил: 75–78% волатильности исходной системы.
А раз риск меньше — просадка падает автоматически. Условие «просадка ниже базы» выполняется само собой, есть польза или нет её вовсе.
То есть я поставил условием то, что выполняется механически. Всё равно что оценивать автомобиль по расходу топлива, разрешив ему ехать медленнее.
🔀 Как это выглядело на деле
Первый случай, юань. Ансамбль показал просадку заметно ниже боевой версии, но не прошёл третье условие — версии оказались недостаточно независимы. Формально отклонён.
Второй случай, доллар. Тот же ансамбль по той же схеме прошёл все три условия. Формально принят.
Потом я привёл оба к равной просадке — и получил обратную картину.
Юань: отклонённый вариант при равной просадке давал +1402% против +619% у боевой. Больше чем вдвое.
Доллар: принятый вариант при равной просадке давал 14 709% против 26 987%. Почти вдвое хуже.
Правило не просто ошиблось. Оно оказалось антикоррелировано с тем, что я хотел измерить.
📏 Что делать вместо
Приводить всё к равной просадке и сравнивать только после этого.
Механика простая. Берём ряд доходностей кандидата и умножаем на множитель — это ровно то же, что торговать его с другим плечом. Подбираем множитель делением пополам так, чтобы просадка совпала с базовой. Дальше сравниваем итоговую доходность.
Просадка у обоих одинаковая по построению. Значит, разница в доходности — это и есть преимущество, а не разница в размере позиции.
🔎 Множитель сам по себе — информация
Его нельзя выбрасывать после сравнения. Он показывает, какой ценой достаётся выигрыш.
У юаня, чтобы догнать просадку боевой версии, ансамблю потребовался множитель 1,78 — то есть плечо 355% вместо 200%. И при этом ухудшился хвостовой риск: средний убыток в худших днях вырос с 2,35% до 3,01%.
Читается так: да, при равной просадке доходность выше — но за это надо почти удвоить плечо и получить более тяжёлые отдельные дни. Бесплатного обеда не выдали.
🧪 Проверка, что метод работает
Я не стал верить себе на слово и завёл три контрольные точки.
Первая: беру систему и просто уменьшаю её размер вдвое. Просадка падает с 24,1% до 12,7% — «безопаснее» без всякого преимущества. Ловушка воспроизводится.
Вторая: привожу разбавленный вариант к исходной просадке. Множитель выходит ровно 2,00, доходность совпадает с исходной до третьего знака. Разница исчезла — как и должна была, ведь это одна и та же система.
Третья: беру систему с настоящим преимуществом. После приведения она по-прежнему впереди, 663% против 137%. Значит метод не «зануляет всё подряд», а различает разбавление и кромку.
💡 Итог
Условия вида «просадка ниже» и «риск меньше» звучат осторожно и ответственно, а на деле пропускают что угодно, если сравниваемые варианты идут с разной экспозицией. Но тут есть что копать дальше.
Я записал это себе в регламент рядом с другим правилом того же рода: сравнивать только на одинаковых окнах. Там приводят к общей длине истории, здесь — к общему уровню риска. Смысл один: пока обе стороны не поставлены в одинаковые условия, сравнивать нечего.