Склейка фьючерсов (Continuous Futures): как работает непрерывный контракт, методы сглаживания гэпов и настройка для тестов
Оглавление
- Что такое склеенный фьючерс и зачем он нужен
- Почему деривативы экспирируются и как возникает непрерывный ряд
- Природа экспирационного гэпа: базис, контанго и бэквордация
- Триггеры ролловера: алгоритмы смены контрактов
- Методы построения склеенных графиков
- Настройка непрерывных графиков в торговых терминалах
- Расчет рисков и перенос позиции (Rollover)
- Нестандартные рыночные сценарии (Edge Cases)
- Сшивка данных в Backtrader (Python)
- Типичные ошибки трейдеров при работе со склейками
- План действий: выбор режима склейки под задачу
- Чек-лист проверки перед отправкой биржевой заявки
- Ответы на частые вопросы (FAQ)
Что такое склеенный фьючерс и зачем он нужен
Склеенный фьючерс (Continuous Futures Contract) — это непрерывный синтетический график, собранный из цепочки последовательно сменяющих друг друга срочных контрактов, подобно тому как короткие отрезки кинопленки сшиваются в единый полнометражный фильм. Он объединяет разрозненные фазы обращения деривативов, решая проблему ограниченного срока жизни инструментов и фрагментации ликвидности для долгосрочного технического анализа и бэктестинга стратегий.
Главное правило трейдера: Глобальный контекст рынка, уровни, скользящие средние и осцилляторы рассчитываются по склеенному графику, а торговые заявки отправляются исключительно в биржевой стакан текущего рабочего контракта с конкретной датой экспирации. Торговать тикером склейки напрямую невозможно.
| Характеристика | Биржевой контракт (Specific Month) | Склейка без коррекции (Unadjusted / !) | Сглаженная склейка (Back-Adjusted / #) |
|---|---|---|---|
| Срок жизни на экране | 1–3 месяца активной фазы | Полная история инструмента за все годы | Полная история инструмента за все годы |
| Точность цен | Фактические котировки реальных сделок | Реальные исторические цены каждого периода | Смещены на величину прошлых экспирационных ступеней |
| Стыковые гэпы | Отсутствуют внутри серии | Присутствуют искусственные разрывы | Устранены математической корректировкой |
| Торговые операции | Доступны (покупка и продажа) | Заблокированы (только режим аналитики) | Заблокированы (только режим аналитики) |
| Основная задача | Исполнение ордеров, расчет ГО и стоп-приказов | Поиск исторических уровней поддержки и сопротивления | Расчет индикаторов (RSI, MA), алгоритмический бэктестинг |
Почему деривативы экспирируются и как возникает непрерывный ряд
В отличие от бессрочных акций, каждый биржевой фьючерс имеет фиксированную дату расчетов — экспирацию, работающую по принципу срока годности билета на поезд или проездного документа. Квартальные инструменты (например, фьючерс на курс валютной пары «доллар-рубль» Si или индекс Мосбиржи MIX) обращаются циклами по 3 месяца, а товарные контракты на нефть Brent или природный газ NG рассчитываются ежемесячно.
Жизненный цикл любого фьючерса подчиняется выраженной кривой распределения ликвидности:
- Эмиссия: Биржа запускает инструмент за 6–12 месяцев до расчетов, однако биржевой стакан остается пустым, а спред — широким.
- Фронтальная активность: Основной биржевой оборот концентрируется в ближайшем контракте (Front Month).
- Миграция ликвидности: За 3–5 дней до даты расчетов торговый объем лавинообразно перетекает в следующий инструмент цепочки (Next Active), после чего старый контракт выводится из обращения.
Такая дискретность создает техническую проблему: трейдер не может применить 200-периодную скользящую среднюю на часовом таймфрейме или провести многолетний бэктест алгоритма внутри единого тикера — массив котировок обрывается каждый квартал. Склейка решает эту задачу, сшивая периоды наивысшей активности инструментов в единый поток данных.
Природа экспирационного гэпа: базис, контанго и бэквордация
Котировки смежных фьючерсных серий практически никогда не совпадают. Разница между спотовой ценой базового актива и стоимостью производного инструмента формирует базис (Basis), определяемый стоимостью удержания позиции (Cost of Carry) — межбанковскими процентными ставками, дивидендными отсечками и складскими расходами:
- Контанго (Pnext > Pcurrent): дальний контракт торгуется с премией к ближнему, формируя на стыке искусственную ценовую ступень вверх.
- Бэквордация (Pnext < Pcurrent): следующий контракт котируется со скидкой, вызывая визуальный провал графика вниз.
Простая стыковка баров разных контрактов без поправок накапливает критическую погрешность, искажая показания технических индикаторов.
Эффект накопления ложных движений: 8 кварталов фьючерса на Индекс РТС (RI)
| Истекающий контракт | Новый активный контракт | Цена закрытия старого (Pold), п. | Цена закрытия нового (Pnew), п. | Искусственный гэп (ΔP), п. |
|---|---|---|---|---|
| RIH2 | RIM2 | 173 605 | 168 415 | -5 190 |
| RIM2 | RIU2 | 131 525 | 130 870 | -655 |
| RIU2 | RIZ2 | 157 700 | 157 200 | -500 |
| RIZ2 | RIH3 | 150 020 | 150 020 | 0 |
| RIH3 | RIM3 | 154 070 | 150 000 | -4 070 |
| RIM3 | RIU3 | 128 210 | 126 870 | -1 340 |
| RIU3 | RIZ3 | 140 170 | 140 030 | -140 |
| RIZ3 | RIH4 | 139 400 | 139 350 | -50 |
| ИТОГО | -11 945 пунктов | |||
Искажение ценового массива за два года составило почти 12 000 пунктов несуществующего рыночного падения. Осцилляторы и трендовые фильтры (RSI, MACD, Bollinger Bands) воспринимают подобные скачки как реальные ценовые импульсы, генерируя серии ложных сигналов на вход и переворот позиций.
Триггеры ролловера: алгоритмы смены контрактов
Момент переключения источника котировок с текущего инструмента на следующий называется ролловером (Rollover). Торговые терминалы и исследовательские платформы используют три базовых механизма:
| Механика триггера | Логика срабатывания | Практическое преимущество | Риск исполнения |
|---|---|---|---|
| Fixed Calendar Day | Жесткая дата (например, третий четверг месяца экспирации) | Абсолютная календарная детерминированность алгоритма | Риск остаться в неликвидном стакане за несколько часов до клиринга |
| Volume Crossover | Дневной объем нового фьючерса превысил объем старого (Vnew > Vold) | Поток котировок всегда берется из наиболее ликвидного стакана | Ложные переключения при разовых крупных адресных сделках в дальнем контракте |
| Open Interest Crossover | Открытый интерес новой серии превысил старую (OInew > OIold) | Четкая фиксация переноса позиций институциональными игроками | Запаздывание на 1–2 торговые сессии относительно первичного всплеска объема |
def should_rollover(current_contract, next_contract, days_to_expiry: int) -> bool:
"""Проверка условий для переноса ценового потока на следующий контракт."""
volume_condition = next_contract.daily_volume > current_contract.daily_volume
time_window_condition = days_to_expiry <= 4
if volume_condition and time_window_condition:
return True # Переключить continuous feed на next_contract
return False # Удерживать текущий фронтальный контракт
Методы построения склеенных графиков
Для устранения ступеней на стыках экспираций в индустрии применяются три метода:
- Стык-в-стык (Unadjusted / !): прямое последовательное соединение свечей без коррекции. Сохраняет фактические исторические цены сделок, но образует ценовые гэпы на экспирациях.
- Корректировка назад (Back-Adjusted / #): смещение всей предшествующей истории на величину каждого зафиксированного гэпа ΔP. Создает гладкий ряд для индикаторов, но изменяет исторические абсолютные уровни.
- Линейная интерполяция: плавное сглаживание баров внутри заданного временного окна. Устраняет локальные швы, формируя синтетические расчетные цены.
1. Метод без коррекции (Unadjusted / !)
Контракты сшиваются «встык» по факту наступления даты переключения. Исторические свечи сохраняют те котировки, по которым фактически проходили торги.
Преимущество: Сохранение точных исторических уровней поддержки, сопротивления и глобальных экстремумов.
Недостаток: Экспирационные ступени искажают расчеты индикаторов и ломают бэктесты.
2. Корректировка назад (Back-Adjusted / #)
Текущий активный контракт сохраняет реальные биржевые цены, а вся предшествующая история баров смещается на величину каждого накопленного гэпа:
ΔP = Pnew - Pold
Преимущество: Бесшовный ценовой ряд; математически корректный расчет волатильности, трендовых индикаторов и осцилляторов.
Недостаток: Искажаются абсолютные исторические котировки прошлого. На рынках с многолетним контанго (например, фьючерс на природный газ NG) регулярное вычитание базиса способно увести котировки прошлых лет в отрицательную зону. Это следствие математической поправки, а не ошибка торгового терминала.
3. Линейная интерполяция свечей
Внутри заданного переходного окна (N дней) расчетная цена бара вычисляется как взвешенная сумма котировок двух контрактов:
Pinterpolated = Pold · (1 - w) + Pnew · w, где w = k / N
(k — порядковый номер дня переходного окна, N — общая продолжительность сглаживания).
Преимущество: Плавный локальный переход между сериями без тотального сдвига многолетней истории.
Недостаток: Генерирует искусственные котировки, по которым на бирже фактически не заключались сделки.
| Метод склейки | Механика построения | Плюсы | Минусы | Оптимальное применение |
|---|---|---|---|---|
| Стык-в-стык (Unadjusted) | Соединение баров без модификации котировок | Сохранение реальных биржевых цен | Ложные гэпы ломают бэктесты и фильтры | Ручной графический анализ, глобальные уровни |
| Корректировка назад (Back-Adjusted) | Смещение истории на величину разрывов ΔP | Непрерывный ряд, реалистичная волатильность | Смещение уровней прошлого; отрицательные цены | Бэктестинг алгоритмов, индикаторы MA, RSI, MACD |
| Линейная интерполяция | Взвешенный расчет цен внутри переходного окна | Локальное устранение швов без сдвига истории | Генерация несуществующих цен сделок | Среднесрочный статистический и волновой анализ |
Настройка непрерывных графиков в торговых терминалах
| Платформа | Сегмент применения | Практические плюсы | Ограничения платформы |
|---|---|---|---|
| TradingView | Графический и технический анализ | Переключение b-adj в один клик, иконки экспираций на шкале времени | Нельзя отправить торговый ордер напрямую из склейки |
| PRO-терминалы брокеров (Т-Банк, Альфа) | Торговля контрактами срочного рынка FORTS | Встроенные режимы ! и # в стандартном окне графиков | Ограниченный выбор тонких параметров окна сглаживания |
| ATAS / TigerTrade | Кластерный и объемный анализ | Корректный пересчет профилей объемов и кумулятивной дельты | Платная лицензия, повышенные требования к RAM |
| Backtrader (Python) | Алгоритмический бэктестинг | Полная кастомизация условий ролловера в программном коде | Требуется предварительная очистка сырых CSV-файлов |
| StockSharp (Hydra) | Хранение и сшивка L2/L3 данных | Пакетная склейка тиков, стаканов и свечей в форматы SQL/HDF5 | Высокий порог входа, требовательность к дисковому пространству |
Синтаксис тикеров
TradingView: Si1! (ближайший активный контракт без поправки), Si2! (следующий контракт). Для активации математического сглаживания необходимо нажать кнопку b-adj (Adjust for contract changes) на нижней шкале цен.
Терминалы Мосбиржи (FORTS): Формат [Код][Номер серии][Модификатор]. Пример: Si1! — текущий контракт с гэпами; Si1# — непрерывная склейка со сглаживанием разрывов.
Расчет рисков и перенос позиции (Rollover)
Перенос позиции через экспирацию требует одновременного закрытия объема в истекающем контракте и открытия аналогичной позиции в новой серии. При этом необходимо учитывать разницу в гарантийном обеспечении (ГО) и стоимость шага цены.
Пример расчета параметров для фьючерса Si
- Депозит на счете: 500 000 руб.
- Допустимый риск на сделку (R): 1.5% от депозита (7 500 руб.).
- Текущая позиция: SiH (март), 10 лотов.
- Новый контракт: SiM (июнь), текущая котировка: 93 200 руб. (контанго +1 200 руб.).
- Базовое ГО на 1 контракт: 12 500 руб.
- Расчетный стоп-лосс на новом контракте: 600 пунктов (стоимость шага цены: 1 п. = 1 руб.).
1. Лимит позиции по риску на капитал (Nrisk):
Nrisk = Риск в рублях / Стоп-лосс на 1 лот = 7 500 руб. / (600 п. × 1 руб.) = 12.5 ⇒ 12 лотов
2. Ограничение по загрузке ГО (Kmax ≤ 50% депозита):
NГО = (Депозит × 0.50) / ГО на 1 контракт = (500 000 руб. × 0.50) / 12 500 руб. = 20 лотов
3. Итоговый безопасный объем переноса:
N = min(Nrisk, NГО) = min(12, 20) = 12 лотов
Перенос базовых 10 лотов полностью укладывается в риск-профиль: требуемое ГО составит 125 000 руб. (25% депозита), а максимальный убыток при срабатывании стоп-лосса составит 6 000 руб. (1.2% капитала).
Нестандартные рыночные сценарии (Edge Cases)
Досрочный отток ликвидности (Liquidity Drain)
Сценарий: При резких макроэкономических событиях участники торгов могут перенести ликвидность за 7–10 дней до планового срока. Алгоритм со стандартным календарным триггером рискует остаться в опустевшем стакане с расширением спреда до 0.5–1.5%.
Решение: Настроить защитный триггер: если спред во фронтальном стакане расширяется более чем в 3 раза относительно 20-дневной медианы, система принудительно переключает поток котировок на дальний контракт.
Отрицательные исторические цены на сырьевых деривативах
Сценарий: При глубоких бэктестах Back-Adjusted рядов на сырьевых рынках вычитание положительного базиса уводит котировки прошлых лет ниже нуля.
Решение: Использовать пропорциональную/геометрическую склейку (Ratio-Adjusted), где цены прошлого умножаются на коэффициент:
k = Pnew / Pold
Это полностью исключает появление отрицательных значений на графике.
Сшивка данных в Backtrader (Python)
import backtrader as bt
def check_volume_trigger(d0, d1) -> bool:
"""Ролловер: объем нового контракта (d1) превысил объем активного (d0)."""
return d0.volume[0] < d1.volume[0]
cerebro = bt.Cerebro()
# Загрузка котировок смежных квартальных серий
data_march = bt.feeds.GenericCSVData(
dataname='SiH4_1hour.csv',
datetime=0, open=1, high=2, low=3, close=4, volume=5, openinterest=-1
)
data_june = bt.feeds.GenericCSVData(
dataname='SiM4_1hour.csv',
datetime=0, open=1, high=2, low=3, close=4, volume=5, openinterest=-1
)
# Формирование непрерывного потока данных с динамическим переключением
cerebro.rolloverdata(
data_march,
data_june,
name='Continuous_Si',
checkcondition=check_volume_trigger
)
Типичные ошибки трейдеров при работе со склейками
1. Выставление лимитных ордеров по ценам сглаженного ряда (#)
- Механика: Сглаживание Back-Adjusted смещает котировки прошлого. Если уровень на графике # отображается как 85 000 п., реальные сделки в биржевом стакане могут проходить по 88 200 п.
- Следствие: Заявка выставляется далеко от рынка и не исполняется либо исполняется с критическим проскальзыванием.
- Решение: Определять точки входа и стоп-приказы строго по торгуемому контракту или склейке без поправок (!).
2. Отправка торгового приказа в тикер склейки
- Механика: Инструменты Si1!, BR1#, ES1! являются виртуальными информационными потоками.
- Следствие: Торговый сервер брокера отклонит поручение с системной ошибкой доступа к торгам.
- Решение: Проводить анализ по склейке, а в торговом стакане выбирать физический контракт месяца (например, SiM6).
3. Оптимизация трендовых роботов на графике без поправки (!)
- Механика: Экспирационный скачок в 2–4% алгоритм воспринимает как истинный рыночный импульс или пробой диапазона.
- Следствие: На несклеенных данных алгоритм непрерывно генерирует ложные перевороты позиции BUY/SELL на стыках серий. Тестирование аналогичной трендовой системы на неочищенных гэпах дает просадку до 49.6% при профит-факторе 2.40, тогда как переход на Back-Adjusted ряд устраняет ложные входы, снижая максимальную просадку до 21.4% и повышая профит-фактор до 3.69.
- Решение: Тестировать и оптимизировать роботов исключительно на сглаженных данных (Back-Adjusted / #).
План действий: выбор режима склейки под задачу
| Если ваша цель... | То правильное действие... | Результирующий шаг |
|---|---|---|
| Графический анализ уровней | Открыть склейку без поправки (!) | Найти исторические максимумы, минимумы и горизонтальные диапазоны |
| Тестирование ТС и индикаторов | Включить Back-Adjusted режим (# или b-adj) | Рассчитать индикаторы (MA, RSI) и запустить бэктест алгоритма |
| Исполнение сделки на бирже | Выбрать физический контракт месяца (например, SiM6) | Сверить ликвидность в стакане, рассчитать ГО и отправить ордер |
Чек-лист проверки перед отправкой биржевой заявки
- [ ] Проверка тикера: В торговом стакане открыт актуальный контракт серии (например, SiM6), а не информационный тикер склейки (Si1!).
- [ ] Запас времени: До даты экспирации выбранного инструмента остается более 3–5 рабочих дней (стакан ликвиден, спред узкий).
- [ ] Сверка цен: Стоп-лосс и тейк-профит выставлены по фактическим котировкам стакана, а не по смещенному ряду #.
- [ ] Контроль ГО: Суммарное гарантийное обеспечение по открытым позициям не превышает 40–50% свободного капитала.
- [ ] Расчет риска: Объем лотов скорректирован так, чтобы потенциальный убыток при срабатывании стопа не превышал 1–2% депозита.
Ответы на частые вопросы (FAQ)
-
Почему на сглаженном графике сырья в истории видны отрицательные цены?
Это результат кумулятивного вычитания положительного базиса (ΔP) в условиях многолетнего контанго. Когда дальний контракт из месяца в месяц торгуется дороже ближнего, Back-Adjusted алгоритм смещает исторические бары вниз, что на горизонте нескольких лет уводит значения ниже нуля. -
Почему брокер отклоняет заявку при попытке купить контракт RI1!?
Тикер RI1! — это синтетический расчетный поток данных, формируемый сервером котировок. На бирже обращаются только конкретные выпуски с датой исполнения (например, RI-6.26). Совершать сделки можно только внутри них. -
За сколько дней до экспирации рекомендуется переносить позицию на MOEX?
Оптимальное окно для ликвидных инструментов (Si, MIX, Brent) — за 3–4 рабочих дня до исполнения. В этот период дневной оборот и открытый интерес нового контракта превышают показатели старого, а спреды остаются минимальными. -
Искажает ли сглаживание гэпов показатели индикаторов объема торгов?
Нет. Терминалы при построении склеенного ряда переключают источник данных в момент ролловера, сохраняя фактический биржевой объем каждого бара. Профиль объема (Volume Profile) и кумулятивная дельта остаются полностью достоверными на всей протяженности истории.
