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

Best & Worst Thousand Dollars for June 2026

June best contract return 495x, but if you sell am, your thousand dollars premium go turn to 494,000 dollars loss. Full hindsight ledger dey here. No be advice.

Wetin be di single best options trade for June 2026 — and wetin one thousand dollars inside am for turn to? Di honest answer dey come four times: di jackpot; di strange two-contract penny print wey im headline stand on; di nine thousand near-total losses wey surround am; and di mirror trade — SELLING wetin di winner buy — where one thousand dollars of collected premium turn to six-figure hole. We compute everitin AFTER di fact from di stored tape; hindsight-optimal trade dey measure wetin di month contain, no be strategy wey anybody fit don run. Everi number na stored query result; expand any panel for di exact SQL.

June 2026 bin wild reach how far?

If one options ticket win hundred times im money, e mean say di market month must dey historic? June talk say no. Di panel recalculate every month for 2026 di same way — regular-hours open to close, plus high-to-low range as percent of di open — for SPY and NVDA, wey be di root of di winning ticket. June run 21 sessions.

QueryCalibration: every month of 2026 wey dem compute identically — SPY and NVDA, open-to-close and range
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, ticker = 'SPY' AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / argMinIf(toFloat64(open), window_start, ticker = 'SPY' AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS spy_month_pct,
    round((maxIf(toFloat64(high), ticker = 'SPY' AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - minIf(toFloat64(low), ticker = 'SPY' AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)) / argMinIf(toFloat64(open), window_start, ticker = 'SPY' AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) * 100, 1) AS spy_range_pct,
    round((argMaxIf(toFloat64(close), window_start, ticker = 'NVDA' AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / argMinIf(toFloat64(open), window_start, ticker = 'NVDA' AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS nvda_month_pct,
    round((maxIf(toFloat64(high), ticker = 'NVDA' AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - minIf(toFloat64(low), ticker = 'NVDA' AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)) / argMinIf(toFloat64(open), window_start, ticker = 'NVDA' AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) * 100, 1) AS nvda_range_pct,
    uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), ticker = 'SPY') AS trading_days
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'NVDA')
  AND window_start >= toDateTime('2026-01-01 05:00:00') AND window_start < toDateTime('2026-07-01 04:00:00')
GROUP BY period_start
HAVING uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), ticker = 'SPY') >= 17
ORDER BY period_start ASC

SPY finish June -1.2% from im open inside a 5.8% range — e tight pass March (8.7%) or April (11.4%). Di real action dey one level down: NVDA close -7.4% from im June open after e travel a 19.7% range (di June 2026 market recap get di full market picture). One ticket wey win hundred times no need crash month — just one big stock wey fall well-well inside two weeks don do.

Di biggest multiples for di month

Di universe: every contract wey dey on six liquid roots wey get at least fifty June trades — 30951 contracts — price from di first June print go reach di last, from both chairs: wetin buying at di first print mark for di last, and wetin selling am for one thousand dollars of premium end up owing.

QueryDi five biggest first-print-to-last-print multiples for June, priced from both chairs (six liquid roots, 50+ trades)
The exact SQL behind every number
SELECT ticker AS contract,
    substring(ticker, -9, 1) = 'P' AS is_put,
    round(first_px, 2) AS first_price,
    round(last_px, 2) AS last_price,
    round(last_px / first_px, 1) AS multiple,
    toUInt32(floor(1000 / (first_px * 100))) AS contracts_for_a_thousand,
    round(floor(1000 / (first_px * 100)) * last_px * 100, 0) AS bought_end_value_usd,
    round(1000 * (last_px / first_px) - 1000, 0) AS sold_net_loss_usd,
    trades
FROM (
    SELECT ticker,
        toFloat64(argMin(price, (sip_timestamp, price))) AS first_px,
        toFloat64(argMax(price, (sip_timestamp, price))) AS last_px,
        count() AS trades
    FROM global_markets.options_trades
    WHERE ((startsWith(ticker, 'O:MU') AND length(ticker) = 19) OR (startsWith(ticker, 'O:NVDA') AND length(ticker) = 21) OR (startsWith(ticker, 'O:TSLA') AND length(ticker) = 21) OR (startsWith(ticker, 'O:SPY') AND length(ticker) = 20) OR (startsWith(ticker, 'O:QQQ') AND length(ticker) = 20) OR (startsWith(ticker, 'O:AAPL') AND length(ticker) = 21))
      AND sip_timestamp >= toDateTime64('2026-06-01 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
    GROUP BY ticker
    HAVING count() >= 50 AND argMin(price, (sip_timestamp, price)) > 0
)
ORDER BY multiple DESC, contract ASC
LIMIT 5

Di winner na put: O:NVDA260629P00200000, wey first print at $0.01 and last print at $4.95 — na 495x multiple. Read di symbol: na $200-strike NVDA put wey dey expire June 29. One thousand dollars at di first print buy 1000 contracts; at di last print di position mark $495000. NVDA spend di back half of June dey fall — di deep-dive for am get di slide, session by session — and dis contract na dat fall, leveraged. To know am in advance na di part wey no table fit sell you; di first print itself get forensic section for down.

Who else make di leaderboard

All five contracts na puts — di is_put column na di receipt — and even di smallest multiple top tenfold. Row two, one AAPL $240 put wey dey expire July 24, run from $0.01 go $0.34 for 34x and still dey alive for month-end (July expiry make dat last price na mark, no be settlement). Row three, one MU $100 put wey dey expire July 10, print 20x and also carry enter July. Row four and five, one TSLA $397.50 put and one QQQ $707 put wey both dey expire June 10, make 12.5x and 11.7x for di month opening slide. Five contracts, five bets on something wey dey fall.

Sell am: how one thousand dollars turn to minus half a million

If you buy di winner, your risk na exactly one thousand dollars. But if you SELL am — collect dat same thousand as premium — na di move you dey risk. Di sold_net_loss_usd column dey run every row from di seller side, e no dey look margin, assignment, or forced buy-ins. Sell 1000 contracts for $0.01 collect one thousand dollars; di last print mark di position as $495000 against di seller — net loss na $494,000. Di buyer worst case na di ticket price; di seller worst case na di move, and June biggest move deep reach five hundred tickets.

Di penny print wahala

Where di 495x come from? Di receipt wey dey below squeeze di winner whole June tape inside one forensic row: im first print, im second print, and one census of every penny print for im life.

QueryDi entry receipt: di winner first print, im second, and every penny print of im June life (one row)
The exact SQL behind every number
SELECT
    toString(toDate(min(sip_timestamp))) AS first_print_date,
    formatDateTime(toTimeZone(min(sip_timestamp), 'America/New_York'), '%H:%i:%S') AS first_print_et,
    round(anyIf(price, rn = 1), 2) AS first_price,
    toUInt64(anyIf(size, rn = 1)) AS first_print_contracts,
    countIf(price <= 0.011) AS penny_prints_in_june,
    toUInt64(sumIf(size, price <= 0.011)) AS penny_contracts_in_june,
    round(anyIf(price, rn = 2), 2) AS second_price,
    toUInt32(dateDiff('second', min(sip_timestamp), anyIf(sip_timestamp, rn = 2))) AS seconds_to_second_print,
    round(argMax(price, (sip_timestamp, price)), 2) AS month_last_price,
    round(argMax(price, (sip_timestamp, price)) / anyIf(price, rn = 2), 1) AS second_print_multiple_to_last,
    round(floor(1000 / (anyIf(price, rn = 2) * 100)) * argMax(price, (sip_timestamp, price)) * 100, 0) AS thousand_at_second_print_end_usd
FROM (
    SELECT sip_timestamp, toFloat64(price) AS price, size,
        row_number() OVER (ORDER BY sip_timestamp, price) AS rn
    FROM global_markets.options_trades
    WHERE ticker = 'O:NVDA260629P00200000'
      AND sip_timestamp >= toDateTime64('2026-06-01 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
)

Di contract no dey for di June tape until 2026-06-15. Im first print, for 09:49:30 ET, na 2 contracts for $0.01 — about two dollars of premium. Di next print, 101 seconds later, na $2.44, and di penny never print again (1 penny print, 2 contracts, all month). Di thousand-contract position wey di headline dey assume na five hundred times di size wey ever trade for dat price. Enter for di second print instead and one thousand dollars mark $1980 by di month final print — na 2x, no be 495x. Di ride from di second print — roughly one double for two weeks, for one violent path — na real and tradable. Di jackpot, as dem print am, no be.

Di ride: ten sessions from listing reach expiry

Grant di impossible fill anyhow, and hold reach di end: every session wey di ticket trade — turnover, last price, and di position mark.

QueryDi ride, session by session: daily turnover, last price, and di thousand-dollar position mark
The exact SQL behind every number
WITH (
    SELECT (ticker, first_px)
    FROM (
    SELECT ticker,
        toFloat64(argMin(price, (sip_timestamp, price))) AS first_px,
        toFloat64(argMax(price, (sip_timestamp, price))) AS last_px,
        count() AS trades
    FROM global_markets.options_trades
    WHERE ((startsWith(ticker, 'O:MU') AND length(ticker) = 19) OR (startsWith(ticker, 'O:NVDA') AND length(ticker) = 21) OR (startsWith(ticker, 'O:TSLA') AND length(ticker) = 21) OR (startsWith(ticker, 'O:SPY') AND length(ticker) = 20) OR (startsWith(ticker, 'O:QQQ') AND length(ticker) = 20) OR (startsWith(ticker, 'O:AAPL') AND length(ticker) = 21))
      AND sip_timestamp >= toDateTime64('2026-06-01 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
    GROUP BY ticker
    HAVING count() >= 50 AND argMin(price, (sip_timestamp, price)) > 0
    )
    ORDER BY last_px / first_px DESC, ticker ASC
    LIMIT 1
) AS winner
SELECT toDate(sip_timestamp) AS date,
    toUInt64(sum(size)) AS contracts_traded,
    round(sum(toFloat64(price) * toFloat64(size)) * 100 / 1e6, 2) AS day_premium_usd_m,
    round(toFloat64(argMax(price, (sip_timestamp, price))), 2) AS day_last_price,
    round(floor(1000 / (winner.2 * 100)) * toFloat64(argMax(price, (sip_timestamp, price))) * 100, 0) AS position_value_usd,
    round(100 * toFloat64(argMax(price, (sip_timestamp, price))) / max(toFloat64(argMax(price, (sip_timestamp, price)))) OVER (), 1) AS pct_of_peak
FROM global_markets.options_trades
WHERE ticker = winner.1
  AND sip_timestamp >= toDateTime64('2026-06-01 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
GROUP BY date
ORDER BY date ASC

Di contract print for all 10 sessions of im life, 2026-06-15 through expiry for 2026-06-29. Day one end for $1.4, di thousand dollars don already mark for $140000 from di penny entry. Den di ride turn: one $287000 mark for 2026-06-17 shrink go $106000 by 2026-06-22, one drawdown of nearly two-thirds. Di peak, $745000, come for 2026-06-26, one session before expiry; di final print mark $49500066.4% of di peak. Even di month best trade finish one-third below im own high. Turnover: day one trade 385 contracts all session — roughly di assumed position across di first three sessions combined — while di busiest day, 2026-06-23, do 9718 contracts and $2.86 million in premium. Size arrive only after di move don start.

Di oda side of di ledger

QueryDi full distribution: for every jackpot, thousands of near-total losses (put/call split dey inside)
The exact SQL behind every number
SELECT
    count() AS contracts_with_50_trades,
    countIf(substring(ticker, -9, 1) = 'P') AS put_contracts,
    countIf(last_px / first_px >= 100) AS up_100x_plus,
    countIf(last_px / first_px >= 10) AS up_10x_plus,
    countIf(last_px / first_px >= 10 AND substring(ticker, -9, 1) = 'P') AS up_10x_puts,
    countIf(last_px / first_px >= 10 AND substring(ticker, -9, 1) = 'C') AS up_10x_calls,
    countIf(last_px / first_px <= 0.1) AS down_90_pct_plus,
    countIf(last_px / first_px <= 0.1 AND substring(ticker, -9, 1) = 'C') AS down_90_calls,
    round(100.0 * countIf(last_px / first_px <= 0.1 AND substring(ticker, -9, 1) = 'C') / countIf(last_px / first_px <= 0.1), 1) AS down_90_call_share_pct,
    countIf(last_px <= 0.02) AS ended_at_two_cents_or_less
FROM (
    SELECT ticker,
        toFloat64(argMin(price, (sip_timestamp, price))) AS first_px,
        toFloat64(argMax(price, (sip_timestamp, price))) AS last_px,
        count() AS trades
    FROM global_markets.options_trades
    WHERE ((startsWith(ticker, 'O:MU') AND length(ticker) = 19) OR (startsWith(ticker, 'O:NVDA') AND length(ticker) = 21) OR (startsWith(ticker, 'O:TSLA') AND length(ticker) = 21) OR (startsWith(ticker, 'O:SPY') AND length(ticker) = 20) OR (startsWith(ticker, 'O:QQQ') AND length(ticker) = 20) OR (startsWith(ticker, 'O:AAPL') AND length(ticker) = 21))
      AND sip_timestamp >= toDateTime64('2026-06-01 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
    GROUP BY ticker
    HAVING count() >= 50 AND argMin(price, (sip_timestamp, price)) > 0
)
QueryDi most expensive ticket to zero: di priciest contract wey end at two cents or less
The exact SQL behind every number
SELECT ticker AS contract,
    round(first_px, 2) AS first_price,
    round(last_px, 2) AS last_price,
    toUInt32(floor(1000 / (first_px * 100))) AS contracts_a_thousand_bought,
    round(floor(1000 / (first_px * 100)) * last_px * 100, 0) AS ending_value_usd
FROM (
    SELECT ticker,
        toFloat64(argMin(price, (sip_timestamp, price))) AS first_px,
        toFloat64(argMax(price, (sip_timestamp, price))) AS last_px,
        count() AS trades
    FROM global_markets.options_trades
    WHERE ((startsWith(ticker, 'O:MU') AND length(ticker) = 19) OR (startsWith(ticker, 'O:NVDA') AND length(ticker) = 21) OR (startsWith(ticker, 'O:TSLA') AND length(ticker) = 21) OR (startsWith(ticker, 'O:SPY') AND length(ticker) = 20) OR (startsWith(ticker, 'O:QQQ') AND length(ticker) = 20) OR (startsWith(ticker, 'O:AAPL') AND length(ticker) = 21))
      AND sip_timestamp >= toDateTime64('2026-06-01 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
    GROUP BY ticker
    HAVING count() >= 50 AND argMin(price, (sip_timestamp, price)) > 0
)
WHERE last_px <= 0.02 AND floor(1000 / (first_px * 100)) >= 1
ORDER BY first_px DESC, contract ASC
LIMIT 1

Di number wey suppose dey next to di jackpot: out of 30951 liquid contracts, exactly 1 return hundredfold — and 9385 lose ninety percent or more, 8949 contracts across di full universe last print for two cents or less. If you draw blind from dis deck, di ninety-percent-loss pile go show face thousands of times for every jackpot. Di most expensive route down: O:MU260612C01350000, one $1,350-strike MU call wey expire June 12, open June for $10 and finish for $0.01, wey turn one thousand dollars into $1.

Calls or puts: which side win?

Di two tails no match. Di winning tail na pure put: every one of di 14 ten-baggers na put (14 puts, 0 calls) for one universe wey hold 14994 puts among 30951 contracts. Di losing tail nearly even: out of di 9385 near-total losses, 440346.9% — na calls, with puts dey small majority. Direction pick every big winner, but e no rescue anybody by imself: thousands of puts still land for loss pile, wrong on strike, wrong on week, or both.

Where di losses pile up

Which underlying supply di graveyard? No be di crash name.

QueryDi loss pile by root: contracts wey drop 90%+ from first print, share of di pile, and each root ten-baggers
The exact SQL behind every number
SELECT
    multiIf(startsWith(ticker, 'O:NVDA'), 'NVDA', startsWith(ticker, 'O:TSLA'), 'TSLA', startsWith(ticker, 'O:AAPL'), 'AAPL', startsWith(ticker, 'O:SPY'), 'SPY', startsWith(ticker, 'O:QQQ'), 'QQQ', 'MU') AS root,
    count() AS contracts,
    countIf(last_px / first_px <= 0.1) AS down_90_pct_plus,
    round(100.0 * countIf(last_px / first_px <= 0.1) / count(), 1) AS pct_of_root_wiped,
    round(100.0 * countIf(last_px / first_px <= 0.1) / sum(countIf(last_px / first_px <= 0.1)) OVER (), 1) AS share_of_all_down_90_pct,
    countIf(last_px / first_px >= 10) AS up_10x_plus
FROM (
    SELECT ticker,
        toFloat64(argMin(price, (sip_timestamp, price))) AS first_px,
        toFloat64(argMax(price, (sip_timestamp, price))) AS last_px,
        count() AS trades
    FROM global_markets.options_trades
    WHERE ((startsWith(ticker, 'O:MU') AND length(ticker) = 19) OR (startsWith(ticker, 'O:NVDA') AND length(ticker) = 21) OR (startsWith(ticker, 'O:TSLA') AND length(ticker) = 21) OR (startsWith(ticker, 'O:SPY') AND length(ticker) = 20) OR (startsWith(ticker, 'O:QQQ') AND length(ticker) = 20) OR (startsWith(ticker, 'O:AAPL') AND length(ticker) = 21))
      AND sip_timestamp >= toDateTime64('2026-06-01 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-01 00:00:00', 9)
    GROUP BY ticker
    HAVING count() >= 50 AND argMin(price, (sip_timestamp, price)) > 0
)
GROUP BY root
ORDER BY down_90_pct_plus DESC, root ASC

QQQ supply di biggest pile: 2923 near-total losses — 31.1% of di whole pile — with 35.7% of im liquid contracts wipe. Add SPY own 24.7% and di index roots hold over half di graveyard. Di two gentlest wipe rates belong to NVDA and AAPL (21.8% and 21.8%) — di first of those na NVDA, di root under di month biggest winner. Di pile grow fattest where premium sit still. Di flip side, same table: QQQ produce 9 of di month 14 ten-baggers; SPY, with 2319 contracts for di pile, produce 0.

Wetin dis table dey teach (and wetin e no fit teach)

Four lessons dey inside. Convexity na real thing: one cheap out-of-the-money option fit multiply like crazy wen di underlying move sharp-sharp — na exactly why lottery tickets dey trade for pennies. Headline multiples need forensics: June own 495x dey rest on one two-lot print; di tradable ride na double. Di distribution na di price of convexity: 14 ten-baggers dey siddon beside 9385 near-wipeouts (di market makers explainer dey cover who dey sell di tickets). And you no fit trade hindsight: di winning ticket no dey for June 1 — e first print for June 15 — and to buy am mean say you know, dat morning, di direction and timing of di two weeks wey follow. Dis page dey measure wetin June contain. E no dey suggest wetin July go be.

FAQ

Which options trade bin the best for June 2026?

We measure am from first print go last print across six liquid roots. Na $200-strike NVDA put wey expire June 29, 2026: e move from $0.01 go $4.95, wey be 495x multiple — e rest on top two-lot penny first print (di next print na $2.44).

You fit lose pass wetin you invest for options trading?

If you dey buy options, no: di buyer fit lose at most di premium wey e pay. If you dey sell options, yes — June record show one seller wey collect one thousand dollars premium finish $494,000 underwater for di final print.

Why most cheap options dey expire worthless?

Cheap option dey price one outcome wey di market no see as likely: big move before deadline wey near. Most months no dey bring many of such moves, and most tickets dey decay. For June 2026, 9385 out of 30951 contracts wey dem trade actively lose at least ninety percent of dia first-print value; 8949 last trade na two cents or less.

True-true trader fit don catch di 495x?

Almost certainly no for di printed size: na only 2 contracts ever trade for di $0.01 entry, and di price stand for $2.44 within 101 seconds. One thousand dollars for di second print mark around $1980 for di final print — na strong trade, but life-changing multiple na only for hindsight.

Data notes

Full data notes
  • Di seller math no dey look margin, assignment, and forced liquidation for design: real short position for don close or dem for don assign am before di last print. E dey measure di move, no be brokerage statement.
  • Hindsight, no be advice. Every figure na after di fact dem compute am from stored trades.
  • First print to last na measuring stick, no be execution report; na why dem label dis ones multiples, no be returns.
  • Di penny caveat dey generalise: any row wey get one-cent first price (di winner; di AAPL runner-up) dey carry di same fragility.
  • Universe: six roots — MU, NVDA, TSLA, SPY, QQQ, AAPL — standard OCC symbols only (dem exclude adjusted contracts by length), ≥50 June trades, nonzero first print.
  • Expiry/strike/type parse from di OCC symbol; premium math dey assume di 100-share multiplier.

How We Do Am

  • Period na June 1–30, 2026; timestamps dey store for UTC, we filter dem with raw UTC bounds. The calibration panel na the baseline block and e deliberately look back across 2026, computed the same way.
  • For each contract: first price na the earliest June SIP timestamp trade, last na the latest one; if tie dey, we break am deterministically by price. Multiples na last over first, computed inside the query.
  • The daily-path panel dey re-derive the winner from the same ranked scan for every generation; the entry receipt dey pin am by symbol, with bounds wey go hold the post if the two no gree.
  • Generation na batch-only through the gated read-only path; the page no dey ever query live. Warehouse state as of July 12, 2026.

Every panel na one stored object — chart, table, and SQL. Check the ledger yourself for Strasmore terminal.

#options#hindsight#convexity#risk#deepdive