Strasmore Research
Podsumowania rynkowe Matt ConnorAutor: Matt Connor · Zaktualizowano 2026-07-24 · data as of July 24, 2026 · refreshed weekly

Największe zmiany kursów akcji w tym miesiącu

Ranking największych wzrostów i spadków kursów akcji na podstawie danych giełdowych. Zestawienie uwzględnia wolumen obrotu w USD dla każdej pozycji.

Poniżej przedstawiono zestawienie największych zmian kursów akcji z bieżącego miesiąca, sporządzone bezpośrednio na podstawie danych giełdowych. Zestawienie obejmuje 21 zakończonych sesji handlowych z okresu od Jun 23 do Jul 22. W zestawieniu uwzględniono wyłącznie spółki operacyjne, których obrót w analizowanym okresie wyniósł co najmniej 1 USD, co gwarantuje znaczący wolumen kapitału przy każdej zmianie. Fundusze lewarowane oraz fundusze typu inverse zostały wyłączone z zestawienia. Okres analizy jest aktualizowany wraz z zakończeniem kolejnych sesji.

Największe wzrosty akcji w tym miesiącu

Tabela przedstawia ranking największych wzrostów w danym okresie. Każdy wiersz zawiera kwotę obrotu w USD obok wartości procentowej, co pozwala odróżnić masowe zmiany wyceny od tych o niskiej płynności.

ZapytanieNajwiększe wzrosty akcji w tym miesiącu (obrót >$1B w danym okresie)
Dokładny kod SQL dla każdej liczby
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 zajmuje pierwsze miejsce z wynikiem 136.1% przy obrocie rzędu 9.7 miliardów USD, wyprzedzając PBF z wynikiem 65.9% oraz MAN z wynikiem 62.1%. Tak duży ruch w ciągu miesiąca zazwyczaj objawia się najpierw jako podwyższony wolumen relatywny względem średniego dziennego wolumenu danej spółki. Często zaczyna się on od luki nocnej w jednej sesji, zamiast stopniowego wzrostu w całym badanym okresie.

Największe spadki akcji w tym miesiącu

Odwrócona konstrukcja: najgłębsze spadki w danym okresie wśród spółek, których obrót przekroczył próg 1 miliarda USD.

ZapytanieNajwiększe spadki akcji w tym miesiącu (obrót >$1B w danym okresie)
Dokładny kod SQL dla każdej liczby
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

CLBK odnotował największy spadek na poziomie -44.6% przy obrocie wynoszącym 1.1 miliarda USD, a na drugim miejscu znalazł się NVTS z wynikiem -41.6%. Należy monitorować kolumnę wartości w USD na tej liście. Spadek odnotowany przy dużym wolumenie obrotu jest innym zjawiskiem niż spadek na rynku o niskiej płynności; różnica ta jest tutaj wyraźnie wskazana, a nie tylko zakładana.

To samo pytanie w trzech horyzontach czasowych

Jedno pytanie, trzy okna czasowe. Nazwa spółki może dominować na jednej liście, nie pojawiając się na pozostałych dwóch.

Trzy zestawienia są tworzone oddzielnie, a ich kryteria selekcji nie są identyczne. Strona tygodniowa stosuje własne progi płynności oraz minima sesyjne w pięciodniowym oknie czasowym. Strona roczna (YTD) filtruje dane na podstawie średniego dziennego obrotu w USD, a nie całkowitego obrotu w danym okresie. Każda strona określa własne zasady w sekcji metodologii, dlatego należy je sprawdzić przed przenoszeniem nazwy spółki między zestawieniami.

Pojedynczy luką może dominować w zestawieniu tygodniowym, ale znikać w ujęciu rocznym. Powolne zmiany miesięczne w ogóle nie trafiają do zestawienia tygodniowego. Porównywanie tych trzech zestawień obok siebie jest najprostszym sposobem na odróżnienie zdarzenia jednodniowego od trendu.

Sytuacja rynkowa w tym samym okresie

Wyniki pojedynczych akcji różnią się od wyników całego rynku w tym samym okresie. Cztery główne indeksy, każdy z bazowym poziomem odniesienia ustalonym na podstawie pierwszej ceny otwarcia w danym okresie:

ZapytanieCztery główne indeksy w tym samym okresie, z bazą od pierwszej otwarcia
Dokładny kod SQL dla każdej liczby
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

W ostatniej sesji indeks S&P 500 osiągnął poziom 1.85%, Nasdaq 100 osiągnął -1.47%, Dow osiągnął 1.33%, a Russell 2000 osiągnął 0.17%. Cztery koszyki, jeden okres, cztery różne wyniki. Porównując zestawienie liderów do tego zakresu: najwyższy wzrost w tym samym okresie wyniósł 136.1%. Wyniki poszczególnych spółek wykazują znacznie większą rozpiętość niż indeksy, w których są zawarte, co stanowi powód, dla którego lista największych aprecjacji obejmuje pojedyncze podmioty.

Wyniki znanych spółek

Inwestorzy poszukujący najlepiej radzących sobie akcji w tym miesiącu zazwyczaj chcą również wiedzieć, jak poradziły sobie spółki, które już posiadają w portfelu. Stały koszyk ośmiu największych spółek typu mega-cap, w tym samym okresie i o tej samej strukturze:

ZapytanieOsiem spółek typu mega-cap w tym samym okresie
Dokładny kod SQL dla każdej liczby
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

Grupa ta osiągnęła wyniki od 11.5% dla META na szczycie do -4.7% dla TSLA na dole. Spółki nie poruszały się jako jeden blok, co jest sytuacją typową, a nie wyjątkiem. Przynależność do indeksu grupuje te przedsiębiorstwa, mimo że ich linie przychodów nie mają ze sobą wiele wspólnego. Koszyk stanowi stałą listę ośmiu nazwisk, a nie ranking, dlatego należy traktować go jako punkt odniesienia, a nie stwierdzenie, które spółki są największe.

Jak wygląda typowy miesiąc

Rankingi przedstawiają wartości skrajne. Poniższe zestawienie obrazuje dane typowe. Wszystkie spółki z 1167 po przejściu filtrów, pogrupowane według stopy zwrotu w danym okresie:

ZapytanieRozkład wyników: miesięczne stopy zwrotu według grup
Dokładny kod SQL dla każdej liczby
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

52 wybranych spółek odnotowało wzrost o 20% lub więcej, natomiast 50 odnotowało spadek o 20% lub więcej. Dwa koszyki najbliższe zerowej stopie zwrotu zawierały po 300 i 515 podmiotów. Wykres ten przedstawia strukturę, z której wyodrębniane są rankingi największych aprecjacji, przy czym dziesięć najlepszych wyników stanowi jego prawą krawędź. Należy o tym pamiętać analizując powyższe zestawienia: miesięczny ruch w pierwszej dziesiątce jest z definicji wartością odstającą, a nie typowym wynikiem dla standardowej spółki.

Przyczyny umieszczania akcji na listach liderów miesięcznych

Miesiąc jest okresem wystarczająco długim, aby wystąpiło w nim kilka zdarzeń, ale jednocześnie na tyle krótkim, że zazwyczaj dominuje jedno z nich. Nazwy na tych listach zazwyczaj pokrywają się z konkretnymi datami w kalendarzu spółki. Najczęstszą przyczyną są wyniki kwartalne: przekroczenie lub niedopełnienie prognoz zmienia cenę w jednej sesji, a przez resztę miesiąca handel odbywa się wokół nowego poziomu. Zmiany prognoz (guidance) wywołują podobny efekt, nawet bez publikacji wyników.

Informacje o fuzjach i przejęciach pozostawiają najbardziej charakterystyczny ślad na miesięcznej liście. Cena akcji wzrasta do poziomu bliskiego ogłoszonej kwocie transakcji, a następnie stabilizuje się. Obroty wyrażone w USD pozostają wówczas bardzo wysokie, podczas gdy procentowa zmiana ceny wygasa. Jeśli spółka na szczycie listy aprecjacji wykazuje ogromny wolumen obrotu i cenę, która przestała się zmieniać w połowie okresu, wzorzec ten należy zweryfikować w pierwszej kolejności.

Ruchy sektorowe mają znaczenie w skali miesiąca w sposób, który rzadko występuje w skali tygodnia. Zmiana stóp procentowych, cen ropy lub cen pamięci półprzewodnikowych wpływa na całą grupę podmiotów jednocześnie. Z tego powodu miesięczne listy często zawierają skupiska podobnych przedsiębiorstw, zamiast dziesięciu niepowiązanych ze sobą spółek. Pozostałe pozycje zajmują działania analityków, włączenia lub usunięcia z indeksów, wyniki badań klinicznych oraz regulacyjnych, a także short squeezes. Żadnego z tych zjawisk nie można zidentyfikować wyłącznie na podstawie zmiany procentowej, dlatego obok każdej pozycji znajdują się kolumny obrotów w USD oraz ramy czasowe rynku.

Sposób pomiaru

Wszystkie progi są tutaj wyraźnie określone, a nie tylko domniemane. Zestawienie oparte na ukrytych regułach jest opinią, a nie danymi.

  • Okno czasowe. Obejmuje 30 ostatnich dni kalendarzowych kończących się na ostatniej sesji o pełnych danych, co stanowi 21 sesji w okresie od Jun 23 do Jul 22. O kwalifikacji sesji decydują dwie reguły. Sesja musi zakończyć się przed bieżącą datą w Nowym Jorku, zatem sesja trwająca nie jest uwzględniana. Liczba świec w regularnych godzinach handlu musi wynosić co najmniej 85% mediany sesji z 34-dniowego skanowania; reguła ta wyklucza wcześniejsze dni, których dane są jeszcze w trakcie ładowania. Skrócona sesja świąteczna generuje około połowy standardowej liczby świec, dlatego ta sama reguła wyklucza ją, zamiast traktować jako sesję niepełną.
  • Stopa zwrotu. Obliczana jako różnica między ceną otwarcia pierwszej sesji regularnej w oknie a ceną zamknięcia ostatniej sesji regularnej, na podstawie świec minutowych. Uwzględniane są wyłącznie regularne godziny handlu, z wyłączeniem handlu przed- i pozagiełdowego. Jest to stopa zwrotu z ceny: dywidendy nie są doliczane.
  • Progi minimalne. Całkowity obrót w oknie musi wynosić co najmniej 1 mld USD, cena otwarcia musi wynosić 10 USD lub więcej, a dane muszą obejmować co najmniej 15 sesji w oknie. Próg dolarowy jest liczony miesięcznie, co ułatwia spełnienie tego wymogu w porównaniu do wartości mierzonej w skali jednego tygodnia.
  • Wykluczenia. Fundusze lewarowane i odwrócone są usuwane na podstawie nazw. Każdy ticker musi posiadać dane fundamentalne oraz kapitalizację rynkową w naszych danych referencyjnych. Ta druga reguła wyklucza ETF, fundusze otwarte, trusty surowcowe oraz szybko rozwijającą się grupę produktów lewarowanych na pojedyncze akcje, które w przeciwnym razie dominowałyby w zestawieniach. Tabela referencyjna zawiera jeden wiersz na ticker zamiast dziennych migawek, więc skaner analizuje całą tabelę, a nie pojedynczą datę. Każdy ticker, w którym w ciągu ostatnich 45 dni doszło do splitu akcji, jest usuwany zamiast dokonywania korekty wstecznej, ponieważ split zmienia cenę za jedną akcję, nie zmieniając wartości posiadanych aktywów. Jeden symbol, który został przypisany przez dostawców danych do dwóch różnych spółek, jest wykluczany na podstawie nazwy.
  • Panel mega-cap. Stały koszyk ośmiu szeroko posiadanych dużych spółek z USA, wymienionych z nazwy w zapytaniu SQL tego panelu. Wykorzystuje on to samo okno czasowe i tę samą metodę obliczania stopy zwrotu co panele, lecz nie podlega filtrowi wolumenu dolarowego.
  • Co nie jest stosowane. Nie stosuje się filtrów sektorowych, progów kapitalizacji rynkowej ani wymogu przynależności do indeksu, więc spółka o małej kapitalizacji o dużej zmienności może znajdować się w zestawieniu obok spółki o dużej kapitalizacji. Ranking opiera się wyłącznie na procentowej zmianie, dlatego obok wyświetlana jest kolumna obrotów w dolarach.

Jeden panel zawiera pełną dokumentację: sesje objęte oknem czasowym oraz uniwersum, z którego wybrano dane dla każdego zestawienia.

ZapytanieOkres oraz uniwersum spółek dla wszystkich wykresów na stronie
Dokładny kod SQL dla każdej liczby
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

Skanowanie rozpoczęło się od 4121 tickerów posiadających kapitalizację rynkową w tabeli referencyjnej, a zakończyło na 1167 spółkach, które spełniły progi obrotu dolarowego, ceny oraz liczby sesji. Obie wartości są zapisywane przy każdym odświeżeniu strony, dzięki czemu zmniejszenie uniwersum danych jest widoczne w dokumentacji, a nie pozostaje niezauważone.

FAQ

Jakie spółki odnotowały największe wzrosty w tym miesiącu?

W okresie kończącym się Jul 22, największe wzrosty wśród spółek o kapitalizacji powyżej 1 USD odnotowały CRNX na poziomie 136.1% oraz PBF na poziomie 65.9%. Pełna lista dziesięciu największych wzrostów znajduje się w pierwszej tabeli na tej stronie i jest aktualizowana po zakończeniu kolejnych sesji.

Jakie akcje odnotowały największe spadki w tym miesiącu?

Największy spadek odnotowała CLBK na poziomie -44.6%, a następnie NVTS na poziomie -41.6%. Wskaźniki te są mierzone w tym samym okresie 21 sesji, przy zachowaniu tego samego progu wolumenu 1 USD, co w przypadku listy wzrostów.

W jaki sposób mierzone są miesięczne stopy zwrotu z akcji?

Miesięczna stopa zwrotu to zmiana ceny akcji od pierwszego otwarcia sesji regulaminowej w danym okresie do ostatniego zamknięcia sesji regulaminowej, obliczona na podstawie wykresów minutowych. Jest to stopa zwrotu z ceny, zatem dywidendy nie są uwzględniane, a spółki, które przeprowadziły podział akcji w pobliżu badanego okresu, są usuwane z zestawienia zamiast dokonywania korekty wstecznej.

Dlaczego fundusze ETF typu leveraged są wykluczane z listy liderów zmian?

Fundusz typu leveraged lub inverse mnoży dzienną zmianę indeksu lub pojedynczej akcji, przez co może zająć pierwsze miejsce na liście zmian w zwykły dzień rynkowy, bez istotnych informacji spółki. Wykluczenie tych funduszy pozwala zachować charakter listy obejmującej spółki operacyjne. Jak działają fundusze ETF typu leveraged wyjaśnia mechanizm dziennego resetu oraz zjawisko dryfu wynikające z trzymania funduszu przez miesiąc.


Każdy powyższy panel to zapisane zapytanie z dołączonym kodem SQL. Otwórz dowolne z nich, zmień próg USD lub długość okresu, aby samodzielnie przeanalizować te same dane na terminalu Strasmore.