TQTradingQuery

Volume · MES

Does a high-volume day on MES tend to see continued high volume the next day

841,354

median daily volume

n=2582025-08-31 to 2026-09-07

median daily volume

841,354

avg next day volume after high day

1,043,850.88

avg next day volume after low day

736,942.13

corr today vol next day vol

0.54

prob next day high given today high

0.69

prob next day high given today low

0.31

num high vol days

129

num low vol days

130

Methodology

Computed by independently generating and running analysis code against real MES 1-minute bars from 2025-08-31 to 2026-09-07, 25 separate times in parallel, then taking the answer the largest group of independent attempts agreed on. The exact code is shown below.

Show the code

bars_et = to_et(bars)
rth = rth_session(bars_et)
rth = rth.copy()
rth['trading_date'] = trading_date(rth)

daily_vol = rth.groupby('trading_date')['volume'].sum().sort_index()

n = len(daily_vol)
if n < 3:
    result = {"sample_size": 0}
else:
    median_vol = daily_vol.median()
    high_vol_mask = daily_vol > median_vol

    # shift to get next day's volume
    next_day_vol = daily_vol.shift(-1)

    valid = high_vol_mask & next_day_vol.notna()
    high_days_next = next_day_vol[valid]

    low_vol_mask = ~high_vol_mask
    valid_low = low_vol_mask & next_day_vol.notna()
    low_days_next = next_day_vol[valid_low]

    avg_next_after_high = float(high_days_next.mean()) if len(high_days_next) > 0 else None
    avg_next_after_low = float(low_days_next.mean()) if len(low_days_next) > 0 else None

    # correlation between day's volume and next day's volume
    combined = pd.DataFrame({'vol': daily_vol, 'next_vol': next_day_vol}).dropna()
    corr = float(combined['vol'].corr(combined['next_vol'])) if len(combined) > 1 else None

    # probability that next day is also high volume, given today is high volume
    next_high_mask = next_day_vol > median_vol
    valid_pairs = high_vol_mask & next_day_vol.notna()
    prob_next_high_given_high = float(next_high_mask[valid_pairs].mean()) if valid_pairs.sum() > 0 else None

    valid_pairs_low = low_vol_mask & next_day_vol.notna()
    prob_next_high_given_low = float(next_high_mask[valid_pairs_low].mean()) if valid_pairs_low.sum() > 0 else None

    result = {
        "sample_size": int(len(combined)),
        "median_daily_volume": float(median_vol),
        "avg_next_day_volume_after_high_day": avg_next_after_high,
        "avg_next_day_volume_after_low_day": avg_next_after_low,
        "corr_today_vol_next_day_vol": corr,
        "prob_next_day_high_given_today_high": prob_next_high_given_high,
        "prob_next_day_high_given_today_low": prob_next_high_given_low,
        "num_high_vol_days": int(high_vol_mask.sum()),
        "num_low_vol_days": int(low_vol_mask.sum()),
    }
  • Generated and independently re-derived 25 times, then checked for logical consistency, before being shown to you -- the figures above are the answer the largest number of those independent attempts agreed on. Still a generated, one-off calculation, treat it as a rough, one-off analysis rather than a permanent fixture.

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