Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor · · Updated 2026-07-25

MU: MU June 2026 tape dey heavy pass SPY

Micron June 2026 regular-hours turnover na 995.7 billion dollars, di first-ranked tape for whole US market. Di repricing for June cool reach 14 percent.

Micron bin dey repricing anyhow for di first half of 2026 — and for June, di price come cool down but di tape no gree follow. MU close June for $1151.01, e go up 14% — na im quietest month since February, after May wey be 89.8% — while im $995.7 billion of regular-hours turnover put am for first for di whole US tape, e even pass SPY sef. If you measure am day by day, e still be di half im most volatile month (127.6% annualized): di calm wey you dey see na just endpoint illusion. Na here di June receipts dey — tape, earnings-week filings, volatility, peers, spread, options, shorts, and di six-month arc. Every number na stored query; expand any panel make you see im SQL.

Di month wey dey one row

QueryMU for June for one row: open, close, extremes, turnover, and dia receipts
The exact SQL behind every number
WITH
    (
        SELECT count() FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY'
          AND window_start >= toDateTime('2026-06-19 00:00:00') AND window_start < toDateTime('2026-06-20 00:00:00')
    ) AS spy_jun19,
    (
        SELECT max(toFloat64(high)) FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'MU'
          AND window_start >= toDateTime('2026-06-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
    ) AS hi,
    (
        SELECT min(toFloat64(low)) FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'MU'
          AND window_start >= toDateTime('2026-06-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
    ) AS lo
SELECT
    round(argMinIf(toFloat64(open), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199), 2) AS month_open,
    round(argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199), 2) AS month_close,
    round((argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) / argMinIf(toFloat64(open), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) - 1) * 100, 1) AS month_return_pct,
    round(hi, 2) AS month_high,
    formatDateTime(toTimeZone(minIf(window_start, toFloat64(high) >= hi - 0.011), 'America/New_York'), '%Y-%m-%d %H:%i') AS month_high_first_bar_et,
    round(lo, 2) AS month_low,
    formatDateTime(toTimeZone(minIf(window_start, toFloat64(low) <= lo + 0.011), 'America/New_York'), '%Y-%m-%d %H:%i') AS month_low_first_bar_et,
    round(minIf(toFloat64(low), (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) - lo, 2) AS rth_minus_extended_low,
    round(toFloat64(sum(volume)) / 1e9, 2) AS month_shares_bn,
    round(sumIf(toFloat64(close) * toFloat64(volume), (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) / 1e9, 1) AS rth_dollar_bn,
    uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS session_days_observed,
    spy_jun19 AS spy_bars_june19
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'MU'
  AND window_start >= toDateTime('2026-06-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')

Di range inside di month big well-well for name wey get dis kain size: from $850.1 low (2026-06-05 16:34 ET) go reach $1255 high (2026-06-25 09:35 ET) — e wide pass di whole year range of plenty stocks. June 19 na market-wide closure (0 SPY bars), so di month run for 21 sessions.

June against the six-month arc

+14% big? For dis ticker, for dis half, na im be di calm one. Di panel dey recompute everi month di same way, live.

QueryMU month by month, dem recompute am live: return, close, and regular-hours turnover
The exact SQL behind every number
SELECT toString(toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York')))) AS period_start,
    round((argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS month_return_pct,
    round(argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS month_close,
    round(sumIf(toFloat64(close) * toFloat64(volume), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / 1e9, 1) AS rth_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'MU'
  AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY period_start
ORDER BY period_start

Di arc: 40.5% for January, February flat for 0%, March mark di half low-water close for -15.9% ($337.62), den 48.4% for April and 89.8% for May — $414.73 to $1151.01 inside six months. Turnover climb follow am: $235.8 billion for January to $995.7 billion for June. June price move na di smallest since February; June tape na di biggest for di window.

Di price calm down. But di volatility no gree.

14% month wey dey plus, e dey calm? Realized volatility — di day-to-day closing moves wey dem annualize — dey read June for anoda way.

QueryMU by month: annualized realized volatility, average session range, biggest single-day move
The exact SQL behind every number
SELECT
    toString(toStartOfMonth(et_date)) AS period_start,
    round(stddevSamp(log_ret) * sqrt(252) * 100, 1) AS realized_vol_ann_pct,
    round(100 * stddevSamp(log_ret) / max(stddevSamp(log_ret)) OVER (), 1) AS pct_of_peak_vol,
    round(avg(day_range_pct), 1) AS avg_day_range_pct,
    round(max(abs(day_move_pct)), 1) AS biggest_day_move_pct,
    count() AS return_days
FROM (
    SELECT et_date, day_range_pct,
        if(prev_close > 0, ln(close_usd / prev_close), NULL) AS log_ret,
        if(prev_close > 0, (close_usd / prev_close - 1) * 100, NULL) AS day_move_pct
    FROM (
        SELECT et_date, close_usd, day_range_pct,
            lagInFrame(close_usd) OVER (ORDER BY et_date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
        FROM (
            SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
                argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS close_usd,
                (maxIf(toFloat64(high), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100 AS day_range_pct
            FROM global_markets.delayed_stocks_minute_aggs
            WHERE ticker = 'MU'
              AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
            GROUP BY et_date
        )
    )
)
WHERE isFinite(log_ret) AND log_ret IS NOT NULL
GROUP BY period_start
ORDER BY period_start

For dis measure, June na di wildest month for di half: 127.6% annualized, e even pass May own wey be 101.4%, plus average session range of 7.6% and one close-over-close move of 15.8%. Di endpoints quiet; di days for inside no quiet at all.

Session by session

QueryDi 21 sessions: close, close-over-close change, full-day volume
The exact SQL behind every number
SELECT et_date, close_usd,
    round(if(prev_close = 0, NULL, (close_usd / prev_close - 1) * 100), 1) AS change_pct,
    shares_m
FROM (
    SELECT et_date, close_usd, shares_m,
           lagInFrame(close_usd) OVER (ORDER BY et_date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
    FROM (
        SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
            round(argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199), 2) AS close_usd,
            round(toFloat64(sum(volume)) / 1e6, 1) AS shares_m
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'MU'
          AND window_start >= toDateTime('2026-06-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
        GROUP BY et_date
    )
)
ORDER BY et_date

Di table dey swing well-well for both sides — from $1034.83 for 2026-06-01 through di wahala reach $1151.01 for di final session. Na wetin "+14% for di month" dey hide be dis: na only di endpoints quiet. Di heaviest rows dey inside earnings week — dem pin am next.

Di swings align with one quarter wey dem report?

Dem fit get date — MU June paper trail from SEC own index, side-by-side with wetin di tape show for those dates.

QueryMU June SEC filings and di session wey follow di quarterly 8-K
The exact SQL behind every number
WITH
    (
        SELECT maxIf(filing_date, form_type = '8-K')
        FROM global_markets.stocks_sec_edgar_index
        WHERE cik = '0000723125' AND filing_date >= toDate('2026-06-01') AND filing_date <= toDate('2026-06-30')
    ) AS last_8k_date,
    (
        SELECT minIf(filing_date, form_type = '10-Q')
        FROM global_markets.stocks_sec_edgar_index
        WHERE cik = '0000723125' AND filing_date >= toDate('2026-06-01') AND filing_date <= toDate('2026-06-30')
    ) AS tenq_date,
    (
        SELECT (count(), countIf(form_type = '8-K'), countIf(form_type = '4'))
        FROM global_markets.stocks_sec_edgar_index
        WHERE cik = '0000723125' AND filing_date >= toDate('2026-06-01') AND filing_date <= toDate('2026-06-30')
    ) AS filing_census,
    (
        SELECT toDate(toTimeZone(min(window_start), 'America/New_York'))
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'MU'
          AND window_start >= toDateTime('2026-06-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
          AND toFloat64(high) >= (
              SELECT max(toFloat64(high)) FROM global_markets.delayed_stocks_minute_aggs
              WHERE ticker = 'MU' AND window_start >= toDateTime('2026-06-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
          ) - 0.011
    ) AS month_high_date
SELECT
    toString(last_8k_date) AS earnings_8k_filed,
    if(last_8k_date = toDate('2026-06-24'), 1, 0) AS eightk_on_jun24,
    toString(tenq_date) AS tenq_filed,
    dateDiff('day', last_8k_date, tenq_date) AS days_8k_to_10q,
    filing_census.1 AS june_filings_total,
    filing_census.2 AS eightk_filings,
    filing_census.3 AS form4_filings,
    round((anyIf(close_usd, et_date = toDate('2026-06-25')) / anyIf(close_usd, et_date = toDate('2026-06-24')) - 1) * 100, 1) AS next_session_move_pct,
    round(anyIf(shares_m, et_date = toDate('2026-06-25')), 1) AS next_session_shares_m,
    round(anyIf(shares_m, et_date = toDate('2026-06-25')) - maxIf(shares_m, et_date != toDate('2026-06-25')), 1) AS shares_lead_over_next_busiest_m,
    if(month_high_date = toDate('2026-06-25'), 1, 0) AS month_high_on_jun25
FROM (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
        argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) AS close_usd,
        toFloat64(sum(volume)) / 1e6 AS shares_m
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'MU'
      AND window_start >= toDateTime('2026-06-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
    GROUP BY et_date
)

MU quarterly 8-K get date 2026-06-24, di 10-Q na 1 day behind am (8 June filings, 3 insider Form 4s). Di session after di 8-K date close 15.8% higher on 77.2 million shares — na di heaviest for di month, e clear di next busiest by 5.9 million — and di month $1255 high print for dat same session (2026-06-25 09:35 ET; di agreement column pin di match). Di alignment na di observation; dis page stop here.

Na Micron story, or na memory story?

Di rest of di memory and storage complex move too? Di basket dey fixed and dem don declare am: di three storage names wey June news co-tags pair with MU most, plus NVDA and SPY as yardsticks.

QueryJune side by side: di memory/storage basket, NVDA, and SPY
The exact SQL behind every number
WITH (
    SELECT (argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) / argMinIf(toFloat64(open), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) - 1) * 100
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'MU' AND window_start >= toDateTime('2026-06-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
) AS mu_return
SELECT ticker,
    round(june_return_pct, 1) AS june_return_pct,
    round(june_return_pct - mu_return, 1) AS vs_mu_pct_points,
    rth_dollar_bn,
    round(100 * rth_dollar_bn / max(rth_dollar_bn) OVER (), 1) AS pct_of_top_turnover
FROM (
    SELECT ticker,
        (argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) / argMinIf(toFloat64(open), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) - 1) * 100 AS june_return_pct,
        round(sumIf(toFloat64(close) * toFloat64(volume), (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) / 1e9, 1) AS rth_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('MU', 'SNDK', 'WDC', 'INTC', 'NVDA', 'SPY')
      AND window_start >= toDateTime('2026-06-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
    GROUP BY ticker
)
ORDER BY june_return_pct DESC

Na memory move — and MU no follow am reach. SNDK rise 31.3%, INTC 27.5%, WDC 19.1% — every storage name beat MU by 5.1 to 17.3 points — while SPY and NVDA close June for down side. Di special thing about MU: im turnover pass every row for here.

Di biggest ticker for di tape

QueryDi whole US tape rank by June 2026 regular-hours dollar volume (dem exclude one reused-symbol listing pending entity verification)
The exact SQL behind every number
SELECT ticker,
    round(sum(toFloat64(volume) * toFloat64(close)) / 1e9, 1) AS regular_hours_dollar_bn,
    round(100 * sum(toFloat64(volume) * toFloat64(close)) / max(sum(toFloat64(volume) * toFloat64(close))) OVER (), 1) AS pct_of_leader
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= toDateTime('2026-06-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
  AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
  AND ticker NOT IN ('SPCX')
GROUP BY ticker
ORDER BY regular_hours_dollar_bn DESC
LIMIT 10
QueryDi rank receipt: MU place, im lead over di next name, and di basis
The exact SQL behind every number
WITH (
    SELECT sum(toFloat64(volume) * toFloat64(close))
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'MU'
      AND window_start >= toDateTime('2026-06-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
      AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
) AS mu_d
SELECT
    countIf(d > mu_d AND ticker != 'MU') + 1 AS mu_rank,
    round(mu_d / 1e9, 1) AS mu_dollar_bn,
    round((mu_d - maxIf(d, d < mu_d AND ticker != 'MU')) / 1e9, 1) AS lead_over_next_bn
FROM (
    SELECT ticker, sum(toFloat64(volume) * toFloat64(close)) AS d
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= toDateTime('2026-06-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
      AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
      AND ticker NOT IN ('SPCX')
    GROUP BY ticker
)

MU rank first for every US-listed symbol by June regular-hours dollar volume — $995.7 billion, e pass SPY wey dey second with $224.3 billion. One single company wey out-trade di flagship index fund for one month na rare tape structure; di earnings-week and peer sections wey dey up hold di context. Basis: June 1–30 regular hours, dem exclude one reused-symbol listing pending entity verification (di receipts). Di market-wide view dey for di June recap.

Wetin make up di tape

QueryDi whole MU tape for one row: prints, print sizes, and di quote census
The exact SQL behind every number
WITH
    (
        SELECT (round(count() / 1e6, 2),
                round(100.0 * countIf(bid_price > 0 AND ask_price > 0 AND ask_price > bid_price) / count(), 2),
                countIf(bid_price > 0 AND ask_price > 0 AND ask_price < bid_price),
                countIf(bid_price <= 0 OR ask_price <= 0))
        FROM global_markets.cache_stocks_quotes
        WHERE ticker = 'MU'
          AND sip_timestamp >= toDateTime64('2026-06-01 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
    ) AS quote_census
SELECT
    round(count() / 1e6, 2) AS prints_m,
    quantileDeterministic(0.5)(toFloat64(size), toUInt64(abs(sequence_number))) AS median_print_shares,
    round(avg(toFloat64(size)), 1) AS avg_print_shares,
    round(100.0 * countIf(size < 100) / count(), 1) AS odd_lot_pct_of_prints,
    round(100.0 * countIf(toFloat64(size) != round(toFloat64(size))) / count(), 2) AS fractional_pct_of_prints,
    quote_census.1 AS nbbo_updates_m,
    quote_census.2 AS clean_two_sided_pct,
    quote_census.3 AS crossed_updates,
    quote_census.4 AS one_sided_or_empty_updates
FROM global_markets.stocks_trades
WHERE ticker = 'MU'
  AND sip_timestamp >= toDateTime64('2026-06-01 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)

35.17 million prints for median of 8 shares — and 91.7% odd lots, wey be one of di tapes wey retail don slice pass wey we don measure (NVDA own for June run materially lower; di deep-dive get di twin panel). For four-digit share price, "round lot" na serious money, so small prints dey dominate by design; fractional prints (9.04%) dey point di same direction. Di quote side: 19.64 million NBBO updates, 99.86% clean two-sided, 16963 crossed, 78 one-sided or empty — we disclose am, we no drop am.

Di spread wen dem dey reprice

One stock wey nearly triple inside one quarter dey ask di spread question for anoda way: dem still quote am tight wen di price dey find new level?

QueryDi spread by session: regular-hours median in cents and basis points
The exact SQL behind every number
SELECT session,
    round(quantileDeterministicIf(0.5)(toFloat64(ask_price) - toFloat64(bid_price), toUInt64(toUnixTimestamp64Micro(sip_timestamp)), bid_price > 0 AND ask_price >= bid_price) * 100, 1) AS med_spread_cents,
    round(quantileDeterministicIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, toUInt64(toUnixTimestamp64Micro(sip_timestamp)), bid_price > 0 AND ask_price >= bid_price), 2) AS med_spread_bps,
    count() AS quote_updates,
    countIf(NOT (bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price)) AS invalid_dropped
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'MU'
  AND sip_timestamp >= toDateTime64('2026-06-01 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
  AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS session
ORDER BY session

For basis points, di spread remain institutional-grade through di whole move: 3.96 bps for 2026-06-01, 4.19 bps for di last session — di cents column roughly dey follow di price level itself. For di mechanics, check di spread explainer.

Options: one two-way book

QueryMU options market for one row: totals, expiries, di put/call split
The exact SQL behind every number
SELECT
    round(count() / 1e6, 2) AS prints_m,
    uniqExact(ticker) AS distinct_contracts,
    round(sum(size) / 1e6, 2) AS contracts_traded_m,
    round(sum(toFloat64(price) * size) * 100 / 1e9, 2) AS premium_notional_busd,
    round(toFloat64(sumIf(size, substring(ticker, 11, 1) = 'P')) / toFloat64(sumIf(size, substring(ticker, 11, 1) = 'C')), 2) AS month_put_call_ratio,
    uniqExact(substring(ticker, 5, 6)) AS expiries_traded,
    round(intDiv(toUInt32OrZero(substring(argMax(ticker, sz), 12, 8)), 1000), 0) AS busiest_strike_usd
FROM (
    SELECT ticker, price, size, sum(size) OVER (PARTITION BY ticker) AS sz
    FROM global_markets.options_trades
    WHERE startsWith(ticker, 'O:MU') AND length(ticker) = 19
      AND sip_timestamp >= toDateTime64('2026-06-01 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
)

16.76 million contracts across 11789 different contracts, for $77.13 billion in premium — and di book na two-way: di month put/call ratio na 0.99, wey almost balance (NVDA own for June run heavy for call side; check am). Near-balance during one serious repricing mean say di options market split for both sides of di move — di data show di split, no be di intention.

QueryWhere di contracts land: call and put volume by strike bucket
The exact SQL behind every number
SELECT
    concat('$', toString(toUInt32(bucket))) AS strike_bucket,
    call_contracts,
    put_contracts,
    round(100.0 * put_contracts / (call_contracts + put_contracts), 1) AS put_share_pct
FROM (
    SELECT
        least(floor(toFloat64(toUInt32OrZero(substring(ticker, 12, 8))) / 1000 / 100) * 100, 1500) AS bucket,
        toUInt64(sumIf(size, substring(ticker, 11, 1) = 'C')) AS call_contracts,
        toUInt64(sumIf(size, substring(ticker, 11, 1) = 'P')) AS put_contracts
    FROM global_markets.options_trades
    WHERE startsWith(ticker, 'O:MU') AND length(ticker) = 19
      AND sip_timestamp >= toDateTime64('2026-06-01 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
    GROUP BY bucket
)
ORDER BY toUInt32OrZero(substring(strike_bucket, 2))

Di strike map cover range wey for don crazy for January — real volume from di $0 bucket reach di $1500+ ceiling, one footprint of how far di underlying move. Wetin cost to own dat movement? Di month final session price am:

QueryMonth-end price of movement: di last at-the-money straddle of June
The exact SQL behind every number
WITH (
    SELECT argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199)
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'MU' AND window_start >= toDateTime('2026-06-30 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
) AS spot
SELECT
    toString(any(expiry)) AS nearest_expiry,
    dateDiff('day', toDate('2026-06-30'), any(expiry)) AS calendar_days_to_expiry,
    round(spot, 2) AS spot_close,
    argMin(strike_usd, (dist, strike_usd)) AS atm_strike,
    round(argMin(call_last + put_last, (dist, strike_usd)), 2) AS straddle_usd,
    round(argMin(call_last + put_last, (dist, strike_usd)) / spot * 100, 2) AS straddle_pct_of_spot,
    count() AS two_sided_strikes
FROM (
    SELECT expiry, strike_usd, abs(strike_usd - spot) AS dist,
        anyIf(last_px, opt_type = 'C') AS call_last,
        anyIf(last_px, opt_type = 'P') AS put_last
    FROM (
        SELECT
            toDateOrNull(concat('20', substring(ticker, 5, 2), '-', substring(ticker, 7, 2), '-', substring(ticker, 9, 2))) AS expiry,
            substring(ticker, 11, 1) AS opt_type,
            toFloat64(toUInt32OrZero(substring(ticker, 12, 8))) / 1000 AS strike_usd,
            argMax(toFloat64(price), (sip_timestamp, toFloat64(price))) AS last_px
        FROM global_markets.options_trades
        WHERE startsWith(ticker, 'O:MU') AND length(ticker) = 19
          AND sip_timestamp >= toDateTime64('2026-06-30 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
        GROUP BY expiry, opt_type, strike_usd
    )
    WHERE expiry > toDate('2026-06-30')
    GROUP BY expiry, strike_usd
    HAVING countIf(opt_type = 'C') > 0 AND countIf(opt_type = 'P') > 0
)
WHERE expiry = (
    SELECT min(toDateOrNull(concat('20', substring(ticker, 5, 2), '-', substring(ticker, 7, 2), '-', substring(ticker, 9, 2))))
    FROM global_markets.options_trades
    WHERE startsWith(ticker, 'O:MU') AND length(ticker) = 19
      AND sip_timestamp >= toDateTime64('2026-06-30 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
      AND toDateOrNull(concat('20', substring(ticker, 5, 2), '-', substring(ticker, 7, 2), '-', substring(ticker, 9, 2))) > toDate('2026-06-30')
)

As at di June 30 close, di nearest expiry dey 2 calendar days out; di at-the-money pair — one call plus one put for di $1150 strike — last trade for combined $69.95: 6.08% of di $1151.01 share price. One buyer need move wey reach dat size, any direction, inside dose 2 days to break even — June still end with price wey dey expect outsized movement.

Di news wey dey flow

QueryJune MU-tagged articles: volume, di top publisher share, co-tags
The exact SQL behind every number
WITH
    (
        SELECT (JSONExtractString(any(publisher), 'name'), count())
        FROM global_markets.stocks_news
        WHERE has(tickers, 'MU')
          AND published_utc >= toDateTime('2026-06-01 00:00:00') AND published_utc < toDateTime('2026-07-01 04:00:00')
        GROUP BY JSONExtractString(publisher, 'name') ORDER BY count() DESC LIMIT 1
    ) AS top_pub
SELECT
    count() AS june_articles,
    uniqExact(JSONExtractString(publisher, 'name')) AS publishers,
    top_pub.1 AS top_publisher,
    round(100.0 * top_pub.2 / count(), 0) AS top_publisher_pct,
    countIf(has(tickers, 'NVDA')) AS nvda_co_articles,
    countIf(has(tickers, 'SNDK')) AS sndk_co_articles,
    countIf(has(tickers, 'INTC')) AS intc_co_articles
FROM global_markets.stocks_news
WHERE has(tickers, 'MU')
  AND published_utc >= toDateTime('2026-06-01 00:00:00') AND published_utc < toDateTime('2026-07-01 04:00:00')

195 articles wey get MU tag from 4 publishers — read am with one eye open, na The Motley Fool alone write 59% of dem. Di co-tags dey frame one semiconductor story: NVDA dey inside 86 articles, SNDK dey 32, INTC dey 21. Wetin di whole thing be about? Di vendor own article tags show di vocabulary but we no gree adopt am:

QueryWetin June MU coverage be about: di vendor own article tags, dem count am
The exact SQL behind every number
SELECT keyword, count() AS articles,
    round(100.0 * count() / (SELECT count() FROM global_markets.stocks_news WHERE has(tickers, 'MU') AND published_utc >= toDateTime('2026-06-01 00:00:00') AND published_utc < toDateTime('2026-07-01 04:00:00')), 1) AS pct_of_articles
FROM global_markets.stocks_news
ARRAY JOIN keywords AS keyword
WHERE has(tickers, 'MU')
  AND published_utc >= toDateTime('2026-06-01 00:00:00') AND published_utc < toDateTime('2026-07-01 04:00:00')
GROUP BY keyword
ORDER BY articles DESC, keyword ASC
LIMIT 10

"AI infrastructure" dey lead for 49 of 195 articles, and "memory chips", "DRAM" plus "high-bandwidth memory" dey follow am for back — na AI-memory vocabulary, dem report am as tag counts, no be say we dey use am.

Shorts don reduce — but one coverage hole still dey

QueryFINRA off-exchange short volume: MU June coverage and marked-short share
The exact SQL behind every number
SELECT toString(date) AS d,
    round(toFloat64(any(short_volume)) / 1e6, 2) AS short_shares_m,
    round(100 * toFloat64(any(short_volume)) / toFloat64(any(total_volume)), 1) AS short_pct_of_offexchange
FROM global_markets.stocks_short_volume
WHERE ticker = 'MU' AND date >= toDate('2026-06-01') AND date <= toDate('2026-06-30')
GROUP BY date
ORDER BY date

Coverage first: MU June short-volume file get only 16 out of 21 sessions — beyond the market-wide June 29 cut-off, plenty MU rows just no dey at all — so we no fit calculate any month-level ratio; the per-day rows na real ones, and we don show the gaps.

QueryDi June settlement pair: mid-month and month-end short interest
The exact SQL behind every number
SELECT
    toString(maxIf(settlement_date, settlement_date <= toDate('2026-06-20'))) AS mid_june_settlement,
    round(toFloat64(maxIf(short_interest, settlement_date <= toDate('2026-06-20'))) / 1e6, 2) AS mid_june_shares_short_m,
    toString(maxIf(settlement_date, settlement_date > toDate('2026-06-20'))) AS eom_settlement,
    round(toFloat64(maxIf(short_interest, settlement_date > toDate('2026-06-20'))) / 1e6, 2) AS eom_shares_short_m,
    round((toFloat64(maxIf(short_interest, settlement_date <= toDate('2026-06-20'))) - toFloat64(maxIf(short_interest, settlement_date > toDate('2026-06-20')))) / 1e6, 2) AS decline_m_shares,
    round(toFloat64(maxIf(short_interest, settlement_date > toDate('2026-06-20'))) / toFloat64(maxIf(avg_daily_volume, settlement_date > toDate('2026-06-20'))), 2) AS eom_days_to_cover
FROM global_markets.stocks_short_interest
WHERE ticker = 'MU' AND settlement_date >= toDate('2026-06-01') AND settlement_date <= toDate('2026-06-30')

The settlement pair complete: 41.59 million shares short for the 2026-06-15 settlement drop go 31.67 million by 2026-06-30 — na 9.92 million-share decline across the back half, the half wey hold earnings week. The month-end position equal 0.53 days of average volume — e small for this tape. This page first ship with that print still dey wait (the lag na normal thing); the number wey dey up na im arrival.

Wetin dey under the tape

Wetin di company own statements show? One caveat: di feed dey behind di filing calendar — di newest row dey before di June 10-Q, so na di trend be di exhibit, no be di front edge.

QueryMU last six reported quarters on file: revenue, net income, diluted EPS
The exact SQL behind every number
SELECT quarter_end, revenue_bn,
    round(100 * revenue_bn / max(revenue_bn) OVER (), 1) AS pct_of_peak_revenue,
    net_income_bn, diluted_eps
FROM (
    SELECT toString(period_end) AS quarter_end,
        round(toFloat64(revenue) / 1e9, 2) AS revenue_bn,
        round(toFloat64(net_income_loss_attributable_common_shareholders) / 1e9, 2) AS net_income_bn,
        round(toFloat64(diluted_earnings_per_share), 2) AS diluted_eps
    FROM global_markets.stocks_income_statements
    WHERE has(tickers, 'MU') AND timeframe = 'quarterly'
    ORDER BY period_end DESC
    LIMIT 6
)
ORDER BY quarter_end ASC

Across di six quarters wey dey on file, revenue dey run from $7.75 billion (2024-08-29) go $13.64 billion (2025-11-27) — di newest row na di window peak — with $5.24 billion net income and $4.6 diluted EPS for dat quarter. E no be straight line, but di window end for im high.

Wetin to dey watch from here

Na calendar facts alone: di next short-interest settlement go land mid-July, dem go publish am for FINRA usual lag; di June-filed quarter go turn to fundamentals row once di vendor feed catch up; and di July tape go get dis treatment for di series next edition.

FAQ

Why MU stock move well-well for June 2026?

Dis page dey measure, e no dey explain: MU trade between $850.1 and $1255; di quarterly 8-K date na 2026-06-24, and di next session jump 15.8% for di month heaviest volume; di whole memory basket move di same way for dat period.

How volatile MU be for June 2026?

Na di month wey get di highest volatility for im half: 127.6% annualized realized volatility and 7.6% average session range, against endpoint-to-endpoint return wey be just 14%.

Di move wey MU make for June, na only di company or di whole sector?

Na di whole sector, and MU na di laggard among di gainers: SNDK rise 31.3% and every storage name beat MU own 14%, while SPY and NVDA close lower. Wetin stand out for MU na turnover: $995.7 billion, di biggest for di basket.

MU short interest high?

E small relative to im own trading: 31.67 million shares for di 2026-06-30 settlement — dat one be like 0.53 days of average volume to cover, e drop 9.92 million from mid-June. Short interest dey always show with settlement lag.

Wetin MU put/call ratio mean?

June ratio of 0.99 mean say puts and calls trade with volume wey almost equal — na two-way market, no be one-sided bet. If e well below one, e dey show say call dey favored (NVDA own for June show am), if e well above one, put dey favored.

Data notes

Full data notes
  • Entity. MU na Micron Technology, Inc., CIK 0000723125 — one continuous EDGAR identity; no symbol-reuse wahala.
  • Short-volume coverage. Di June file cover 16 of 21 sessions (di June 29 truncation plus MU-specific absences); ratios wey dem show na per-day only.
  • Peer basket. SNDK, WDC, INTC — na di storage co-tags wey dey show most for MU news flow for June — plus NVDA and SPY as yardsticks; dem declare am up front, dem no assemble am after di fact.
  • Options parsing. Expiry/type/strike dem re-parse from di OCC symbol (positions 5/11/12); premium dey assume di 100-share multiplier.
  • Straddle method. Last TRADED prices (no be quotes) for di strike wey near di final close pass, nearest expiry after month end — na trade receipt, no be model-implied volatility.
  • Fundamentals lag. Di income-statement feed dey follow di filing calendar; im newest MU row dey before di June 10-Q — na trend context only.
  • June 19 closure dem verify am with di zero-SPY-bars scoreboard receipt.
  • Spread panels dem exclude crossed/one-sided quotes, with drop counts wey dem disclose for di row.
  • Market-wide context — dis ticker dey on top di whole-tape leaderboard included — dey inside di June 2026 recap.

How We Dey Do Am

  • Di period na June 1–30, 2026 (21 sessions, wey we verify from di bars wey we see). Returns na from di first regular-hours open to di last regular-hours close; June na entirely EDT, so regular hours na 13:30–20:00 UTC as raw bounds. Di trailing panels cover EST months and dey use di Eastern-clock filter instead.
  • Realized volatility na sample stddev of daily close-over-close log returns (regular-hours closes), wey we annualize with di square root of 252; one month first return dey cross di month boundary and dey count for di later month.
  • Trailing comparisons dey recompute live, we no dey ever take am from any stored value.
  • Generation na batch-only through di gated read-only path; di public page no dey ever query live. Warehouse as of July 12, 2026.

Every panel na one stored object — chart, table, SQL. Carry any query further on di Strasmore terminal.