Во вторник утром наша трендовая стратегия на фьючерсах на нефть была в лонге по истекающему контракту. Сигнал работал именно так, как мы задали: удерживать позицию, пока тренд остаётся положительным. Бэктест показывал небольшой рост. На бумажном счёте были продажа, покупка следующего контракта, 2 комиссии и цена входа хуже, чем следовало из графика.
Ничего загадочного с сигналом не произошло. В бэктесте «цена фьючерса» считалась единой непрерывной величиной. А на счёте нужно было закрыть один контракт и открыть другой — в двух разных биржевых стаканах и по двум разным ценам.
Мы обнаружили расхождение, когда проверяли позицию, прошедшую через окно переноса. Стратегия использовала ликвидный ближний контракт и удерживала его, пока календарное правило не переводило позицию в следующий месяц. Само правило было разумным. Учёт операций вокруг него — нет.
Наш непрерывный ряд был скорректирован назад, чтобы убрать разрыв между контрактами. Так график становился удобным для расчёта тренда. Но в ряду не оставалось реальной цены, по которой можно было закрыть старый контракт или открыть новый. Бэктест использовал скорректированный уровень для оценки сделки во время переноса, а затем продолжал торги так, будто позиция просто оставалась открытой.
Для сигнала непрерывный ряд может быть полезным измерительным инструментом. Для исполнения он выдуман. Перенос — это 2 сделки, а спред между контрактами — часть структуры рынка, а не косметический скачок, который нужно сгладить.
Мы воспроизвели событие с использованием двух биржевых контрактов. По старому месяцу bid составлял 79.98, ask — 80.00. По следующему месяцу bid был 80.42, ask — 80.45. Нашу длинную позицию нужно было закрыть продажей старого контракта по bid, а затем купить новый по ask. Календарный спред между этими исполнимыми сторонами составлял 44 цента.
Это число не означало автоматический убыток в 44 цента. Контракты имели разные месяцы поставки, а спред отражал стоимость переноса, хранения, финансирования и ожидания по предложению. Позиция, перенесённая на следующий контракт, сохраняет чувствительность к изменению его цены; весь котируемый спред не уплачивается как комиссия. Но стратегия должна зафиксировать выход из старого контракта и открыть новый. Если при расчёте доходности сравнивать эти цены так, словно речь об одном инструменте, можно придумать или стереть P&L.
При повторном воспроизведении мы разделили эти задачи. Непрерывный ряд по-прежнему генерировал трендовый сигнал. Для оценки позиций и ордеров использовались цены конкретных контрактов. При переносе симулятор отправлял ордер на закрытие истекающего месяца и ордер на открытие следующего, учитывал комиссии по каждому контракту, а также спред и доступную глубину каждого стакана.
Первый повтор всё ещё расходился с бумажным счётом. Мы синхронизировали оба исполнения по одной временной отметке, хотя ордера отправлялись последовательно. Ордер на закрытие старого месяца исполнился, но ask по следующему месяцу изменился до того, как ордер на покупку дошёл до стакана. Перенос можно исполнить календарным спредом, если площадка это поддерживает, или двумя этапами с промежуточной рыночной экспозицией. Это разные предположения об исполнении. Для сравнения мы использовали фактическую последовательность ордеров бумажного счёта.
Затем мы заметили, что само календарное правило было задано недостаточно точно. «Перенос за 5 дней до экспирации» звучит однозначно, пока праздник не сдвинет торговый календарь, ликвидность не переместится на более ранний срок или правила экспирации не окажутся разными для разных контрактов. В одном месте мы считали календарные дни, в другом — торговые. Бумажная стратегия переносила позицию за 5 сессию до последнего дня торгов, а бэктест — за 5 календарных дней до него.
Дата переноса — торговое правило. Зафиксируйте биржевой календарь и событие, которое его запускает, иначе бэктест и счёт рано или поздно разойдутся в том, каким контрактом вы владеете.
Мы изменили инструкцию по переносу: теперь она указывает последний день торгов по контракту, считает сессии по календарю его биржи и требует минимальной проверки ликвидности перед переносом. Этот порог служил практической защитой, а не обещанием лучшего исполнения: объём и открытый интерес лишь приблизительно показывают, что именно исполнит наш ордер. Мы записывали выбранный контракт и цены обеих частей сделки, чтобы каждое повторное воспроизведение объясняло переход.
После этих изменений историческая доходность стратегии снизилась. Разница возникла не из-за одного огромного убытка при переносе. Она сложилась из множества небольших поправок: правильный контракт, правильная торговая сессия, реальные комиссии за обе части сделки, а также выход и вход по ценам собственных стаканов. Один перенос при низкой ликвидности оказался особенно дорогим, поэтому мы оставили его на виду, а не сгладили усреднением.
Если в бэктесте фьючерсов используется непрерывный график, спросите себя, для чего он годится. Он может давать сигналу последовательный набор данных. Но он не заменяет контракт, который можно было купить или продать. Для каждой позиции, проходящей через экспирацию, в исследовательской записи должны быть указаны старый контракт, новый контракт, условие переноса, модель исполнения и оба денежных потока.
Та сделка во вторник не была сложной неудачей. Это была выглядевшая прибыльной линия на графике, которая пропустила момент, когда счёту пришлось менять принадлежащий ему актив. Когда мы вернули этот момент в воспроизведение, результат стал менее привлекательным и гораздо полезнее.
← Все статьи


