Strasmore Research
市场回顾 Matt Connor作者: Matt Connor · data as of July 22, 2026 · refreshed weekly

美股本月涨幅榜与跌幅榜(附成交金额)

本月美股涨跌幅榜:涨幅与跌幅个股均直接取自交易所成交记录排名,每笔异动旁都附上成交金额,每一条筛选规则都在文中写明。

本月美股涨跌榜直接取自交易所成交记录,覆盖从 Jun 22Jul 20 已完成的 20 个交易日。榜单只保留窗口内成交金额达到 10 亿美元以上的运营公司,因此榜上每一次异动背后都有真实的资金支撑。杠杆和反向基金被排除在外,窗口会随着新交易日的完成持续向前滚动。

本月美股涨幅榜

下表按涨幅从高到低排列。每一行在涨跌百分比旁边都附上了成交金额,这正是区分“大资金推动的重新定价”与“清淡交易”的关键。

查询本月美股涨幅榜(窗口内成交金额10亿美元以上的公司)
每个数字背后的完整 SQL
WITH window_days AS (
    SELECT d
    FROM (
        SELECT d, max(d) OVER () AS last_full
        FROM (
            SELECT d
            FROM (
                SELECT d, bars, medianExact(bars) OVER () AS typical_bars
                FROM (
                    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, count() AS bars
                    FROM global_markets.delayed_stocks_minute_aggs
                    WHERE window_start >= now() - INTERVAL 34 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
                    GROUP BY d
                    HAVING d < toDate(toTimeZone(now(), 'America/New_York'))
                )
            )
            WHERE bars >= 0.85 * typical_bars
        )
    )
    WHERE d > last_full - 30
)
SELECT ticker,
       round((argMax(c, d) / argMin(o, d) - 1) * 100, 1) AS month_return_pct,
       round(sum(dollars) / 1e9, 1) AS month_dollar_bn
FROM (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           argMin(toFloat64(open), window_start) AS o,
           argMax(toFloat64(close), window_start) AS c,
           sum(toFloat64(close) * toFloat64(volume)) AS dollars
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 34 DAY
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM window_days)
      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')
      AND ticker 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 ticker IN (SELECT ticker FROM global_markets.stocks_ratios
                     WHERE market_cap > 0)
      AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                         WHERE execution_date BETWEEN today() - 45 AND today())
    GROUP BY ticker, d
)
GROUP BY ticker
HAVING sum(dollars) >= 1000000000 AND argMin(o, d) >= 10 AND count() >= 15
ORDER BY argMax(c, d) / argMin(o, d) DESC
LIMIT 10

榜首 CRNX 本月上涨 133.5%,成交金额达 9.2 十亿美元,领先于第二名 SDOT(涨 78.2%)和第三名 PBF(涨 69.7%)。一个月内出现这种幅度的变动,通常会先表现为相对该股自身日均成交量明显放大的相对成交量,而且往往始于某一个交易日的隔夜跳空,而不是在整个窗口内稳步爬升。

本月美股跌幅榜

跌幅榜的构造方法完全相同,只是方向相反:统计同一窗口内跌幅最深的股票,筛选门槛同样是成交金额达到 10 亿美元以上。

查询本月美股跌幅榜(窗口内成交金额10亿美元以上的公司)
每个数字背后的完整 SQL
WITH window_days AS (
    SELECT d
    FROM (
        SELECT d, max(d) OVER () AS last_full
        FROM (
            SELECT d
            FROM (
                SELECT d, bars, medianExact(bars) OVER () AS typical_bars
                FROM (
                    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, count() AS bars
                    FROM global_markets.delayed_stocks_minute_aggs
                    WHERE window_start >= now() - INTERVAL 34 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
                    GROUP BY d
                    HAVING d < toDate(toTimeZone(now(), 'America/New_York'))
                )
            )
            WHERE bars >= 0.85 * typical_bars
        )
    )
    WHERE d > last_full - 30
)
SELECT ticker,
       round((argMax(c, d) / argMin(o, d) - 1) * 100, 1) AS month_return_pct,
       round(sum(dollars) / 1e9, 1) AS month_dollar_bn
FROM (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           argMin(toFloat64(open), window_start) AS o,
           argMax(toFloat64(close), window_start) AS c,
           sum(toFloat64(close) * toFloat64(volume)) AS dollars
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 34 DAY
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM window_days)
      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')
      AND ticker 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 ticker IN (SELECT ticker FROM global_markets.stocks_ratios
                     WHERE market_cap > 0)
      AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                         WHERE execution_date BETWEEN today() - 45 AND today())
    GROUP BY ticker, d
)
GROUP BY ticker
HAVING sum(dollars) >= 1000000000 AND argMin(o, d) >= 10 AND count() >= 15
ORDER BY argMax(c, d) / argMin(o, d) ASC
LIMIT 10

跌幅最深的是 NVTS,本月下跌 -52.9%,成交金额 5 十亿美元;紧随其后的是 WOLF,跌幅 -50.8%。请留意这张表里的成交金额一列:一次伴随巨量成交记录出现的下跌,与一次在清淡市场上打印出来的下跌,是完全不同的两回事,本页用数据把两者区分开,而不是靠假设。

同一份榜单,三种时间跨度

同一个问题,三种统计窗口:一只股票可能在其中一张榜单上高居榜首,却在另外两张上完全不见踪影。

这三张榜单各自独立构建,筛选规则并不完全相同。周榜在五个交易日的窗口内设有自己的流动性门槛和最少成交交易日数要求;年初至今榜单则按日均成交金额筛选,而不是按窗口内的成交总额。每一页都在各自的方法说明部分列出了自己的规则,在把一只股票从一张榜单搬到另一张之前,请先查看这些规则。

一次跳空缺口足以主宰周榜,却会在一整年的统计中被稀释;而一只股票缓慢爬升一整个月的走势,在周榜上根本不会露面。把三张榜单放在一起对照,是分辨“单日事件”与“趋势”最省力的办法。

同一窗口内,大盘表现如何

把一只股票的本月表现放到大盘自身的本月走势旁边,含义会大不相同。下面是四大指数跟踪基金在同一窗口内的走势,均以窗口内首个开盘价为基准重新计算:

查询同一窗口内四大指数跟踪基金走势(以首个开盘价为基准重新计算)
每个数字背后的完整 SQL
WITH window_days AS (
    SELECT d
    FROM (
        SELECT d, max(d) OVER () AS last_full
        FROM (
            SELECT d
            FROM (
                SELECT d, bars, medianExact(bars) OVER () AS typical_bars
                FROM (
                    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, count() AS bars
                    FROM global_markets.delayed_stocks_minute_aggs
                    WHERE window_start >= now() - INTERVAL 34 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
                    GROUP BY d
                    HAVING d < toDate(toTimeZone(now(), 'America/New_York'))
                )
            )
            WHERE bars >= 0.85 * typical_bars
        )
    )
    WHERE d > last_full - 30
)
SELECT session,
       round(anyIf(cum_pct, ticker = 'SPY'), 2) AS sp500_pct,
       round(anyIf(cum_pct, ticker = 'QQQ'), 2) AS nasdaq100_pct,
       round(anyIf(cum_pct, ticker = 'DIA'), 2) AS dow_pct,
       round(anyIf(cum_pct, ticker = 'IWM'), 2) AS russell2000_pct
FROM (
    SELECT ticker,
           formatDateTime(d, '%Y-%m-%d') AS session,
           100 * (c / first_value(o) OVER (PARTITION BY ticker ORDER BY d) - 1) AS cum_pct
    FROM (
        SELECT ticker,
               toDate(toTimeZone(window_start, 'America/New_York')) AS d,
               argMin(toFloat64(open), window_start) AS o,
               argMax(toFloat64(close), window_start) AS c
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE window_start >= now() - INTERVAL 34 DAY
          AND ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
          AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM window_days)
          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
        GROUP BY ticker, d
    )
)
GROUP BY session
ORDER BY session

到最后一个交易日,标普500跟踪基金累计 -0.75%,纳斯达克100跟踪基金累计 -6.2%,道琼斯跟踪基金累计 0.21%,罗素2000跟踪基金累计 -1.62%。同一个窗口,四个篮子给出了四种不同的答案。再把涨幅榜拿来对照:同一段交易日里,涨幅榜榜首的涨幅达到了 133.5%。单只公司的离散程度远远超过持有它们的指数篮子,这正是“涨跌榜”只能是个股榜单、而不是指数榜单的原因。

耳熟能详的大盘股表现如何

想了解“本月表现最好的股票”的读者,通常也想知道自己已经持有的那些股票表现如何。下面是一组固定的八只家喻户晓的超大盘股,采用同一窗口和同一种统计方法:

查询同一窗口内八只家喻户晓的超大盘股表现
每个数字背后的完整 SQL
WITH window_days AS (
    SELECT d
    FROM (
        SELECT d, max(d) OVER () AS last_full
        FROM (
            SELECT d
            FROM (
                SELECT d, bars, medianExact(bars) OVER () AS typical_bars
                FROM (
                    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, count() AS bars
                    FROM global_markets.delayed_stocks_minute_aggs
                    WHERE window_start >= now() - INTERVAL 34 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
                    GROUP BY d
                    HAVING d < toDate(toTimeZone(now(), 'America/New_York'))
                )
            )
            WHERE bars >= 0.85 * typical_bars
        )
    )
    WHERE d > last_full - 30
)
SELECT ticker,
       round((argMax(c, d) / argMin(o, d) - 1) * 100, 1) AS month_return_pct
FROM (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           argMin(toFloat64(open), window_start) AS o,
           argMax(toFloat64(close), window_start) AS c
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 34 DAY
      AND ticker IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'GOOGL', 'META', 'TSLA', 'AVGO')
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM window_days)
      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 (SELECT ticker FROM global_markets.stocks_splits
                         WHERE execution_date BETWEEN today() - 45 AND today())
    GROUP BY ticker, d
)
GROUP BY ticker
HAVING count() >= 15
ORDER BY argMax(c, d) / argMin(o, d) DESC

这组股票的表现从榜首 META12.9%,一路排到榜尾 AVGO-8.6%。它们并没有作为一个整体同步涨跌,这是常态而不是例外:指数成分股的身份把这些公司归到了一起,但它们各自的营收来源几乎毫不相干。这个篮子是一份固定的八只股票名单,而不是一份排名,请把它当作参照,而不是关于“哪些公司市值最大”的结论。

普通的一个月是什么样子

榜单展示的是分布的尾部,这张图展示的是分布的主体:全部 1135 只通过筛选的股票,按窗口内涨跌幅分入不同区间:

查询全部筛选后公司的分布:按月度涨跌幅区间统计
每个数字背后的完整 SQL
WITH window_days AS (
    SELECT d
    FROM (
        SELECT d, max(d) OVER () AS last_full
        FROM (
            SELECT d
            FROM (
                SELECT d, bars, medianExact(bars) OVER () AS typical_bars
                FROM (
                    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, count() AS bars
                    FROM global_markets.delayed_stocks_minute_aggs
                    WHERE window_start >= now() - INTERVAL 34 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
                    GROUP BY d
                    HAVING d < toDate(toTimeZone(now(), 'America/New_York'))
                )
            )
            WHERE bars >= 0.85 * typical_bars
        )
    )
    WHERE d > last_full - 30
)
SELECT tup.1 AS return_bucket,
       tup.3 AS stocks
FROM (
    SELECT arrayJoin(arrayZip(
               ['down 20% or more', 'down 10% to 20%', 'down 0% to 10%',
                'up 0% to 10%', 'up 10% to 20%', 'up 20% or more'],
               [1, 2, 3, 4, 5, 6],
               [countIf(r <= -20), countIf(r > -20 AND r <= -10), countIf(r > -10 AND r < 0),
                countIf(r >= 0 AND r < 10), countIf(r >= 10 AND r < 20), countIf(r >= 20)])) AS tup
    FROM (
        SELECT ticker,
               (argMax(c, d) / argMin(o, d) - 1) * 100 AS r
        FROM (
            SELECT ticker,
                   toDate(toTimeZone(window_start, 'America/New_York')) AS d,
                   argMin(toFloat64(open), window_start) AS o,
                   argMax(toFloat64(close), window_start) AS c,
                   sum(toFloat64(close) * toFloat64(volume)) AS dollars
            FROM global_markets.delayed_stocks_minute_aggs
            WHERE window_start >= now() - INTERVAL 34 DAY
              AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM window_days)
              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')
              AND ticker 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 ticker IN (SELECT ticker FROM global_markets.stocks_ratios
                             WHERE market_cap > 0)
              AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                                 WHERE execution_date BETWEEN today() - 45 AND today())
            GROUP BY ticker, d
        )
        GROUP BY ticker
        HAVING sum(dollars) >= 1000000000 AND argMin(o, d) >= 10 AND count() >= 15
    )
)
ORDER BY tup.2

在通过筛选的股票中,有 67 只在窗口内上涨 20% 或以上,有 106 只下跌 20% 或以上;最靠近持平的两个区间分别有 276 只和 400 只股票。上面两张榜单正是从这条分布曲线上截出来的:前十名只是曲线最右侧的一小段。带着这个认识回看前面的榜单:能登上月度榜单前十的涨跌幅,按定义就是异常值,绝不是一只普通股票在普通一个月里的表现。

哪些因素会把一只股票送上月度涨跌榜

一个月的时间长到足以容纳好几件大事,又短到通常只有其中一件占据主导。登上这些榜单的股票,往往都对应着公司日程表上某个具体日期发生的事件。季度财报是最常见的原因:一次超预期或不及预期的业绩,会在一个交易日内重新定价,此后整个月的交易都围绕这个新价位展开。业绩指引的调整也能起到同样的作用,即使没有伴随实际财报发布。

并购消息在月度榜单上留下的痕迹最容易辨认:股价跳升到接近公告收购价的水平后就归于平静,成交金额继续保持巨大,涨跌百分比却不再变化。如果涨幅榜前列的某只股票同时出现巨额成交金额,且价格在窗口中段就停止了波动,这种组合值得优先核查。

板块性的行情在一个月的尺度上会显现出周榜上罕见的分量:利率、油价或存储芯片价格的变化,会把整个板块一起带动,这就是月度榜单常常出现同类公司扎堆、而不是十只互不相关的股票的原因。分析师评级调整、指数纳入与剔除、临床试验或监管结果的公布,以及逼空行情,则填补了余下的部分。这些原因单看涨跌百分比都看不出来,这也正是本页在每一次异动旁边都附上成交金额和大盘同期走势的原因。

统计方法说明

每一道门槛都在这里明确列出,而不是含糊带过。一个规则藏而不宣的筛选器,看上去是数据,实际上是一种观点。

  • 窗口范围。 截至成交记录已完整加载的最近一个交易日为止,向前追溯 30 个日历日,具体对应 Jun 22Jul 20 之间已完成的 20 个交易日。是否纳入某一交易日由两条规则判定:其一,该交易日必须已经在纽约当地时间收盘,因此进行中的交易日永远不会被计入;其二,其常规交易时段的分钟K线数量必须达到 34 天扫描窗口内中位数的 85% 以上,这可以挡住那些成交记录仍在陆续加载的较早交易日。一个缩短的假日交易日打印的K线数量大约只有正常一天的一半,因此同一条规则也会把它排除,而不是按半载数据去测量它。
  • 涨跌幅的计算。 从窗口内首个常规交易时段的开盘价,计算到最后一个常规交易时段的收盘价,数据来自分钟K线。只统计常规交易时段,盘前和盘后的成交都被排除在外。这是价格涨跌幅,股息不会被加回。
  • 筛选门槛。 整个窗口内成交金额至少 10 亿美元,开盘价至少 10 美元,并且在窗口内至少 15 个交易日有成交记录。这个成交金额门槛是整月的累计值,因此比同样的数字放在单独一周内衡量要更容易达到。
  • 剔除规则。 杠杆和反向基金按名单逐一剔除。每个代码还必须在我们的参考数据中带有公司基本面信息,即备案在案的市值。第二条规则会剔除 ETF、封闭式基金、大宗商品信托,以及正快速扩张的杠杆单股产品家族,否则它们会占满两张榜单的大部分位置。这张参考表每个代码只保留一行,而不是按日期存档的每日快照,因此筛选器读取的是整张表,不会由某一个单独日期决定谁有资格入选。任何在过去 45 天内发生过拆股的代码都会被直接剔除,而不是做拆股复权处理,因为拆股只是改变每股价格,并不改变持仓本身的价值。有一个代码曾被数据供应商在两家不同公司之间重新分配,这里也按名称将其剔除。
  • 超大盘股面板。 一组固定的八只被广泛持有的美国大型公司,名单直接列在该面板的 SQL 中。它采用与榜单相同的窗口和相同的涨跌幅计算方法,但不受成交金额门槛的筛选。
  • 未采用的规则。 本页没有行业筛选,没有市值下限,也没有指数成分股的要求,因此一只换手活跃的小公司完全可能与一家大公司同榜出现。排名只按涨跌百分比计算,这正是成交金额要紧挨着它打印出来的原因。

有一个面板记录了以上所有规则的执行结果:窗口覆盖的交易日,以及每张榜单筛选所依据的股票总体。

查询本页所有榜单背后的窗口范围与筛选后的股票总体
每个数字背后的完整 SQL
WITH window_days AS (
    SELECT d
    FROM (
        SELECT d, max(d) OVER () AS last_full
        FROM (
            SELECT d
            FROM (
                SELECT d, bars, medianExact(bars) OVER () AS typical_bars
                FROM (
                    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, count() AS bars
                    FROM global_markets.delayed_stocks_minute_aggs
                    WHERE window_start >= now() - INTERVAL 34 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
                    GROUP BY d
                    HAVING d < toDate(toTimeZone(now(), 'America/New_York'))
                )
            )
            WHERE bars >= 0.85 * typical_bars
        )
    )
    WHERE d > last_full - 30
),
screened AS (
    SELECT ticker
    FROM (
        SELECT ticker,
               toDate(toTimeZone(window_start, 'America/New_York')) AS d,
               argMin(toFloat64(open), window_start) AS o,
               sum(toFloat64(close) * toFloat64(volume)) AS dollars
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE window_start >= now() - INTERVAL 34 DAY
          AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM window_days)
          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')
          AND ticker 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 ticker IN (SELECT ticker FROM global_markets.stocks_ratios
                         WHERE market_cap > 0)
          AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                             WHERE execution_date BETWEEN today() - 45 AND today())
        GROUP BY ticker, d
    )
    GROUP BY ticker
    HAVING sum(dollars) >= 1000000000 AND argMin(o, d) >= 10 AND count() >= 15
)
SELECT formatDateTime(w.first_d, '%b %e') AS first_session_date,
       formatDateTime(w.last_d, '%b %e') AS last_session_date,
       w.n AS sessions,
       (SELECT count() FROM global_markets.stocks_ratios WHERE market_cap > 0) AS companies_on_file,
       (SELECT count() FROM screened) AS companies_screened
FROM (SELECT min(d) AS first_d, max(d) AS last_d, count() AS n FROM window_days) AS w

筛选从参考表中带有市值记录的 4124 个代码开始,最终有 1135 家公司通过了成交金额、价格和交易日数的门槛。这两个数字在本页每次刷新时都会被存储下来,因此哪怕筛选所依据的股票总体缩水,也会在这份记录里显现出来,而不会被悄悄放过。

FAQ

本月美股涨幅榜前几名是哪些股票?

截至 Jul 20 的窗口内,在成交金额超过 10 亿美元的股票中,涨幅最大的是 CRNX(上涨 133.5%)和 SDOT(上涨 78.2%)。完整的前十名列在本页第一张表格中,并会随着新交易日的完成持续滚动更新。

本月美股跌幅最大的股票有哪些?

跌幅最深的是 NVTS,下跌 -52.9%,其次是 WOLF,下跌 -50.8%。两者统计的都是同样的 20 个交易日,采用与涨幅榜相同的 10 亿美元成交金额门槛。

月度涨跌幅是如何计算的?

本页的月度涨跌幅,是从窗口内首个常规交易时段的开盘价,计算到最后一个常规交易时段的收盘价,数据来自分钟K线。这是价格涨跌幅,股息不会被加回;任何在窗口附近发生拆股的公司都会被直接剔除,而不是做拆股复权处理。

为什么涨跌榜要剔除杠杆ETF?

杠杆或反向基金会把某个指数或某只个股的单日涨跌幅成倍放大,因此即便在没有任何公司层面消息的普通交易日,它也可能登上未经筛选的涨跌榜榜首。剔除它们,才能让这份榜单保持是一份运营公司的名单。杠杆ETF的运作原理一文详细介绍了每日重置机制,以及持有一个月所产生的收益偏离。


上面每个面板都是一条附带 SQL 的已存储查询。打开任意一个,修改成交金额门槛或窗口长度,就能在 Strasmore 终端上用同一份成交记录自己动手筛选。