Volume · MNQ
Does a low-volume day on MNQ tend to precede a large range day
77
n low volume days
n low volume days
77
n other days
180
low vol threshold
1,165,555.4
high range threshold
428.05
avg range after low volume
299.48
avg range after other
397.78
large range rate after low volume
18.2%
large range rate after other
35.0%
correlation prevvol range
0.38
Methodology
Analysis code was generated by an AI model up to 25 times, run in a sandbox against real MNQ 1-minute bars from 2025-08-30 to 2026-09-06, 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
et = to_et(bars)
rth = rth_session(et)
rth = rth.copy()
rth['date'] = trading_date(rth)
daily = rth.groupby('date').agg(
high=('high','max'),
low=('low','min'),
volume=('volume','sum')
)
daily['range'] = daily['high'] - daily['low']
daily = daily.dropna()
daily = daily.sort_index()
# shift volume to previous day, align with next day's range
daily['prev_volume'] = daily['volume'].shift(1)
daily['prev_range'] = daily['range'].shift(1)
valid = daily.dropna(subset=['prev_volume','range'])
if len(valid) >= 5:
low_vol_thresh = valid['prev_volume'].quantile(0.3)
high_range_thresh = valid['range'].quantile(0.7)
low_vol_days = valid[valid['prev_volume'] <= low_vol_thresh]
other_days = valid[valid['prev_volume'] > low_vol_thresh]
low_vol_next_range_mean = float(low_vol_days['range'].mean())
other_next_range_mean = float(other_days['range'].mean()) if len(other_days) > 0 else None
low_vol_large_range_rate = float((low_vol_days['range'] >= high_range_thresh).mean())
other_large_range_rate = float((other_days['range'] >= high_range_thresh).mean()) if len(other_days) > 0 else None
corr = float(valid['prev_volume'].corr(valid['range']))
result = {
'sample_size': int(len(valid)),
'n_low_volume_days': int(len(low_vol_days)),
'n_other_days': int(len(other_days)),
'low_vol_threshold': float(low_vol_thresh),
'high_range_threshold': float(high_range_thresh),
'avg_range_after_low_volume': low_vol_next_range_mean,
'avg_range_after_other': other_next_range_mean,
'large_range_rate_after_low_volume': low_vol_large_range_rate,
'large_range_rate_after_other': other_large_range_rate,
'correlation_prevvol_range': corr,
}
else:
result = {
'sample_size': int(len(valid)),
'n_low_volume_days': 0,
'n_other_days': 0,
'low_vol_threshold': None,
'high_range_threshold': None,
'avg_range_after_low_volume': None,
'avg_range_after_other': None,
'large_range_rate_after_low_volume': None,
'large_range_rate_after_other': None,
'correlation_prevvol_range': 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.
Related
- MNQ: How often does a 5-minute opening range breakout on MNQ continue in the same direction for the rest of the session
- MNQ: How does MNQ react when price touches the prior day's high -- does it break through or bounce
- MNQ: Is MNQ's average daily range on Fridays different from the rest of the week
- MNQ: How often does a gap up on MNQ get filled the same day
This is historical statistical information only. It is not investment advice, and past performance does not indicate future results. Trading involves risk of loss.