Strasmore Research
Обучение Matt ConnorАвтор: Matt Connor · Обновлено 2026-07-24 · data as of July 24, 2026 · refreshed weekly

Акции с аномальным объемом торгов за неделю

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

Аномальный объем означает, что акции торгуются значительно выше их собственного обычного уровня, а не рыночного. Для компаний с мега-капитализацией оборот в 40 миллионов акций является нормой; для компаний с малой капитализацией это событие. На этой странице представлен рейтинг акций с аномальным объемом за прошедшую неделю. Показатель рассчитывается как средний объем торгов за последние пять сессий, деленный на средний объем за предыдущие сорок сессий. Установлен минимальный порог в долларовом эквиваленте, чтобы в списке были только ликвидные акции. Данные обновляются еженедельно; дата в поле «данные по состоянию на» указывает временной интервал. Подробнее о самом методе измерения — относительном объеме — можно узнать в полном руководстве.

Лидеры недели по необычному объему торгов

Для анализа используются три столбца. Множитель показывает отклонение объема торгов от среднего значения. Базовый уровень указывает на средний объем; высокий множитель при низком базовом уровне означает менее значимое событие, чем умеренный множитель при высоком объеме. Столбец в долларах показывает реальную экономическую значимость активности. Последний столбец — изменение цены от открытия до закрытия — часто не учитывается в стандартных фильтрах объема.

ЗапросМаксимальный относительный объем за неделю: за последние 5 сессий к предыдущим 40 для акций с оборотом >$500M в неделю
Точный SQL-код для каждого числа
WITH sess AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           sum(toFloat64(volume)) AS vol,
           sum(toFloat64(close) * toFloat64(volume)) AS dollars,
           argMin(toFloat64(open), toTimeZone(window_start, 'America/New_York')) AS day_open,
           argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS day_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 70 DAY
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
      AND ticker NOT IN ('SPCX')
    GROUP BY ticker, d
),
cal AS (
    SELECT d, row_number() OVER (ORDER BY d DESC) AS rn
    FROM (SELECT DISTINCT d FROM sess)
),
per_name AS (
    SELECT s.ticker AS ticker,
           avgIf(s.vol, c.rn <= 5) AS adv_recent,
           avgIf(s.vol, c.rn BETWEEN 6 AND 45) AS adv_base,
           sumIf(s.dollars, c.rn <= 5) AS dollar_recent,
           argMaxIf(s.day_open, c.rn, c.rn <= 5) AS week_open,
           argMinIf(s.day_close, c.rn, c.rn <= 5) AS week_close,
           countIf(c.rn <= 5) AS recent_sessions,
           countIf(c.rn BETWEEN 6 AND 45) AS base_sessions
    FROM sess s INNER JOIN cal c ON s.d = c.d
    GROUP BY s.ticker
    HAVING adv_base > 100000 AND dollar_recent >= 500000000 AND recent_sessions = 5 AND base_sessions >= 35
)
SELECT ticker,
       round(adv_recent / adv_base, 1) AS rvol_week,
       round(adv_recent / 1e6, 2) AS recent_adv_m,
       round(adv_base / 1e6, 2) AS baseline_adv_m,
       round(dollar_recent / 1e9, 2) AS week_dollar_bn,
       round(100.0 * (week_close / week_open - 1), 1) AS week_pct
FROM per_name
ORDER BY rvol_week DESC, ticker ASC
LIMIT 8

Данные в каждой строке представлены в следующем порядке:

  • JLHL — в 99.2 раз выше нормы; лидер списка: 16.95 млн акций за день при базе в 0.17 млн; объем торгов 0.68 млрд долларов; изменение цены от открытия до закрытия составило 160.6%.
  • AGEN — в 41.1 раз выше при базе в 0.62 млн акций; оборот составил 0.88 млрд долларов; изменение за неделю — 54.3%.
  • IONS — в 4.7 раз выше, но при низкой базе в 1.43 млн акций и обороте всего 2.1 млрд долларов; изменение за неделю — -19.6%.
  • ALNY — в 2.3 раз выше; 1.91 млн акций за день при норме в 0.83 млн; изменение от открытия до закрытия — -26.2%.
  • BBIO — в 2.1 раз выше; объем торгов — 2.25 млрд долларов; изменение за неделю — -0.2%.
  • MULL — в 2.1 раз выше при базе в 1.96 млн акций; оборот — 0.52 млрд долларов; изменение от открытия до закрытия — -22.8%.
  • HLI — в 1.9 раз выше; 0.9 млн акций за день; оборот — 0.61 млрд долларов; изменение за неделю — 5.6%.
  • QGEN — восьмая и последняя строка: множитель 1.8; оборот — 0.76 млрд долларов; изменение — 8.7%.

Направление движения цены не учитывается при ранжировании. Это подтверждают два правых столбца: лидер списка завершил неделю с результатом 160.6% относительно цены открытия, в то время как восьмая позиция показала результат 8.7% относительно своей цены открытия. Высокая активность на рынке свидетельствует о том, что [what-is-a-stock-float|свободный] акции проходит проверку на прочность; это не говорит о том, какая сторона в этой проверке оказалась сильнее.

Как рассчитывается мультипликатор

Возьмем акции, средний объем торгов которыми за предыдущие сорок сессий составлял 200,000 акций в день. За последнюю неделю объемы составили 1,000,000, затем 1,400,000, затем 900,000, затем 1,100,000 и 600,000 акций — среднее значение за пять сессий составляет 1,000,000. Разделим: 1,000,000 ÷ 200,000 = 5.0x. Если взять для тех же акций базовый показатель в два миллиона акций, то за ту же неделю значение составит 0.5x. Числитель — это объем за текущую неделю; знаменатель — это типичный объем торгов акциями. (Сам знаменатель представляет собой среднедневной объем, измеренный за сорок сессий, а не за стандартные двадцать.)

Почему сорок сессий? Это составляет примерно два календарных месяца — этого достаточно, чтобы разовый всплеск активности не исказил знаменатель, но при этом период достаточно короток, чтобы отражать текущее состояние торгов. Почему пять сессий для числителя? Это полная неделя, что исключает влияние одной приостановки торгов или разовой крупной сделки на результат.

Математический расчет содержит важное предостережение: чем ниже базовый показатель, тем дешевле мультипликатор. Лидер текущей недели имеет базовый показатель всего в 0.17M акций в день. При таком объеме одна торговая сессия с высокой активностью резко завышает среднее недельное значение. Именно поэтому совет требует шестизначный базовый показатель и недельный объем в 500 миллионов долларов, прежде чем компания вообще попадет в список.

Насколько редка такая неделя?

Мультипликатор имеет значение только в сравнении с распределением, из которого он получен. Те же условия, тот же временной интервал, все подходящие активы распределены по группам в зависимости от их мультипликатора:

ЗапросДинамика всей выборки за неделю, распределенная по относительному объему
Точный SQL-код для каждого числа
WITH sess AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           sum(toFloat64(volume)) AS vol,
           sum(toFloat64(close) * toFloat64(volume)) AS dollars
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 70 DAY
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
      AND ticker NOT IN ('SPCX')
    GROUP BY ticker, d
),
cal AS (
    SELECT d, row_number() OVER (ORDER BY d DESC) AS rn
    FROM (SELECT DISTINCT d FROM sess)
),
per_name AS (
    SELECT s.ticker AS ticker,
           avgIf(s.vol, c.rn <= 5) AS adv_recent,
           avgIf(s.vol, c.rn BETWEEN 6 AND 45) AS adv_base,
           sumIf(s.dollars, c.rn <= 5) AS dollar_recent,
           countIf(c.rn <= 5) AS recent_sessions,
           countIf(c.rn BETWEEN 6 AND 45) AS base_sessions
    FROM sess s INNER JOIN cal c ON s.d = c.d
    GROUP BY s.ticker
    HAVING adv_base > 100000 AND dollar_recent >= 500000000 AND recent_sessions = 5 AND base_sessions >= 35
),
scored AS (
    SELECT ticker,
           multiIf(adv_recent / adv_base >= 10, 1,
                   adv_recent / adv_base >= 5, 2,
                   adv_recent / adv_base >= 3, 3,
                   adv_recent / adv_base >= 2, 4,
                   adv_recent / adv_base >= 1.5, 5,
                   adv_recent / adv_base >= 1, 6, 7) AS bucket_key
    FROM per_name
),
buckets AS (
    SELECT arrayJoin([(1, '10x or more'), (2, '5x to 10x'), (3, '3x to 5x'), (4, '2x to 3x'),
                      (5, '1.5x to 2x'), (6, '1x to 1.5x'), (7, 'below 1x')]) AS bk
)
SELECT bk.2 AS rvol_bucket,
       countIf(scored.bucket_key = bk.1) AS names,
       round(100.0 * countIf(scored.bucket_key = bk.1) / count(), 1) AS pct_of_universe,
       count() AS universe_names
FROM scored CROSS JOIN buckets
GROUP BY bk
ORDER BY bk.1 ASC

На этой неделе 647 акций и ETF превысили свои показатели. Из них 2 торговались в десять раз выше своей нормы или более того — это 0.3% от общего числа активов. Еще 0 попали в диапазон от пяти до десяти раз, а 1 — в диапазон от трех до пяти раз. Приведенный выше список лидеров составлен из этой узкой группы активов. Ниже по списку 3 активов торговались в два-три раза выше своей нормы (0.5% от общего числа), а 5 попали в диапазон от полутора до двух раз (0.8%). Еще 19 активов, что составляет 2.9% от подходящих под критерии имен, показали лишь умеренный рост от одного до полутора раз.

Другой конец таблицы никто не делает скриншотом: 617 активов — 95.4% от общего числа — на этой неделе торговались ниже своего среднего значения за сорок сессий. Это обычное состояние рынка, и именно поэтому верхняя часть списка является настоящим отклонением, а не погрешностью округления.

Сохраняется ли аномальный объем?

Существует мнение, что аномальный объем сохраняется в течение нескольких дней. Согласно этому мнению, акции, находящиеся в верхней части такого списка, обычно уже завершили свое движение. Это можно проверить. Для каждого из восьми лидеров мы определили: в скольких из пяти сессий объем был в два раза выше базового или выше, каков был объем самой крупной сессии и сколько сессий отделяло этот пик от последней сессии недели.

ЗапросПроверка устойчивости: ежедневный относительный объем восьми лидеров за пять сессий
Точный SQL-код для каждого числа
WITH sess AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           sum(toFloat64(volume)) AS vol,
           sum(toFloat64(close) * toFloat64(volume)) AS dollars
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 70 DAY
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
      AND ticker NOT IN ('SPCX')
    GROUP BY ticker, d
),
cal AS (
    SELECT d, row_number() OVER (ORDER BY d DESC) AS rn
    FROM (SELECT DISTINCT d FROM sess)
),
per_name AS (
    SELECT s.ticker AS ticker,
           avgIf(s.vol, c.rn <= 5) AS adv_recent,
           avgIf(s.vol, c.rn BETWEEN 6 AND 45) AS adv_base,
           sumIf(s.dollars, c.rn <= 5) AS dollar_recent,
           countIf(c.rn <= 5) AS recent_sessions,
           countIf(c.rn BETWEEN 6 AND 45) AS base_sessions
    FROM sess s INNER JOIN cal c ON s.d = c.d
    GROUP BY s.ticker
    HAVING adv_base > 100000 AND dollar_recent >= 500000000 AND recent_sessions = 5 AND base_sessions >= 35
),
leaders AS (
    SELECT ticker, adv_recent / adv_base AS rvol_week, adv_base
    FROM per_name
    ORDER BY rvol_week DESC, ticker ASC
    LIMIT 8
),
daily AS (
    SELECT l.ticker AS ticker,
           l.rvol_week AS rvol_week,
           c.rn AS rn,
           s.vol / l.adv_base AS rvol_day
    FROM sess s
    INNER JOIN cal c ON s.d = c.d
    INNER JOIN leaders l ON s.ticker = l.ticker
    WHERE c.rn <= 5
)
SELECT ticker,
       round(max(rvol_week), 1) AS week_rvol,
       countIf(rvol_day >= 2) AS days_above_2x,
       round(max(rvol_day), 1) AS peak_day_rvol,
       argMax(rn, (rvol_day, -rn)) - 1 AS sessions_since_peak
FROM daily
GROUP BY ticker
ORDER BY days_above_2x ASC, peak_day_rvol ASC, ticker ASC

Если отсортировать данные по показателю устойчивости, то наименее устойчивый актив, HLI, превышал базовый уровень в два раза в 1 из пяти сессий, достигнув пика в 6.2x. Наиболее устойчивый актив, JLHL, показал такой результат в 3 из пяти сессий с пиком 404.6x. Это многосессионные события, а не единичные сделки. Именно по этой причине в недельных и дневных списках часто оказываются одни и те же акции.

Последний столбец отвечает за временной фактор: количество сессий между самым активным днем и последней сессией недели — 4 для HLI и 4 для JLHL. Если этот разрыв больше нуля, значит, основной объем торгов был зафиксирован еще до закрытия недели. Данная таблица описывает прошедшую неделю, а не прогнозирует будущую.

Пятнадцать сессий лидера по дням

Средненедельные показатели скрывают реальную динамику. Ниже представлен ежедневный относительный объем текущего лидера — количество акций в каждой сессии относительно базового показателя за сорок сессий — а также изменение цены от открытия к закрытию за последние пятнадцать сессий:

ЗапросДинамика лидера: ежедневный относительный объем и изменение цены от открытия до закрытия (за последние 15 сессий)
Точный SQL-код для каждого числа
WITH sess AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           sum(toFloat64(volume)) AS vol,
           sum(toFloat64(close) * toFloat64(volume)) AS dollars,
           argMin(toFloat64(open), toTimeZone(window_start, 'America/New_York')) AS day_open,
           argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS day_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 70 DAY
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
      AND ticker NOT IN ('SPCX')
    GROUP BY ticker, d
),
cal AS (
    SELECT d, row_number() OVER (ORDER BY d DESC) AS rn
    FROM (SELECT DISTINCT d FROM sess)
),
per_name AS (
    SELECT s.ticker AS ticker,
           avgIf(s.vol, c.rn <= 5) AS adv_recent,
           avgIf(s.vol, c.rn BETWEEN 6 AND 45) AS adv_base,
           sumIf(s.dollars, c.rn <= 5) AS dollar_recent,
           countIf(c.rn <= 5) AS recent_sessions,
           countIf(c.rn BETWEEN 6 AND 45) AS base_sessions
    FROM sess s INNER JOIN cal c ON s.d = c.d
    GROUP BY s.ticker
    HAVING adv_base > 100000 AND dollar_recent >= 500000000 AND recent_sessions = 5 AND base_sessions >= 35
),
leader AS (
    SELECT ticker, adv_base
    FROM per_name
    ORDER BY adv_recent / adv_base DESC, ticker ASC
    LIMIT 1
),
path AS (
    SELECT formatDateTime(s.d, '%Y-%m-%d') AS session_date,
           formatDateTime(s.d, '%b %e') AS session_label,
           s.vol / l.adv_base AS rvol_day,
           100.0 * (s.day_close / s.day_open - 1) AS day_pct
    FROM sess s
    INNER JOIN cal c ON s.d = c.d
    INNER JOIN leader l ON s.ticker = l.ticker
    WHERE c.rn <= 15
)
SELECT session_date,
       session_label,
       round(rvol_day, 1) AS rvol_day,
       round(day_pct, 1) AS day_pct,
       round(max(rvol_day) OVER (), 1) AS peak_rvol_day
FROM path
ORDER BY session_date ASC

Пятнадцать сессий назад объем акций составлял 0.5x от базового уровня — это была обычная, спокойная бумага. Максимальный объем за этот период достиг 404.6x. В последней сессии, Jul 15, объем составил 0.7x, а изменение цены от открытия к закрытию составило -3.5%.

Обратите внимание на то, чего график не делает: он не снижается по прямой линии. Повышенный объем наблюдается группами, и после пика динамика может снова ускориться, а не затухнуть. Это одна из причин, по которой утверждение «объемы иссякают» следует проверять по ежедневному ряду данных, а не принимать на веру. Тот же ежедневный ряд является основой для измерения внутридневного темпа, который рассчитывается с нуля в руководстве по относительному объему и используется в VWAP.

Что отсеивает фильтр

Четыре правила обеспечивают точность данных, но каждое из них исключает показатели, которые могли бы заинтересовать читателя:

  1. Минимальный недельный объем торгов в $500M. Без этого ограничения список будет переполнен акциями, где оборот в миллион акций не является значимым.
  2. Базовый показатель выше 100 000 акций в день, чтобы знаменатель был реальным числом, а не погрешностью округления.
  3. Торги минимум в 35 из предыдущих 40 сессий, что исключает новые листинги. У новых IPO нет значимого «нормального» уровня для расчета, иначе они бы занимали весь список неделями.
  4. Исключение переиспользованных тикеров: тикеры, которые биржи недавно переназначили новым компаниям, из-за чего история данных объединяет две разные организации. Базовый показатель таких акций был бы недостоверным.

Правило 1 отсеивает самые экстремальные коэффициенты. Вот шесть крупнейших примеров, исключенных по этому правилу:

ЗапросВлияние порога в $500M: максимальный относительный объем среди акций с оборотом менее $500M на этой неделе
Точный SQL-код для каждого числа
WITH sess AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           sum(toFloat64(volume)) AS vol,
           sum(toFloat64(close) * toFloat64(volume)) AS dollars
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 70 DAY
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
      AND ticker NOT IN ('SPCX')
    GROUP BY ticker, d
),
cal AS (
    SELECT d, row_number() OVER (ORDER BY d DESC) AS rn
    FROM (SELECT DISTINCT d FROM sess)
),
per_name AS (
    SELECT s.ticker AS ticker,
           avgIf(s.vol, c.rn <= 5) AS adv_recent,
           avgIf(s.vol, c.rn BETWEEN 6 AND 45) AS adv_base,
           sumIf(s.dollars, c.rn <= 5) AS dollar_recent,
           countIf(c.rn <= 5) AS recent_sessions,
           countIf(c.rn BETWEEN 6 AND 45) AS base_sessions
    FROM sess s INNER JOIN cal c ON s.d = c.d
    GROUP BY s.ticker
    HAVING adv_base > 100000 AND recent_sessions = 5 AND base_sessions >= 35
       AND dollar_recent > 0 AND dollar_recent < 500000000
)
SELECT ticker,
       round(adv_recent / adv_base, 1) AS rvol_week,
       round(dollar_recent / 1e6, 1) AS week_dollar_m,
       round(dollar_recent / (adv_recent * 5), 2) AS avg_share_price,
       round(adv_base / 1e6, 2) AS baseline_adv_m
FROM per_name
ORDER BY rvol_week DESC, ticker ASC
LIMIT 6

SOBR торговался с множителем 109.8x к своему среднему показателю, однако недельный оборот составил всего $262.4M при средней цене акции $1.04. Другие примеры: ZBAO с множителем 109.3x при объеме $72M (средняя цена $0.44), WRAP с множителем 51.8x при объеме $162.5M, CPHI с множителем 38.1x при объеме $31.8M, KAPA с множителем 36.7x при объеме $9.5M, и LGPS с множителем 20.2x при объеме $57.5M. Это реальная активность, которая действительно необычна для данных компаний, но в этой категории множитель лишь маскирует очень малые суммы денег.

Источники аномальных объемов

Постоянные факторы, ускоряющие анализ биржевой ленты: недели отчетности — основной запланированный источник; корпоративные события — слияния, размещения акций, включение или исключение из индексов — создают механический объем, не связанный с настроениями участников; динамика сквизов, когда объем растет вместе со скоростью изменения цены (данный паттерн описан в статье объяснение короткого сквиза); и новые листинги, которые доминируют в ленте до момента стабилизации акционерного капитала. Лента за любую неделю обычно представляет собой смесь этих факторов плюс одна или две неясные сделки — именно эти аномалии заслуживают дополнительного внимания.

FAQ по необычным объемам

Что считается необычным объемом для акции?

Официального порога не существует, поэтому используйте распределение: из 647 наименований, прошедших через фильтр этой недели, только 2 торговались в 10 раз выше своей нормы, а 95.4% торговались ниже своего среднего показателя. Любое значение выше примерно 2x уже входит в число нескольких процентов рынка за конкретную неделю.

Необычный объем — это бычий или медвежий сигнал?

Ни то, ни другое — это признак повышенного внимания, которое сопровождает как ралли, так и обвалы. На этой неделе лидер списка завершил пять сессий на уровне 160.6% от цены открытия, а восьмое по счету наименование завершило на уровне 8.7%; оба показателя соответствуют одной и той же методике измерения.

Как долго длится необычный объем?

Обычно дольше одного дня. Панель устойчивости учитывает количество сессий каждого наименования, в которых объем превысил базовый показатель более чем в два раза: на этой неделе этот показатель варьируется от 1 из пяти (HLI) до 3 из пяти (JLHL). Пиковая сессия обычно приходится на период до конца недели, а не на ее последний день.

Почему в списке используется порог по долларовому объему?

Фильтр по количеству акций без такого порога переполняется дешевыми тикерами, где коэффициент огромен, а реальные денежные средства незначительны: крупнейшее исключенное наименование на этой неделе торговалось с объемом 109.8x от нормы при общем объеме в $262.4M и средней цене $1.04 за акцию. Еженедельный порог в $500M гарантирует экономическую значимость каждой строки в списке.

Отражается ли необычный объем акций на рынке опционов?

Часто — да. Высокая активность по акциям и высокая активность по опционам на одни и те же бумаги обычно происходят одновременно, поэтому трейдеры следят за обоими рынками. Однако активность в опционах измеряется иначе: количество торгуемых контрактов — это показатель потока, в то время как открытый интерес учитывает открытые позиции; эти показатели отвечают на разные вопросы. Сравните объем опционов против открытого интереса, прежде чем делать выводы на основе оповещения о «необычной активности опционов».


Все вышеуказанные числа являются результатом сохраненных версионных запросов. Вы можете развернуть SQL-код под любой панелью, чтобы увидеть точный расчет, или запустить аналогичный фильтр за любой интересующий вас период на терминале Strasmore.