TQTradingQuery
← Explore

Ask a historical question

Index futures

Ask in plain English about how index futures have behaved. Code is written for your question, run on real price bars, and checked several independent ways before you see a number. This is one finished example.

The question

After days when the regular session (9:30-16:00 ET) closed down more than 1% from the prior regular-session close, how often did the next regular session close higher than the prior close, and what was the average next-day return?

MNQ

2019-06-01 to 2026-09-06

335

sample size

% next day up

56.7%

avg next day return

+0.28%

What this means

This looked at MNQ (a Nasdaq-100 futures contract) between June 2019 and September 2026, focusing on the 335 trading days where the regular trading session (9:30am-4pm ET) closed down more than 1% from the prior day's close. Of those 335 sharp down-days, the following regular session closed higher than the prior close about 56.7% of the time - so a bit more often than not, but far from a guarantee. On average across all 335 cases, the next session's return was about +0.28% (0.0028 as a decimal), meaning the typical bounce, when averaged with the losses, was modest. This is purely a description of what happened in this historical window, not a forecast of what will happen after future down days.

  • 20 of 25 generated code attempts ran in the sandbox and passed an automated review; 6 of them produced the same set of measures, and the figures above are the median of those. Agreement between attempts lowers the chance of a one-off coding slip -- it does not prove the code matches what you meant, so treat the definitions and the code below as the source of truth. This is a one-off calculation, not a permanent fixture.
Show the code

The actual analysis code behind this answer, read-only.


et = to_et(bars)
rth = rth_session(et)
dates = trading_date(rth)
rth = rth.copy()
rth['date'] = dates

daily_close = rth.groupby('date')['close'].last().sort_index()
daily_ret = daily_close.pct_change()

# days where session closed down more than 1% from prior close
down_days = daily_ret < -0.01

# next day return relative to that day's close
next_ret = daily_ret.shift(-1)

mask = down_days & next_ret.notna()
events = next_ret[mask]

sample_size = int(mask.sum())

if sample_size > 0:
    pct_up = float((events > 0).mean())
    avg_ret = float(events.mean())
else:
    pct_up = None
    avg_ret = None

result = {
    "sample_size": sample_size,
    "pct_next_day_up": pct_up,
    "avg_next_day_return": avg_ret
}

This tool provides historical statistical information only. It is not investment advice, and past performance does not indicate future results. Trading involves risk of loss.

Instrument
MNQ (Micro Nasdaq-100 futures), back-adjusted continuous series
Data window
Jun 1, 2019 to Sep 6, 2026
Snapshot
Sep 24, 2026
Cross-check
6 of 20 completed attempts (25 requested) measured the same things

For context: across all 1,844 regular sessions in the same window, this market closed up on 56.4% of days, averaging 0.09% per day. The observations here are not independent (sharp drops cluster in volatile stretches such as 2020 and 2022), and a figure near the all-days rate says nothing special about days after drops — a number alone is not an edge. Agreement between attempts checks that the code is consistent, not that it measures what you meant — read the definitions and the code above. Futures series are stitched across contract rolls; percent moves that span a roll are approximate.

More answers computed the same way

Each page shows its sample size, window, methodology, and the code.

Ask your own question

Covers Micro E-mini index futures (MNQ, MES, MYM) from 2019 onward, on 1-minute bars. Stocks and ETFs are not covered by this tool yet. You confirm the exact question and its credit cost before anything is charged.