📈 Фьючерс живёт квартал. А история нужна за годы.
Любой фьючерс кончается: контракт умирает, торговля переезжает в следующий, и так по кругу. Проверять стратегию на одном контракте бессмысленно — три месяца это не история, это эпизод.
Значит, контракты надо склеивать в один длинный ряд. И вот тут начинается интересное: склеить можно двумя способами, и на одном и том же алгоритме они дают разные деньги. Недавно мерил эту разницу в своём тестере на CRU6 — вышла четверть результата.
🧩 Откуда вообще берётся шов
Старый контракт на юань стоит, скажем, 12.80, новый на тот же юань — 12.95. Эти 15 копеек не движение рынка. Это плата за срок: в цене дальнего контракта сидит процентная ставка.
Инструмент один, цены разные, и в день переезда ряд обязан как-то через это перешагнуть.
🩹 Способ первый: пересчитать прошлое
Берём разницу на стыке и сдвигаем на неё всю предыдущую историю. Потом ещё раз, на следующем стыке. И ещё. Выходит идеально гладкая кривая без единого разрыва — ровно то, что показывает большинство терминалов, когда открываешь «юань» за десять лет.
Чем хорош. Индикаторы не ломаются: средняя, ATR, канал считаются сквозь стык и не подпрыгивают на ровном месте. Глазами ряд читается как одна непрерывная бумага — для разметки уровней и сверки с чужим графиком это то, что нужно.
Чем плох. Цены прошлого — не те, по которым тогда торговали. Уровень 12.80 из 2022 года после дюжины пересчётов превращается в 11.40 или в 14.20, смотря сколько было переездов и куда смотрел базис. Всё, что привязано к абсолютной цене, начинает врать: стоп в рублях, гарантийное обеспечение, размер позиции, издержки в шагах цены. На длинной истории такой ряд умеет уползти и в минус — цена, которой не бывает.
А главное: размер сдвига известен только в день экспирации. Ряд, на котором мы проверяем 2022 год, собран из чисел, которых в 2022 году не знал никто. Это заглядывание в будущее. Не грубое, не «подсмотрел завтрашний бар», но самое настоящее: тест опирается на то, что случится позже.
📏 Замер, а не рассуждение
Одна стратегия, те же параметры, то же окно, разница только в способе склейки:
— на пересчитанном прошлом +502 тыс ₽
— на настоящих ценах +629 тыс ₽
Пересчёт занизил результат на четверть. Знак мог оказаться и обратным — важно, что расхождение крупное и угадать его заранее нельзя.
🧱 Способ второй: встык, по настоящим ценам
Ничего не двигаем. До экспирации в ряду стоят цены старого контракта, после — нового. На стыке остаётся ступенька.
Чем хорош. Каждая цена та самая, по которой в тот день действительно торговали. От неё честно считаются ГО, стоп, размер позиции и издержки. И заглядывать некуда: будущее в сборке ряда не участвует.
Чем плох. Той самой ступенькой. Если в момент переезда у стратегии открыта позиция, движок видит скачок цены и записывает прибыль или убыток, которых не было: никто не переносил позицию по этой цене, она просто сменила контракт. Я называю это фантомом шва.
🧮 Фантом лечится не склейкой, а учётом
Его не надо прятать — его надо вычесть. Движок знает, где стоят стыки, и вычёркивает ровно тот кусок результата, который родился из скачка, а не из движения рынка.
На четырёх годах одной ноги таких сделок нашлось 11, и уносили они 155 тыс ₽ убытка, которого стратегия на самом деле не несла. Пока их не вычли, она выглядела хуже, чем есть: профит-фактор 1.72 против настоящих 1.94.
У другой ноги знак был бы обратным, и она бы, наоборот, красовалась. Фантом одинаково умеет и портить, и приукрашивать — тем и опасен.
⚠️ Оговорка, без которой пост будет враньём
Числа выше сняты с одного инструмента и одной системы. Это не «всегда четверть»: на другом ряду разрыв будет другим и вполне может смотреть в другую сторону. Утверждение тут одно — разница есть, она крупная, и посчитать её можно только на своих данных.
И пересчитанное прошлое — не «плохая склейка». Это другой прибор. Плохо, когда им меряют деньги.
💡 В сухом остатке
Пересчитанное прошлое — для глаз и для индикаторов: разметка, сверка с чужим графиком, любая задача, где важна форма кривой, а не абсолютный уровень.
