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
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)
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 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.
Related
This is historical statistical information only. It is not investment advice, and past performance does not indicate future results. Trading involves risk of loss.