Необычная активность на рынке опционов за последнюю сессию
Анализ аномальных объемов торгов на рынке опционов США. Узнайте, какие активы превысили средние показатели за двадцать сессий и как распределился спрос между колл и пут опционами.
Sep 3
Необычная активность на рынке опционов означает, что по базовому активу за сессию было заключено значительно больше контрактов, чем обычно. В этой таблице представлены данные за последнюю завершенную торговую сессию: общее количество проторгованных контрактов по отношению к среднему значению за предыдущие двадцать сессий. Лента опционных сделок обновляется с задержкой относительно ленты акций, поэтому указанная здесь сессия является последней полной сессией в наших данных, а не текущей.
Перед изучением таблицы важно прояснить один момент: это фильтр по объему торгов. Большинство публикаций об аномальной активности сравнивают дневной объем с открытым интересом — количеством контрактов, остающихся в силе после закрытия торгов. Наши данные содержат информацию о сделках, а не о позициях, и поле открытого интереса в них отсутствует. Каждый коэффициент ниже сравнивает объем торгов по базовому активу с его собственной историей объемов. В статье Объем опционов против открытого интереса подробно разбирается, на какие вопросы отвечает каждый из этих показателей.
Нетипичная активность на рынке опционов: итоги последней торговой сессии
| Тикер | Отношение объема | Объем сессии (тыс.) | Базовый объем (тыс.) | Объем пред. максимума (тыс.) | Метка сессии | ID сессии | Кол-во базовых сессий |
|---|---|---|---|---|---|---|---|
| DPRO | 27.9 | 204.9 | 7.4 | 96.4 | Sep 3 | 20260903 | 20 |
| IOT | 9.1 | 45.9 | 5 | 16.6 | Sep 3 | 20260903 | 20 |
| ZS | 7.5 | 123.7 | 16.5 | 29.6 | Sep 3 | 20260903 | 20 |
| DOCU | 7 | 59 | 8.4 | 21.2 | Sep 3 | 20260903 | 20 |
| SNOW | 7 | 274.5 | 39 | 184.7 | Sep 3 | 20260903 | 20 |
| VFC | 6.3 | 48.9 | 7.8 | 16.2 | Sep 3 | 20260903 | 20 |
| CPB | 5.9 | 47.2 | 8 | 48.7 | Sep 3 | 20260903 | 20 |
| LULU | 5.4 | 153.1 | 28.3 | 47 | Sep 3 | 20260903 | 20 |
| PL | 5.1 | 92.8 | 18.2 | 35.9 | Sep 3 | 20260903 | 20 |
| HPE | 4.6 | 254.4 | 55.2 | 213.3 | Sep 3 | 20260903 | 20 |
Точный SQL-код для каждого числа
WITH tape AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime(today() - 45, 'America/New_York')
GROUP BY d
),
ranked AS (
SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS raw_rn
FROM tape
),
cal AS (
SELECT d, vol, rn, sum(if(rn BETWEEN 2 AND 21, 1, 0)) OVER () AS baseline_sessions
FROM (
SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS rn
FROM ranked
WHERE vol >= 0.75 * (SELECT quantileExact(0.5)(vol) FROM ranked WHERE raw_rn > 1)
)
),
day_root AS (
SELECT substring(ticker, 3, length(ticker) - 17) AS root,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime(today() - 45, 'America/New_York')
GROUP BY root, d
),
scored AS (
SELECT r.root AS root,
sumIf(r.vol, c.rn = 1) AS last_vol,
avgIf(r.vol, c.rn BETWEEN 2 AND 21) AS base_vol,
maxIf(r.vol, c.rn BETWEEN 2 AND 21) AS prior_high,
countIf(c.rn BETWEEN 2 AND 21) AS root_sessions,
max(c.baseline_sessions) AS baseline_session_count,
maxIf(toYYYYMMDD(c.d), c.rn = 1) AS session_id,
maxIf(formatDateTime(c.d, '%b %e'), c.rn = 1) AS session_label
FROM day_root r INNER JOIN cal c ON r.d = c.d
WHERE c.rn <= 21
AND r.root NOT IN ('SPCX')
AND r.root NOT IN ('KORU','SOXL','SOXS','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
GROUP BY r.root
HAVING last_vol >= 25000 AND base_vol >= 5000 AND root_sessions >= 18
)
SELECT root AS ticker,
round(last_vol / base_vol, 1) AS vol_ratio,
round(last_vol / 1000, 1) AS session_volume_k,
round(base_vol / 1000, 1) AS baseline_volume_k,
round(prior_high / 1000, 1) AS prior_high_volume_k,
session_label,
session_id,
baseline_session_count
FROM scored
ORDER BY vol_ratio DESC, ticker ASC
LIMIT 10Данные представлены в трех столбцах. Коэффициент показывает, насколько объем торгов базовым активом превысил его среднее значение. Базовый уровень отражает нормальный объем: высокий множитель при низкой ликвидности опционной серии менее значим, чем умеренный рост при высокой активности. Максимум за двадцать сессий указывает, превысил ли объем торгов показатели предыдущего месяца. Последние три столбца — это контрольный журнал: дата сессии, на основе которой построена таблица (в виде метки и числа), а также количество учитываемых сессий для расчета базового уровня, которое должно составлять двадцать для публикации страницы.
DPRO возглавляет список с показателем 27.9x от среднего значения: 204.9 тысяч контрактов против базового уровня в 7.4 тысяч при предыдущем максимуме за двадцать сессий в 96.4 тысяч.
- IOT на уровне 9.1x: 45.9 тысяч контрактов против базового уровня в 5 тысяч.
- ZS на уровне 7.5x, 123.7 тысяч контрактов при базовом уровне в 16.5 тысяч.
- DOCU на уровне 7x, 59 тысяч контрактов против максимума за двадцать сессий в 21.2 тысяч.
- SNOW на уровне 7x при 274.5 тысячах контрактов.
Последняя строка таблицы, HPE, показала объем торгов на уровне 4.6x от среднего. Множитель и абсолютный объем — это разные показатели, поэтому оба присутствуют в таблице. Аналогичные данные по рынку акций представлены в разделе акции с нетипичным объемом торгов на этой неделе, а методика расчета подробно описана в относительном объеме торгов.
Call- или put-опционы: расстановка сил на ленте
Разрыв между объёмами торгов call- и put-опционами — это основной показатель, на который указывает сигнал. Ниже представлена та же площадка и та же сессия, отсортированные по доле call-опционов:
| Тикер | Объем колл (тыс.) | Объем пут (тыс.) | Доля колл (%) | ID сессии |
|---|---|---|---|---|
| DPRO | 201.1 | 3.8 | 98 | 20260903 |
| IOT | 36 | 9.9 | 78 | 20260903 |
| HPE | 182.3 | 72.1 | 72 | 20260903 |
| PL | 57.3 | 35.5 | 62 | 20260903 |
| SNOW | 163.6 | 110.9 | 60 | 20260903 |
| ZS | 73.7 | 49.9 | 60 | 20260903 |
| CPB | 25.8 | 21.4 | 55 | 20260903 |
| DOCU | 31 | 28 | 53 | 20260903 |
| LULU | 72.7 | 80.4 | 47 | 20260903 |
| VFC | 5.5 | 43.4 | 11 | 20260903 |
Точный SQL-код для каждого числа
WITH tape AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime(today() - 45, 'America/New_York')
GROUP BY d
),
ranked AS (
SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS raw_rn
FROM tape
),
cal AS (
SELECT d, vol, rn, sum(if(rn BETWEEN 2 AND 21, 1, 0)) OVER () AS baseline_sessions
FROM (
SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS rn
FROM ranked
WHERE vol >= 0.75 * (SELECT quantileExact(0.5)(vol) FROM ranked WHERE raw_rn > 1)
)
),
day_root AS (
SELECT substring(ticker, 3, length(ticker) - 17) AS root,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol,
sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'C') AS calls,
sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'P') AS puts
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime(today() - 45, 'America/New_York')
GROUP BY root, d
),
scored AS (
SELECT r.root AS root,
round(sumIf(r.vol, c.rn = 1) / avgIf(r.vol, c.rn BETWEEN 2 AND 21), 1) AS vol_ratio,
sumIf(r.calls, c.rn = 1) AS calls,
sumIf(r.puts, c.rn = 1) AS puts,
maxIf(toYYYYMMDD(c.d), c.rn = 1) AS session_id
FROM day_root r INNER JOIN cal c ON r.d = c.d
WHERE c.rn <= 21
AND r.root NOT IN ('SPCX')
AND r.root NOT IN ('KORU','SOXL','SOXS','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
GROUP BY r.root
HAVING sumIf(r.vol, c.rn = 1) >= 25000
AND avgIf(r.vol, c.rn BETWEEN 2 AND 21) >= 5000
AND countIf(c.rn BETWEEN 2 AND 21) >= 18
),
board AS (
SELECT root, vol_ratio, calls, puts, session_id
FROM scored
ORDER BY vol_ratio DESC, root ASC
LIMIT 10
)
SELECT root AS ticker,
round(calls / 1000, 1) AS call_volume_k,
round(puts / 1000, 1) AS put_volume_k,
round(100.0 * calls / (calls + puts), 0) AS call_share_pct,
session_id
FROM board
WHERE calls + puts > 0
ORDER BY call_share_pct DESC, ticker ASCВ сегменте с преобладанием call-опционов DPRO направил 98% своих контрактов в call-опционы: 201.1 тысяч call-опционов против 3.8 тысяч put-опционов. На другом конце той же таблицы 11% контрактов VFC пришлись на call-опционы: 5.5 тысяч против 43.4 тысяч put-опционов.
Этот разрыв заслуживает внимания, но его легко переоценить. У каждого исполненного контракта есть покупатель и продавец, а лента не фиксирует, какая сторона выступила инициатором сделки. Высокий объём по call-опционам может означать как открытую длинную позицию, так и продажу покрытого call-опциона (covered call) на акции, которыми продавец уже владеет. В статье Покупка и продажа call-опционов подробно разбирается, какие обязательства берет на себя каждая сторона сделки. Там, где лента активна, цены на опционы обычно также высоки, что является темой обзора акций с самой высокой подразумеваемой волатильностью.
Структура контрактов торговой сессии
| DTE интервал | Контракты (млн) | Доля объема (%) | ID сессии |
|---|---|---|---|
| same day | 18 | 25 | 20260903 |
| 1 to 7 days | 22.59 | 31.4 | 20260903 |
| 8 to 30 days | 17.1 | 23.7 | 20260903 |
| 31 to 90 days | 7.52 | 10.4 | 20260903 |
| 91 to 365 days | 5.51 | 7.7 | 20260903 |
| over a year | 1.29 | 1.8 | 20260903 |
Точный SQL-код для каждого числа
WITH tape AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime(today() - 45, 'America/New_York')
GROUP BY d
),
ranked AS (
SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS raw_rn
FROM tape
),
cal AS (
SELECT d, vol, rn, sum(if(rn BETWEEN 2 AND 21, 1, 0)) OVER () AS baseline_sessions
FROM (
SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS rn
FROM ranked
WHERE vol >= 0.75 * (SELECT quantileExact(0.5)(vol) FROM ranked WHERE raw_rn > 1)
)
),
bars AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
toFloat64(volume) AS v,
toDate(concat('20', substring(ticker, length(ticker) - 14, 2), '-',
substring(ticker, length(ticker) - 12, 2), '-',
substring(ticker, length(ticker) - 10, 2))) AS expiry
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime(today() - 12, 'America/New_York')
AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM cal WHERE rn = 1)
),
scored AS (
SELECT multiIf(expiry - d <= 0, 1, expiry - d <= 7, 2, expiry - d <= 30, 3,
expiry - d <= 90, 4, expiry - d <= 365, 5, 6) AS bk,
v, d
FROM bars
)
SELECT arrayElement(['same day', '1 to 7 days', '8 to 30 days', '31 to 90 days', '91 to 365 days', 'over a year'], bk) AS dte_bucket,
round(sum(v) / 1e6, 2) AS contracts_m,
round(100.0 * sum(v) / sum(sum(v)) OVER (), 1) AS pct_of_volume,
toYYYYMMDD(max(d)) AS session_id
FROM scored
GROUP BY bk
ORDER BY bk ASCНа контракты с экспирацией в день совершения сделки пришлось 25% всего объёма торгов, что составило 18 миллиона контрактов. Ещё 31.4% контрактов истекают в течение недели. На дальнем конце спектра доля контрактов со сроком погашения более года составила 1.8%.
Такое распределение меняет интерпретацию заголовков об аномальной торговой активности. Основная часть объёма на подобных площадках приходится на краткосрочные инструменты, а контракты с экспирацией в день сделки исполняются к закрытию торгов, а не переносятся на следующий день. Статья опционы 0DTE подробно описывает этот сегмент цепочки опционов.
Была ли это сессия экспирации?
Объём торгов опционами по всему рынку растёт в день ежемесячной экспирации, когда крупнейший блок листинговых контрактов одновременно исключается из обращения. Скрининг коэффициентов, проведённый в день экспирации, отмечает половину рынка, поэтому в таблице ниже каждая сессия в окне снабжена меткой.
| Сессия | Контракты (млн) | Тип сессии | Мес. экспирация | ID сессии |
|---|---|---|---|---|
| Jul 31 | 75.5 | ordinary | 75.1 | 20260731 |
| Aug 3 | 72.7 | ordinary | 75.1 | 20260803 |
| Aug 4 | 78.9 | ordinary | 75.1 | 20260804 |
| Aug 5 | 69.5 | ordinary | 75.1 | 20260805 |
| Aug 6 | 63.2 | ordinary | 75.1 | 20260806 |
| Aug 7 | 73.2 | ordinary | 75.1 | 20260807 |
| Aug 10 | 61.4 | ordinary | 75.1 | 20260810 |
| Aug 11 | 54.6 | ordinary | 75.1 | 20260811 |
| Aug 12 | 55.4 | ordinary | 75.1 | 20260812 |
| Aug 13 | 66.6 | ordinary | 75.1 | 20260813 |
| Aug 14 | 66 | ordinary | 75.1 | 20260814 |
| Aug 17 | 60.9 | ordinary | 75.1 | 20260817 |
| Aug 18 | 56.9 | ordinary | 75.1 | 20260818 |
| Aug 19 | 67.2 | ordinary | 75.1 | 20260819 |
| Aug 20 | 64.9 | ordinary | 75.1 | 20260820 |
| Aug 21 | 75.1 | monthly expiration | 75.1 | 20260821 |
| Aug 24 | 61 | ordinary | 75.1 | 20260824 |
| Aug 25 | 52.8 | ordinary | 75.1 | 20260825 |
| Aug 26 | 49.4 | ordinary | 75.1 | 20260826 |
| Aug 27 | 66.1 | ordinary | 75.1 | 20260827 |
Точный SQL-код для каждого числа
WITH tape AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime(today() - 45, 'America/New_York')
GROUP BY d
),
ranked AS (
SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS raw_rn
FROM tape
),
cal AS (
SELECT d, vol, rn, sum(if(rn BETWEEN 2 AND 21, 1, 0)) OVER () AS baseline_sessions
FROM (
SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS rn
FROM ranked
WHERE vol >= 0.75 * (SELECT quantileExact(0.5)(vol) FROM ranked WHERE raw_rn > 1)
)
),
w AS (
SELECT d, vol,
toStartOfMonth(d) + toIntervalDay(((5 - toDayOfWeek(toStartOfMonth(d)) + 7) % 7) + 14) AS third_friday
FROM cal
WHERE rn <= 25
),
marked AS (
SELECT d, vol,
(d = max(if(d <= third_friday, d, toDate('1970-01-01'))) OVER (PARTITION BY toStartOfMonth(d)))
AND (third_friday <= max(d) OVER ()) AS is_expiry
FROM w
),
latest AS (
SELECT d, vol, is_expiry,
max(if(is_expiry, d, toDate('1970-01-01'))) OVER () AS last_expiry_d
FROM marked
)
SELECT formatDateTime(d, '%b %e') AS session,
round(vol / 1e6, 1) AS contracts_m,
multiIf(is_expiry, 'monthly expiration', 'ordinary') AS session_type,
round(max(if(d = last_expiry_d, vol, 0)) OVER () / 1e6, 1) AS monthly_expiry_m,
toYYYYMMDD(d) AS session_id
FROM latest
ORDER BY d ASCСамая новая сессия в этой панели — та, которую отражает биржа; дата в обеих таблицах совпадает, а её метка гласит ordinary. В ходе этой сессии по всей ленте торгов в США было зафиксировано 72 миллиона контрактов. В ходе последней ежемесячной экспирации в том же окне было зафиксировано 75.1 миллиона. Двадцатидневный базовый период, лежащий в основе каждого коэффициента в таблице, обычно содержит ровно одну ежемесячную экспирацию, поэтому знаменатель учитывает этот единовременный всплеск от сессии к сессии. Экспирация также поднимает вопрос об уровне страйка, на который данный скрининг объёмов ответить не может: max pain определяет, какой страйк приведёт к минимальным выплатам держателям опционов при расчёте по контрактам, и этот показатель рассчитывается на основе открытого интереса, а не на основе объёма торгов, измеряемого здесь.
Опережает ли необычная активность на рынке опционов динамику акций?
Важно выяснить, следует ли за всплеском активности на рынке опционов значительное движение базового актива. Мы проанализировали данные за последние двести дней: каждая торговая сессия по отдельным инструментам, преодолевшая установленные пороги объёма, была классифицирована по коэффициенту активности и сопоставлена с абсолютным изменением цены закрытия базового актива на следующей сессии. В качестве контрольного показателя используется медианное дневное изменение цены конкретного инструмента за весь период, что позволяет сравнивать каждую группу с её собственными историческими данными.
| Диапазон RVol | Кол-во событий | Медиана след. изм. (%) | Медиана тип. изм. (%) | Гэп (п.п.) | Медиана след. знаков. (%) |
|---|---|---|---|---|---|
| 5x or more | 624 | 2.51 | 1.96 | 0.55 | -0.16 |
| 3x to 5x | 1212 | 2.35 | 2.15 | 0.2 | -0.21 |
| 2x to 3x | 1852 | 2.28 | 2.21 | 0.07 | -0.22 |
| 1x to 2x | 8380 | 1.98 | 2.23 | -0.25 | -0.05 |
| below 1x | 11559 | 1.89 | 2.06 | -0.17 | -0.01 |
Точный SQL-код для каждого числа
WITH daily AS (
SELECT underlying_symbol AS sym,
date AS d,
sum(volume) AS vol,
max(underlying_close) AS px
FROM global_markets.options_greeks
WHERE date >= today() - 200
AND underlying_close > 0
AND underlying_symbol NOT IN ('SPCX')
AND underlying_symbol NOT IN ('KORU','SOXL','SOXS','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
AND underlying_symbol NOT IN (SELECT ticker FROM global_markets.stocks_splits
WHERE execution_date BETWEEN today() - 230 AND today())
GROUP BY sym, d
),
seq AS (
SELECT sym, d, vol, px,
avg(vol) OVER (PARTITION BY sym ORDER BY d ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING) AS base,
count() OVER (PARTITION BY sym ORDER BY d ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING) AS base_n,
any(px) OVER (PARTITION BY sym ORDER BY d ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS next_px,
any(px) OVER (PARTITION BY sym ORDER BY d ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_px
FROM daily
),
moves AS (
SELECT sym, vol, base, base_n,
if(next_px > 0, 100 * abs(next_px / px - 1), -1) AS next_abs,
if(next_px > 0, 100 * (next_px / px - 1), -999) AS next_signed,
if(prev_px > 0, 100 * abs(px / prev_px - 1), -1) AS own_abs
FROM seq
),
typical AS (
SELECT sym, quantileExact(0.5)(own_abs) AS typ
FROM moves
WHERE own_abs >= 0
GROUP BY sym
)
SELECT arrayElement(['5x or more', '3x to 5x', '2x to 3x', '1x to 2x', 'below 1x'], bk) AS rvol_bucket,
count() AS event_count,
round(quantileExact(0.5)(next_abs), 2) AS median_next_move_pct,
round(quantileExact(0.5)(typ), 2) AS median_typical_move_pct,
round(quantileExact(0.5)(next_abs) - quantileExact(0.5)(typ), 2) AS gap_pp,
round(quantileExact(0.5)(next_signed), 2) AS median_next_signed_pct
FROM (
SELECT m.sym AS sym,
multiIf(m.vol / m.base >= 5, 1, m.vol / m.base >= 3, 2, m.vol / m.base >= 2, 3,
m.vol / m.base >= 1, 4, 5) AS bk,
m.next_abs AS next_abs,
m.next_signed AS next_signed,
t.typ AS typ
FROM moves m INNER JOIN typical t ON m.sym = t.sym
WHERE m.base_n = 20 AND m.base >= 5000 AND m.vol >= 25000 AND m.next_abs >= 0
)
GROUP BY bk
ORDER BY bk ASCПосле сессии, в ходе которой объём торгов в пять раз или более превысил базовый уровень, медианное абсолютное изменение цены на следующий день составило 2.51%, тогда как в обычные дни для тех же инструментов этот показатель был равен 1.96%; разрыв составил 0.55 процентных пункта. В нижней части таблицы, характеризующейся низкой активностью, значения в двух столбцах составили 1.89% и 2.06%, а разрыв — -0.17 пункта.
Честный ответ заключается в том, что эффект невелик и связан скорее с масштабом, чем с направлением движения. За более активными сессиями на рынке опционов следуют лишь незначительно большие движения цены в абсолютном выражении, а разница в медианных значениях составляет доли процентного пункта. Медианное направленное изменение цены на сессии после дня с пятикратным превышением объёма составило -0.16%, а после дня с активностью ниже базового уровня — -0.01%. Ни один из этих результатов не подтверждает громкие заголовки. Также стоит учитывать редкость таких событий: 624 торговых сессий превысили пятикратный базовый объём за весь период исследования, тогда как 11559 сессий показали объём ниже базового уровня.
Методология оценки данного скринера
Скринер, основанный на скрытых правилах, по сути является инструментом интерпретации данных, поэтому все критерии приведены ниже.
- Источник. Полная поминутная лента опционных сделок в США. Базовый актив выделяется из OCC-символа каждого контракта, поэтому в выборку наряду с обычными акциями и фондами включены как опционы на индексы, так и контракты с экспирацией в день сделки.
- Коэффициент. Общий объем контрактов за последнюю завершенную сессию, деленный на средний объем по тому же базовому активу за предыдущие двадцать торговых дней. Минимум восемнадцать из этих двадцати дней должны иметь ненулевой объем. Длина временного окна отображается в отдельном столбце; если данных недостаточно для двадцати сессий, страница не публикует усредненный показатель под видом двадцатидневного.
- Пороговые значения. Минимум двадцать пять тысяч контрактов за сессию и базовый уровень в пять тысяч контрактов. Без этих ограничений список был бы заполнен инструментами, где одна сделка дает десятикратное отклонение от нормы.
- Критерии сессии. Каждая панель на этой странице использует данные из одного сорокапятидневного окна той же ленты сделок. Правило едино: сессия учитывается, как только её общерыночный объем достигает семидесяти пяти процентов от медианы предыдущих сессий в этом окне. Самый свежий день исключается из медианы, которую он должен превысить, чтобы неполный торговый день не занижал планку для самого себя. Данные поступают частями, поэтому день с объемом менее трех четвертей от нормального не попадает в отчет, пока не будет полностью сформирован. Каждая панель указывает сессию, к которой относятся данные, что позволяет сопоставлять все четыре панели между собой.
- Исключения. Кредитные (leveraged) и инверсные фонды исключаются по названию: объем по трехкратному (3x) инструменту движется пропорционально множителю и переполнял бы список каждую неделю. Также исключен один тикер, который ранее использовался для двух разных компаний, так как исторические данные поставщика объединяют их в один ряд.
- Отсутствие открытого интереса. В базе данных нет поля для открытого интереса (open interest), поэтому на этой странице объем не сравнивается с количеством открытых позиций. Там, где скринеры конкурентов показывают превышение объема над открытым интересом, наш показывает превышение объема над собственным двадцатидневным средним.
- Дни экспирации. Ежемесячная экспирация увеличивает объем опционных торгов по всему рынку. Панель сессии отмечает это условие, и данные по дню экспирации следует сравнивать с другими днями экспирации.
Исследование последующей динамики использует вторую таблицу — ежедневный файл опционных греков, который содержит очищенный тикер базового актива и цену его закрытия. Он исключает опционы с экспирацией в день сделки и индексные опционы, а также обновляется на несколько сессий позже, чем поминутная лента, поэтому его охват уже, чем у основного скринера. Эмитенты, по которым в период исследования произошел сплит акций, исключаются, так как сплит создает ложное впечатление резкого ценового движения.
Часто задаваемые вопросы
Что такое необычная активность по опционам?
Это ситуация, когда по базовому активу за одну сессию заключается значительно больше опционных контрактов, чем в среднем за последнее время. На этой странице порог определяется арифметически, а не экспертной оценкой: объем контрактов за сессию делится на средний показатель по тому же активу за предыдущие двадцать сессий. При этом установлены минимальные значения: двадцать пять тысяч контрактов за текущую сессию и пять тысяч для базового уровня.
Предсказывает ли необычная активность по опционам движение акций?
Слабо и без указания направления. За последние двести дней наших данных сессии, в которых объем опционов в пять раз превышал базовый уровень, сопровождались медианным абсолютным изменением цены на 2.51% против 1.96% для тех же бумаг в обычный день. Медианное направленное изменение на следующей сессии составило -0.16%, поэтому объем говорит о том, насколько сильно изменилась цена акции, но почти ничего не сообщает о направлении этого движения.
В какое время обновляются данные об объеме опционов?
Объемы контрактов фиксируются в режиме реального времени в консолидированной ленте опционов в течение торговой сессии. Архив данных, на котором основана эта страница, обновляется с задержкой, поэтому система отображает последнюю завершенную сессию, а не текущую, и указывает соответствующую дату. Здесь нет потока данных в реальном времени.
Почему сканер необычной активности по опционам не использует открытый интерес?
Открытый интерес публикуется клиринговой палатой после закрытия торгов, и в наших данных нет поля для этого показателя. Сравнение объема сессии с историей объемов того же актива можно измерить напрямую по ленте, что отвечает на схожий вопрос: является ли данная цепочка опционов более активной, чем обычно.
Каждое число выше получено из сохраненного версионированного запроса. Откройте SQL под любой панелью, чтобы проверить расчет, или запустите тот же скрининг за любой период в терминале Strasmore.