TQTradingQuery

Ranges · MES

Does a narrow daily range day on MES tend to be followed by a wider range day

128

n narrow days

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

n narrow days

128

n wide days

130

median daily range

58.75

avg next day range after narrow

56.27

avg next day range after wide

77.74

frac narrow followed by wider

0.69

corr range to next range

0.32

Methodology

Analysis code was generated by an AI model up to 25 times, run in a sandbox against real MES 1-minute bars from 2025-08-31 to 2026-09-07, and reviewed automatically. Attempts that computed the same set of measures were grouped, and the figures shown are the median of the largest group. Agreement between attempts lowers the chance of a one-off coding slip; it does not prove the code matches the question, so the exact code is shown below.

Show the code

bars_et = to_et(bars)
rth = rth_session(bars_et)
td = trading_date(rth)

daily = rth.groupby(td).agg(high=('high','max'), low=('low','min'))
daily['range'] = daily['high'] - daily['low']
daily = daily.dropna()

median_range = daily['range'].median()
daily['narrow'] = daily['range'] < median_range

# next day range
daily['next_range'] = daily['range'].shift(-1)
daily = daily.dropna(subset=['next_range'])

narrow_days = daily[daily['narrow']]
wide_days = daily[~daily['narrow']]

avg_next_after_narrow = narrow_days['next_range'].mean() if len(narrow_days) > 0 else None
avg_next_after_wide = wide_days['next_range'].mean() if len(wide_days) > 0 else None

# fraction of narrow days followed by a wider day than themselves
if len(narrow_days) > 0:
    followed_wider = (narrow_days['next_range'] > narrow_days['range']).mean()
else:
    followed_wider = None

corr = daily['range'].corr(daily['next_range']) if len(daily) > 1 else None

result = {
    'sample_size': int(len(daily)),
    'n_narrow_days': int(len(narrow_days)),
    'n_wide_days': int(len(wide_days)),
    'median_daily_range': float(median_range) if pd.notna(median_range) else None,
    'avg_next_day_range_after_narrow': float(avg_next_after_narrow) if avg_next_after_narrow is not None else None,
    'avg_next_day_range_after_wide': float(avg_next_after_wide) if avg_next_after_wide is not None else None,
    'frac_narrow_followed_by_wider': float(followed_wider) if followed_wider is not None else None,
    'corr_range_to_next_range': float(corr) if corr is not None and pd.notna(corr) else None,
}
  • Generated by an AI model up to 25 times, run in a sandbox, and reviewed automatically; the figures above are the median of the largest group of attempts that computed the same measures. Agreement between attempts lowers the chance of a one-off coding slip -- it does not prove the code matches the question, so check the definition and code. A one-off calculation, not 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.