Всем привет! Сегодня разберём одну из классических арбитражных конструкций на срочном рынке — фьючерс против базового актива.
На первый взгляд идея простая: есть акция, есть фьючерс на эту акцию, между ними есть разница. Если фьючерс кажется слишком дорогим — можно продать фьючерс и купить акцию. Если слишком дешёвым — собрать обратную конструкцию.
Но в случае фьючерса против акции сама по себе разница между ценами ещё ничего не означает.
Фьючерс почти никогда не должен стоить ровно столько же, сколько базовый актив. Между ними обычно есть экономически обоснованное расхождение: стоимость денег, срок до экспирации, ожидаемые дивиденды, размер контракта, комиссии и другие параметры.
Поэтому практический вопрос звучит не так: почему фьючерс отличается от акции? А насколько текущий спред отличается от расчётного справедливого уровня?
Именно для таких задач мы развиваем Spread Insight: не как ещё один скринер с готовыми сигналами, а как слой математики для арбитража, где можно описывать собственные формулы, использовать надёжную маркет-дату и отслеживать расчётные показатели в онлайне.
От цены к расчётной модели
Возьмём пару из акции Ростелекома RTKM и сентябрьского фьючерса RTU6.
Самый простой спред можно записать так:
let spread = fut - spot * lot;
То есть берём цену фьючерса и вычитаем стоимость базового актива, приведённую к размеру контракта. На 26.05.2026 получим такую картину:
RTKM | 51.75 руб. |
RTU6 | 5 326 руб. |
spread | 151 руб. |
Но сам по себе этот спред не говорит, есть ли здесь арбитражная возможность. Он может быть большим, но нормальным. Или небольшим, но интересным относительно справедливого значения.
Чтобы понять это, нужно построить расчётную модель. В простом виде логика такая:
справедливая цена фьючерса = стоимость базового актива + стоимость денег до экспирации − ожидаемые дивиденды
Если мы покупаем фьючерс вместо акции, мы не замораживаем полную стоимость позиции в акции. Эти деньги можно было бы разместить под процент до экспирации. Поэтому фьючерс обычно должен быть дороже акции на стоимость денег.
С другой стороны, если до экспирации ожидаются дивиденды, владелец акции их получит, а держатель фьючерса — нет. Поэтому ожидаемые дивиденды уменьшают справедливую цену фьючерса.
В результате нам нужно считать не просто текущий спред, а его отклонение от справедливого уровня.
Почему Excel быстро становится неудобным
Многие начинают с таблицы. В одну колонку подтягивается цена акции, в другую — цена фьючерса. Рядом ставка, дивиденды, дата экспирации, комиссии, размер лота. Затем формулы, ручные поправки, цветовые выделения, комментарии в ячейках.
Для одной пары это может работать. Но как только пар становится больше, таблица начинает превращаться в самодельный терминал:
● данные нужно регулярно обновлять;
● формулы нужно поддерживать;
● разные инструменты имеют разные размеры контрактов;
● дивиденды и ставки меняются;
● часть логики остаётся в голове;
● сложнее понять, почему конкретная строка стала интересной.
Готовые скринеры решают часть задачи, но часто не дают гибкости. Они могут показать рассчитанное значение, но не всегда позволяют понять или изменить формулу под свою логику. А в арбитраже формула — это и есть стратегия.
Поэтому удобнее работать не с набором ручных таблиц, а с расчётным слоем, где:
● формула явно описана;
● параметры берутся из маркет-даты;
● расчёты обновляются автоматически;
● промежуточные переменные можно вывести в таблицу;
● нужные показатели можно смотреть на графике;
● на условия по переменным можно поставить уведомления.
Контур расчёта
Для арбитража фьючерс против акции нам нужен примерно такой контур:
маркет-дата
↓
формула спреда
↓
справедливое значение
↓
доходность на капитал
↓
отклонение от справедливого уровня
↓
таблица / график / уведомление
Это не обязательно один универсальный расчёт для всех. Разные трейдеры могут использовать разные ставки, по-разному учитывать капитал, комиссии, дивиденды и налоговые параметры.
Поэтому важна не только готовая формула, но и возможность её менять.
Spread Insight как раз даёт такую механику: можно описывать свои формулы и превращать их в рабочие таблицы, графики и уведомления.
Базовые рыночные параметры
Начнём с исходных данных:
let spot = {{MOEX:RTKM.LAST}};
let fut = {{MOEX:RTU6.LAST}};
let lot = {{MOEX:RTU6.CONTRACT_SIZE}};
Здесь:
● spot — последняя цена акции;
● fut — последняя цена фьючерса;
● lot — размер контракта фьючерса.
Теперь считаем фактический спред:
let spread = fut - spot * lot; # Колонка Спред
Это текущая разница между фьючерсом и базовым активом с учётом размера контракта. Но чтобы интерпретировать это значение, нужно посчитать справедливый спред.
Справедливый спред
Добавим ставку, срок до экспирации и дивиденды:
let r_RUB = {{FINAM:RUIR.QUOTE}} / 100;
let T = DAYS_TO({{MOEX:RTU6.EXPIRED}}) / 365;
let days = DAYS_TO({{MOEX:RTU6.EXPIRED}});
let div_size = {{MOEX:RTU6.IMPLIED_DIVIDEND}};
let tax_rate = 0.87;
let div_net = div_size * tax_rate;
let fair_spread = spot r_RUB T lot - div_net lot;
Что здесь происходит:
● r_RUB — рублевая ставка;
● T — срок до экспирации в годах;
● days — срок до экспирации в днях;
● div_size — рекомендованный советом директоров дивиденд на акцию;
● tax_rate — налоговая корректировка;
● div_net — дивиденд после налоговой корректировки;
● fair_spread — справедливый спред между фьючерсом и акцией.
В этой логике справедливый спред — это стоимость денег до экспирации минус ожидаемые дивиденды.
Если фактический спред выше справедливого, фьючерс относительно дорогой. Если ниже — относительно дешёвый.
Теперь можем оценить спред на 26.05.2026:
RTKM | 51.75 руб. |
RTU6 | 5 326 руб |
spread | 151.23 руб |
Справедливый спред | 232.71 руб |
Получается, что фактический спред не превышает справедливый уровень, а находится ниже его! То есть, купив спред, мы получим меньшую доходность, чем по вкладу. Может показаться, что здесь перспектив нет.
Но на самом деле мы не учли ещё один фактор - неопределенность в вопросе выплаты дивидендов. Рынок уже заложил ожидания по дивидендам в ожидании решения компании. Но насколько они адекватны?
Дивиденды: ожидания, рекомендации и рыночная цена
С дивидендами есть отдельный важный нюанс. До окончательного решения акционеров рынок обычно живёт ожиданиями. Сначала появляются прогнозы аналитиков, затем рекомендации совета директоров, затем дата закрытия реестра, затем уже фактическая выплата.
Рекомендация совета директоров часто становится важной точкой переоценки. До неё рынок может закладывать один дивиденд, после неё — другой. Если фьючерс экспирируется после дивидендной отсечки, изменение дивидендного ожидания напрямую влияет на справедливый уровень спреда.
Поэтому в модели удобно явно получать рекомендованный советом директоров размер дивиденда:
let div_size = {{MOEX:RTU6.IMPLIED_DIVIDEND}};
В дальнейшем её можно сравнивать со своим ожиданием по дивидендам и с ожиданиями рынка, которые заложены в цену фьючерса.
Какие дивиденды заложены в цену фьючерса
Если известны цена акции, цена фьючерса, ставка и срок до экспирации, можно восстановить дивиденды, которые рынок фактически закладывает в текущую цену фьючерса.
# Дивиденды на акцию, заложенные рынком в цену фьючерса
let div_expected_net = spot r_RUB T - spread / lot;
# Дивиденды нетто, заложенные рынком
let div_expected = div_expected_net / tax_rate;
Это полезный аналитический показатель.
Например, можно сравнить:
● дивиденд, заложенный рынком;
● рекомендацию совета директоров;
● консенсус-прогноз;
● собственную оценку.
Если рынок закладывает дивиденд заметно выше или ниже вашего ожидания, это уже отдельная гипотеза для анализа.
В случае Ростелекома на 26.05.2026 рынок ожидает дивиденды в размере 0.94 руб на акцию. Если ваши собственные ожидания выше - это уже сигнал к сделке. Однако как понять, сколько можно заработать, если дивиденды окажутся выше? И сколько можно потерять, если компания решит не выплачивать их вообще?
Комиссии, ГО и размер капитала
Следующий слой расчёта — комиссии и капитал под позицию.
Комиссии и ГО:
let stock_commission = spot lot 0.000354; # Retail комиссия по акциям ФИНАМ
let fut_commission = 0.45; # Retail комиссия по фьючерсам ФИНАМ
let fut_initial_margin_knur = {{MOEX:RTU6.INITIAL_MARGIN}};
Размер капитала под позицию:
let position_size_knur = spot * lot + fut_initial_margin_knur;
Здесь капитал под позицию считается как:
стоимость акции * размер лота + ГО по фьючерсу
Это один из возможных способов оценки капитала. В другой модели можно добавить буфер под просадку, учитывать только маржинальную часть, использовать собственный риск-лимит или другую методику. Главное, что способ расчёта явно записан в формуле.
Доходность до экспирации
Теперь можно перейти от спреда в рублях к доходности на капитал:
Спред в процентах от капитала:
let spread_pct_knur = (spread + div_net * lot - stock_commission - fut_commission) / position_size_knur;
Годовая доходность до экспирации:
let annual_yield_knur = spread_pct_knur * 365 / days;
spread_pct_knur показывает результат относительно капитала под позицию.
annual_yield_knur приводит эту величину к годовой доходности.
Это удобно, если нужно сравнивать разные пары с разными сроками до экспирации. Одна сделка может давать 0,5% за 10 дней, другая — 2% за 90 дней. В годовом выражении их проще сопоставить.
Но не всем удобно мыслить через годовую доходность. Иногда трейдеру важнее понять сколько эта конструкция даёт сверх стоимости денег? Для этого можно отдельно посчитать доходность справедливого спреда и превышение текущего спреда над ним.
Справедливый спред в процентах от капитала:
let fair_spread_pct_knur = (fair_spread + div_net * lot - stock_commission - fut_commission) / position_size_knur;
Доходность сверх справедливого уровня / стоимости денег – премия:
let premium_pct = spread_pct_knur - fair_spread_pct_knur;
Доходность показывает, сколько текущая конструкция даёт сверх расчётного справедливого уровня. Это не замена годовой доходности, а другой взгляд на ту же идею. Кому-то удобнее смотреть на annual_yield_knur, а кому-то — на premium_pct, то есть на потенциальную добавку относительно стоимости денег и справедливой модели.
Здесь мы уже можем подсчитать потенциальную прибыль и убыток:
Размер единичной позиции (position_size_knur) | 6 092.65 руб. |
Текущая премия (premium_pct) - сколько мы потеряем, если дивиденды выплачивать не будут. | -1.2% |
Премия при дивиденде 0.95 руб | 0 - она уже заложена в цену |
Премия при дивиденде 2 рубля | 1.6% |
28 мая 2026 года совет директоров рекомендовал выплатить дивиденды в размере 2.71 рубля на акцию. Это могло бы дать около 2,7% прибыли по заданной модели и параметрам.
Полная формула
В текущей реализации расчёт выглядит так:
let spot = {{MOEX:RTKM.LAST}};
let fut = {{MOEX:RTU6.LAST}};
let lot = {{MOEX:RTU6.CONTRACT_SIZE}};
let r_RUB = {{FINAM:RUIR.QUOTE}} / 100;
let T = DAYS_TO({{MOEX:RTU6.EXPIRED}}) / 365;
let days = DAYS_TO({{MOEX:RTU6.EXPIRED}});
let div_size = {{MOEX:RTU6.IMPLIED_DIVIDEND}}; # Колонка Див.СД
let tax_rate = 0.87;
let div_net = div_size * tax_rate;
let fair_spread = spot r_RUB T lot - div_net lot;
let spread = fut - spot * lot; # Колонка Спред
# Дивиденды на акцию, заложенные рынком в цену фьючерса
let div_expected_net = spot r_RUB T - spread / lot;
# Дивиденды нетто, заложенные рынком
let div_expected = div_expected_net / tax_rate;
# Комиссии и ГО
let stock_commission = spot lot 0.000354; # Retail комиссия по акциям ФИНАМ
let fut_commission = 0.45; # Retail комиссия по фьючерсам ФИНАМ
let fut_initial_margin_knur = {{MOEX:RTU6.INITIAL_MARGIN}};
# Размер капитала под позицию
let position_size_knur = spot * lot + fut_initial_margin_knur;
# Спред в процентах от капитала
let spread_pct_knur = (spread + div_net * lot - stock_commission - fut_commission) / position_size_knur;
# Годовая доходность до экспирации
let annual_yield_knur = spread_pct_knur * 365 / days;
# Справедливый спред в процентах от капитала
let fair_spread_pct_knur = (fair_spread + div_net * lot - stock_commission - fut_commission) / position_size_knur;
# Доходность сверх справедливого уровня / стоимости денег
let premium_pct = spread_pct_knur - fair_spread_pct_knur;
На этом примере видно, зачем нужен конструктор формул.
В реальной арбитражной модели важен не один показатель, а вся цепочка:
● текущий спред;
● справедливый спред;
● дивиденды, заложенные рынком;
● комиссии;
● гарантийное обеспечение;
● капитал под позицию;
● доходность до экспирации;
● доходность сверх справедливого уровня.
И все эти значения удобно видеть не только как итоговую цифру, но и как отдельные переменные.
Что даёт Spread Insight
Spread Insight позволяет превратить такую формулу в рабочий инструмент.
Вместо того чтобы считать спреды в Excel, вручную обновлять параметры и поддерживать набор таблиц, можно описать модель прямо в конструкторе.
Дальше заданные в формуле переменные можно использовать как полноценные поля:
● выводить их в таблицу;
● настраивать состав и порядок колонок;
● сортировать и фильтровать спреды по расчётным значениям;
● смотреть переменные на графиках;
● отслеживать динамику спреда, справедливого уровня, доходности или дивидендных ожиданий;
● настраивать уведомления на условия с переменными.
Например, можно сделать уведомление не просто на цену фьючерса, а на расчётное условие:
premium_pct > 0.015
Или:
annual_yield_knur > 0.25
Или:
div_expected отличается от рекомендации совета директоров сильнее заданного порога
Такой подход делает мониторинг ближе к реальной логике стратегии. Система следит не за абстрактным «расхождением», а за тем условием, которое вы сами описали в формуле.
Не чёрный ящик, а прозрачная математика
Главная идея Spread Insight — дать трейдеру и разработчику стратегий не просто список готовых сигналов, а прозрачную расчётную среду.
Формула остаётся видимой. Её можно менять, дополнять и адаптировать:
● под свои комиссии;
● под свою ставку;
● под свой способ оценки капитала;
● под своё ожидание дивидендов;
● под конкретный тип арбитража;
● под разные рынки и инструменты.
Это особенно важно для арбитража, потому что здесь результат часто определяется деталями расчёта.
Разные участники могут по-разному учитывать ставку, дивиденды, капитал, плечо и издержки. Поэтому универсальный скринер не всегда подходит. Нужен инструмент, где можно собрать свою модель и затем применить её к набору инструментов.
В Spread Insight можно собирать коллекции спредов под разные типы арбитража и настраивать под них собственное рабочее пространство: таблицу, графики, формулы и уведомления.
Заключение
Фьючерс против базового актива — хороший пример того, почему в арбитраже недостаточно просто смотреть на разницу цен. Разница есть почти всегда. Вопрос в том, насколько она соответствует расчётной модели.
Чтобы ответить на этот вопрос, нужно учитывать:
● стоимость денег;
● срок до экспирации;
● ожидаемые дивиденды;
● рекомендации совета директоров;
● комиссии;
● гарантийное обеспечение;
● капитал под позицию;
● доходность;
● отклонение от справедливого уровня.
Эту математику можно считать в Excel, но при большом количестве инструментов и параметров удобнее держать её в системе, которая работает на актуальной маркет-дате, пересчитывает показатели автоматически и позволяет явно описывать свои формулы.
Инструмент бесплатный, попробовать можно здесь.
