Strasmore Research
Обучение Matt ConnorАвтор: Matt Connor

Цена событийного контракта как вероятность исхода

Событийный контракт приносит один доллар или ноль, поэтому его цена отражает вероятность. Узнайте, почему сумма цен контрактов Да и Нет превышает один доллар и как убрать спред.

Цена контрактного события представляет собой вероятность с учетом спреда. Контракт приносит один доллар при наступлении указанного исхода и ноль долларов в противном случае; именно эта фиксированная выплата определяет математику процесса: тридцать центов за контракт с выплатой в один доллар означают, что рынок оценивает вероятность события примерно в тридцать процентов. +6% vs spot Для корректной интерпретации этого показателя требуется внести одну поправку на спред и одну — на механику расчетов.

О чём говорит цена событийного контракта с точки зрения вероятности

Всё определяется выплатой. Вы покупаете контракт «Да» по цене p и получаете один доллар, если событие происходит, и ничего, если оно не происходит. При многократном повторении средняя выплата равна истинной вероятности исхода «Да». Если вы платите ровно эту вероятность, вы выходите в безубыток. Уплаченная цена и есть вероятность безубыточности, поэтому одно число выполняет обе функции.

Четыре термина, определённые один раз:

  • Контракт «Да»: выплачивает один доллар при наступлении события и ноль долларов в противном случае.
  • Контракт «Нет»: выплачивает один доллар, если событие не наступает. «Да» и «Нет» — это две стороны одной медали.
  • Расчёт: момент, когда контракт исполняется и одна из сторон получает доллар.
  • Источник данных для расчёта: указанный отчёт или лента, на основе которых происходит расчёт по контракту. Выплата производится на основании данных этого источника, а не фактического положения дел.

Котировки событийных контрактов не входят в набор данных на этой странице. Каждая панель ниже измеряет идентичную арифметику там, где её можно измерить напрямую — в листинговых опционах на акции США. Дельта call-опциона варьируется от нуля до единицы и аппроксимирует рыночные шансы на то, что контракт истечёт «в деньгах». Это тот же бинарный вопрос, который задаёт событийный контракт: окажется ли цена выше уровня исполнения на дату расчёта или нет. Дельта является аппроксимацией этой вероятности, причём риск-нейтральной, а не прогнозной. Оба предела представлены на панелях. Руководство по дельта опциона описывает этот показатель.

Почему сумма Yes и No превышает один доллар?

Контракты Yes и соответствующий им No покрывают всё пространство возможных исходов, при этом выплату получает ровно один из них. В цепочке опционов эта пара представляет собой call и put с одной ценой исполнения и одной датой экспирации: call оказывается в деньгах выше страйка, а put — ниже него. Сумма их вероятностей должна составлять сто процентов. Ниже представлена такая пара для одной цепочки SPY за один день, сгруппированная в двухпроцентные диапазоны вокруг текущей спотовой цены.

ЗапросВероятности «да» и «нет» для одной цепочки опционов SPY: коллы, путы и совокупный показатель
Точный SQL-код для каждого числа
WITH chain AS (
    SELECT strike_price,
           toFloat64(any(underlying_close)) AS spot,
           avgIf(delta, delta > 0) AS call_delta,
           avgIf(-delta, delta < 0) AS put_delta_abs,
           countIf(delta > 0) AS calls,
           countIf(delta < 0) AS puts
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND date = toDate('2026-06-30')
      AND expiration_date = toDate('2026-07-31')
      AND iv_converged = 1
      AND volume > 0
    GROUP BY strike_price
    HAVING calls > 0 AND puts > 0
),
banded AS (
    SELECT toInt32(round(100 * (toFloat64(strike_price) / spot - 1) / 2) * 2) AS band,
           call_delta,
           put_delta_abs
    FROM chain
)
SELECT concat(if(band > 0, '+', ''), toString(band), '% vs spot') AS strike_vs_spot,
       round(100 * avg(call_delta), 1) AS yes_prob_pct,
       round(100 * avg(put_delta_abs), 1) AS no_prob_pct,
       round(100 * avg(call_delta + put_delta_abs), 1) AS pair_total_pct,
       count() AS strikes
FROM banded
WHERE abs(band) <= 8
GROUP BY band
ORDER BY band
Run this yourself

На уровне -8% vs spot сторона call котируется как 91.6%, а сторона put — как 7.8%, что в сумме дает 99.5%. На дальнем конце лестницы, +6% vs spot, значения составляют 3.6% и 82.5%, в сумме 86.2%. Все 8 диапазонов укладываются в сто процентов с учетом округления. Эта ровная линия на графике — ограничение, в рамках которого существует любой бинарный рынок. Совокупное позиционирование по обеим сторонам — это то, что учитывает put call ratio.

Модельные значения ведут себя предсказуемо. Котировки — нет. Допустим, контракт котируется по 62 на покупку и 66 на продажу, а его сторона No — по 36 на покупку и 40 на продажу. Купив Yes по 66 и No по 40, вы платите один доллар и шесть центов за позицию, которая гарантированно принесет один доллар. Продав оба контракта по ценам спроса, вы получаете девяносто восемь центов при обязательстве в один доллар. Разрыв в шесть центов между двумя ценами предложения — это оверраунд, величина, которую игроки на ставках называют «виг» (маржа), и именно за это площадка и маркет-мейкер получают вознаграждение за поддержание ликвидности. Страница bid ask spread объясняет, почему этот разрыв вообще существует.

Арифметика устранения маржи (de-vig), шаг за шагом

На входе — две котировки. На выходе — две справедливые вероятности, сумма которых равна единице.

  1. Возьмите среднее значение для каждой стороны. Среднее для «Да» составляет шестьдесят четыре цента, среднее для «Нет» — тридцать восемь центов.
  2. Сложите их. Итоговая сумма по книге составляет сто два цента.
  3. Разделите каждое среднее значение на эту сумму. Шестьдесят четыре, деленное на сто два, дает шестьдесят две целых и семь десятых процента. Тридцать восемь, деленное на сто два, дает тридцать семь целых и три десятых процента.
  4. Проверьте сумму. Теперь пара составляет сто процентов.

Это масштабирование и есть то, что означает устранение маржи (de-vig), и это та же нормализация, которую игрок применяет к десятичным коэффициентам.

Теперь применим это к более узкому рынку. Котировка по тому же контракту: шестьдесят три на покупку (bid) и шестьдесят четыре на продажу (ask), при этом «Нет» — тридцать шесть на покупку и тридцать семь на продажу. Средние значения составляют шестьдесят три с половиной и тридцать шесть с половиной, сумма по книге составляет ровно сто центов, а вероятность после устранения маржи равна шестидесяти трем с половиной процентам. Два результата — шестьдесят две целых и семь десятых процента на широком рынке и шестьдесят три с половиной процента на узком — различаются менее чем на один процентный пункт. Однако диапазон достоверности вокруг них — нет. Любая вероятность между ценой покупки в шестьдесят два цента и ценой продажи в шестьдесят шесть центов согласуется с широкой котировкой, поэтому рынок с четырехцентовым спредом фиксирует шансы с точностью лишь около четырех пунктов, не более. Запись «шестьдесят две целых и семь десятых процента» для четырехцентового рынка указывает три значащие цифры точности, которых рынок не содержит. Ширина спреда и есть точность. +6% vs spot

Означает ли цена в тридцать процентов, что событие происходит в тридцати процентах случаев?

Калибровка — это проверка: мы собираем все инструменты, которые рынок оценил близко к тридцати процентам, а затем подсчитываем, как часто они исполнялись. Мы взяли каждый call-опцион на SPY из архива с января две тысячи двадцать второго года, зафиксировали данные примерно за тридцать дней до экспирации, распределили их по корзинам подразумеваемой вероятности и сопоставили с тем, закрылся ли SPY выше страйка в день экспирации.

ЗапросПодразумеваемая вероятность против фактической: коллы на SPY за 30 дней до экспирации, 2022 — июнь 2026 г.
Точный SQL-код для каждого числа
WITH px AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           argMax(toFloat64(close), window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2022-01-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY session
),
snap AS (
    SELECT ticker AS contract,
           argMin(delta, abs(days_to_expiry - 30)) AS implied_prob,
           toFloat64(any(strike_price)) AS strike,
           any(expiration_date) AS expiry
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND date >= toDate('2022-01-01')
      AND expiration_date <= toDate('2026-06-30')
      AND days_to_expiry BETWEEN 25 AND 35
      AND iv_converged = 1
      AND volume > 0
      AND delta > 0.02
      AND delta < 0.98
    GROUP BY contract
)
SELECT multiIf(implied_prob < 0.10, '2-10%',
               implied_prob < 0.20, '10-20%',
               implied_prob < 0.30, '20-30%',
               implied_prob < 0.40, '30-40%',
               implied_prob < 0.50, '40-50%',
               implied_prob < 0.60, '50-60%',
               implied_prob < 0.70, '60-70%',
               implied_prob < 0.80, '70-80%',
               implied_prob < 0.90, '80-90%',
                                    '90-98%') AS implied_bucket,
       count() AS contracts,
       round(100 * avg(implied_prob), 1) AS implied_prob_pct,
       round(100 * avg(close_px > strike), 1) AS finished_above_pct
FROM snap
INNER JOIN px ON px.session = snap.expiry
GROUP BY implied_bucket
ORDER BY implied_prob_pct
Run this yourself

Столбец подразумеваемой вероятности растет по мере продвижения вверх по шкале в силу самой конструкции модели. Столбец реализованной вероятности — это то, чего никто не знал заранее. В нижней части корзина 2-10% имела среднее значение 4.7% при 4276 контрактах и закрывалась выше страйка в 4.9% случаев. В верхней части 90-98% имела среднее значение 94.3% и результат 97.8%. Реализованная доля в нижней части шкалы значительно ниже, чем в верхней, что и является признаком того, что калибровка работает корректно.

К любой подобной таблице прилагаются два предостережения. Важен временной интервал: выборка, охватывающая преимущественно растущий рынок, завышает реализованные показатели для всех call-опционов, а другой период изменит эти значения. Кроме того, дельта отвечает на вопрос, какая вероятность делает ценообразование внутренне непротиворечивым, а не на то, во что верит прогнозист. Одна и та же цепочка опционов оценивает целое распределение, а не один порог (ожидаемое движение).

Сузим выборку до контрактов, которые рынок оценил как «подбрасывание монеты» (около пятидесяти центов на доллар) для шести известных компаний:

ЗапросКонтракты с вероятностью исхода около 50%: подразумеваемая и реализованная доходность по тикерам, 2023 — июнь 2026 г.
Точный SQL-код для каждого числа
WITH px AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           argMax(toFloat64(close), window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'XOM')
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2023-01-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, session
),
snap AS (
    SELECT underlying_symbol AS symbol,
           ticker AS contract,
           argMin(delta, abs(days_to_expiry - 30)) AS implied_prob,
           toFloat64(any(strike_price)) AS strike,
           any(expiration_date) AS expiry
    FROM global_markets.options_greeks
    WHERE underlying_symbol IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'XOM')
      AND date >= toDate('2023-01-01')
      AND expiration_date <= toDate('2026-06-30')
      AND days_to_expiry BETWEEN 25 AND 35
      AND iv_converged = 1
      AND volume > 0
      AND delta BETWEEN 0.40 AND 0.60
    GROUP BY symbol, contract
)
SELECT snap.symbol AS symbol,
       count() AS contracts,
       round(100 * avg(implied_prob), 1) AS implied_prob_pct,
       round(100 * avg(close_px > strike), 1) AS finished_above_pct
FROM snap
INNER JOIN px ON px.ticker = snap.symbol AND px.session = snap.expiry
GROUP BY symbol
ORDER BY finished_above_pct DESC
Run this yourself

Подразумеваемая вероятность в каждой строке близка к пятидесяти процентам в силу конструкции. Реализованные показатели различаются: SPY закрывался выше страйка в 68.4% случаев при 4785 контрактах, по сравнению с 49.9% для XOM. 6 наименований, одна общая подразумеваемая вероятность и широкий разброс фактических результатов. Цена около пятидесяти центов отражает рыночные шансы. При этом любой отдельный контракт в итоге всегда оценивается либо в один доллар, либо в ноль.

Какова точка безубыточности для контракта стоимостью 0,70 доллара?

Контракт, купленный за 70 центов, приносит 1,00 доллар при исходе «Да» и ничего при исходе «Нет». Прибыль составляет 30 центов, убыток — 70 центов, а вероятность безубыточности в точности равна цене контракта. При реальной вероятности в семьдесят процентов позиция превращается в подбрасывание монеты с дополнительными условиями. Выше семидесяти процентов арифметика работает в пользу покупателя, ниже — против него, и это без учета издержек.

Издержки неравномерно смещают эту границу. Добавьте один цент комиссии за полный цикл сделки к контракту стоимостью 70 центов, и точка безубыточности сместится с 70% примерно до 71%, что является погрешностью округления для данной позиции. Добавьте тот же цент к контракту стоимостью 5 центов, и точка безубыточности сдвинется с 5% до 6%, поглотив пятую часть теоретического преимущества. Фиксированные комиссии наносят наибольший ущерб самым дешевым ставкам на маловероятные события, где комиссия составляет значительную долю от уплаченной цены. Тип ордера работает аналогичным образом: исполнение по рынку (crossing the spread) означает покупку по полной цене предложения (ask), в то время как отложенный лимитный ордер ожидает исполнения по указанной вами цене и может вовсе не сработать (рыночный ордер против лимитного ордера).

Почему почти гарантированный результат торгуется по 0,97 доллара?

Результат, который никто не оспаривает, редко торгуется по 1,00 доллару. В этих трех центах разницы кроются четыре фактора:

  • Временная стоимость денег. Доллар поступит на счет только в момент исполнения контракта. Выплата 97 центов сегодня за 1,00 доллар через три месяца — это доход на капитал, а эти средства можно использовать иначе (размещение свободных денежных средств).
  • Риск источника данных. Контракт исполняется на основе данных указанного источника и по его графику. Пересмотры, задержки и неоднозначные формулировки остаются актуальными рисками даже при очевидном исходе.
  • Сам спред. Если котировка составляет 96 на покупку и 98 на продажу, средняя цена равна 97 центам, но сделок по 97 центам нет. В процентном выражении стакан часто наиболее разрежен именно на краях диапазона.
  • «Хвост» вероятностей. Слово «гарантированный» люди используют неточно. Контракты исполняются согласно определениям в правилах.

Сходимость цен поддается измерению. Возьмем call-опционы на SPY, которые за месяц до экспирации оценивались как равновероятные события, разделим их по фактическому результату и проследим среднюю подразумеваемую вероятность в шести контрольных точках.

ЗапросРазрешение ситуации при вероятности исхода около 50%: средняя подразумеваемая вероятность по контрольным точкам в разрезе результатов
Точный SQL-код для каждого числа
WITH px AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           argMax(toFloat64(close), window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2025-06-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY session
),
coin_flips AS (
    SELECT ticker AS contract
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND date >= toDate('2025-06-01')
      AND expiration_date <= toDate('2026-06-30')
      AND days_to_expiry BETWEEN 28 AND 32
      AND iv_converged = 1
      AND volume > 0
      AND delta > 0
    GROUP BY contract
    HAVING avg(delta) BETWEEN 0.35 AND 0.65
),
obs AS (
    SELECT g.days_to_expiry AS dte,
           g.delta AS implied_prob,
           if(px.close_px > toFloat64(g.strike_price), 1, 0) AS finished_above
    FROM global_markets.options_greeks AS g
    INNER JOIN coin_flips AS c ON g.ticker = c.contract
    INNER JOIN px ON px.session = g.expiration_date
    WHERE g.underlying_symbol = 'SPY'
      AND g.date >= toDate('2025-06-01')
      AND g.expiration_date <= toDate('2026-06-30')
      AND g.iv_converged = 1
      AND g.volume > 0
      AND g.delta > 0
      AND (g.days_to_expiry BETWEEN 28 AND 32
        OR g.days_to_expiry BETWEEN 19 AND 23
        OR g.days_to_expiry BETWEEN 12 AND 16
        OR g.days_to_expiry BETWEEN 6 AND 8
        OR g.days_to_expiry BETWEEN 3 AND 4
        OR g.days_to_expiry <= 1)
)
SELECT multiIf(dte >= 28, '30 days out',
               dte >= 19, '21 days out',
               dte >= 12, '14 days out',
               dte >= 6, '7 days out',
               dte >= 3, '3 days out',
                         '1 day out') AS checkpoint,
       round(100 * avgIf(implied_prob, finished_above = 1), 1) AS eventual_yes_pct,
       round(100 * avgIf(implied_prob, finished_above = 0), 1) AS eventual_no_pct,
       count() AS contract_days
FROM obs
GROUP BY checkpoint
HAVING countIf(finished_above = 1) > 0 AND countIf(finished_above = 0) > 0
ORDER BY avg(dte) DESC
Run this yourself

В точке 30 days out контракты, которые в итоге закрылись выше цены исполнения, имели среднюю подразумеваемую вероятность 52.6% против 47.8% для тех, что закрылись ниже. К моменту 1 day out показатели для этих двух групп составили 79.8% и 14.4%. Это разделение проведено ретроспективно. Никто, анализируя опционную цепочку в первой контрольной точке, не мог отличить одну группу от другой — именно в таком состоянии всегда находится активный контракт на событие. Уверенность наступает в дату исполнения, а цена движется к ней постепенно. Правила исполнения фиксируют точный момент: опционы с утренним и вечерним расчетом показывают, насколько важна эта деталь, а подразумеваемая волатильность — это ответ той же цепочки на вопрос о масштабе движения, а не о его направлении.

Примечания к данным и ограничения

Дельта является суррогатом цены «Да», а не идентичным показателем. Она аппроксимирует риск-нейтральные шансы на экспирацию в деньгах и незначительно отличается от модельной вероятности того же события. Результаты здесь сравнивают цену закрытия основной сессии в день экспирации с ценой исполнения, что приближенно отражает расчет, а не воспроизводит официальную цену исполнения. Каждая опционная панель фильтруется по сходимости подразумеваемой волатильности и ненулевому объему торгов по контракту в эту дату, поэтому неликвидные контракты исключаются из выборки. Каждый контракт попадает в калибровочные панели один раз, по состоянию на момент, максимально близкий к тридцати дням до экспирации.

Часто задаваемые вопросы о ценообразовании событийных контрактов

Является ли цена событийного контракта вероятностью?

Это вероятность, скорректированная двумя факторами. Котировка включает спред, взимаемый торговой площадкой и маркет-мейкерами, а также дисконтирование доллара, который будет получен при расчёте, а не сегодня. Если исключить эти составляющие, останется рыночная оценка вероятности наступления события.

Что даёт очистка от маржи (de-vigging) в двустороннем рынке?

Она пересчитывает две средние цены так, чтобы их сумма составляла сто процентов. Сложите среднюю цену «Да» и среднюю цену «Нет», а затем разделите каждую на полученную сумму. Если цена «Да» составляет шестьдесят четыре цента, а «Нет» — тридцать восемь центов, в сумме получается сто два цента. После очистки пара составит шестьдесят две целых и семь десятых процента и тридцать семь целых и три десятых процента.

Почему цены «Да» и «Нет» в сумме дают больше доллара?

Один из двух вариантов обязательно принесёт один доллар, поэтому пара без учёта издержек должна стоить ровно один доллар. Лишние центы на стороне аска — это оверраунд, то есть доход от спреда, заложенный в двусторонний рынок. Продажа обеих сторон, напротив, даст сумму меньше доллара, зеркально отражая тот же разрыв.

Означает ли цена контракта в девяносто центов, что он не срабатывает один раз из десяти?

Примерно так, если рынок хорошо откалиброван на множестве схожих контрактов. В панели SPY выше корзина 90-98% имела среднюю подразумеваемую вероятность 94.3% и закрылась выше страйка в 97.8% случаев. Отдельный контракт всё равно исполняется либо по цене в один доллар, либо по нулю.

Насколько широкий спред меняет подразумеваемую вероятность?

Примерно на величину спреда. Рынок с одноцентовым спредом фиксирует вероятность с точностью до одного пункта. Рынок с четырёхцентовым спредом оставляет диапазон в четыре пункта, и любая вероятность внутри этого диапазона соответствует котировке.


Каждое число выше получено из сохранённого запроса по данным листинговых контрактов; SQL-код для каждой панели доступен по одному клику. Выполните те же вычисления по очистке от маржи для актуальной цепочки контрактов в терминале Strasmore.

#prediction markets#event contracts#probability#market mechanics#options