What a Fifteen-Minute Bar Forgets
Suneet Malhotra
Jun 16, 2026
A bar is the first lie my data tells me, and it is a useful one.
My engine reads the market in fifteen-minute bars, two hundred of them at a time, and on that window it computes everything it believes: a twenty- and fifty-period moving average for trend, a fourteen-period RSI for whether the move is stretched, a MACD for momentum, a volume ratio for conviction. Every signal it fires is a function of those bars. Which means every signal it fires is a function of a summary, and the summary has already thrown away most of what happened.
A bar keeps four numbers and discards the rest
A fifteen-minute bar records four prices and a volume: where the period opened, the high it touched, the low it touched, where it closed, and how much traded. That is five numbers standing in for fifteen minutes of continuous quoting, hundreds or thousands of prints. Everything between those corners, the order events happened in, the path the price took to get from open to close, is gone the moment the bar closes.
Here is the part that took me too long to take seriously. Two bars with identical open, high, low, and close can describe completely different fifteen minutes. One drifted smoothly upward, a clean trend a human would lean into. The other spiked to the high, collapsed to the low, and clawed back to the same close, a violent chop a human would stay away from. Same four numbers. Identical contribution to my moving average, my RSI, my MACD. My indicators cannot tell the two apart, because by the time they read the bar, the only thing that distinguished them, the path, no longer exists in the data.
The signal is always at least one bar late
There is a second cost, and it is about time rather than shape. My long condition needs the fast average above the slow one, RSI not overbought, the MACD histogram positive, and volume above one-point-two times its average. Those are evaluated on a closed bar, because an open bar is still changing and its indicators are not final. So the earliest I can act on a condition that became true inside a bar is the open of the next one.
That puts a floor under my latency equal to the bar period. A condition that turns true thirty seconds into a bar waits out the remaining fourteen and a half minutes before I am allowed to believe it. In a slow tape that is invisible. In a fast move it is the entire difference between an entry and a chase, because the move that tripped the signal is the same move that has already repriced the thing I wanted to buy.
The volume gate makes this concrete. Volume above one-point-two times average sounds like a real-time conviction check. It is not. The average is computed over completed bars, and the current bar's volume is only final when the bar closes. Mid-bar the ratio is half-formed and meaningless. So the conviction filter is structurally a close-only gate, welded to the same one-bar delay as everything else.
Smaller bars are not the fix
The obvious reaction is to shrink the bar. Go to five minutes, or one, and the path-blindness narrows and the latency floor drops. But a smaller bar is a noisier bar. Fewer prints per bar means the open and close are jumpier, moving-average crossovers fire and reverse on noise, RSI whips between extremes, and the volume ratio swings on thin samples. You trade staleness for false signals. That is a bias-variance tradeoff wearing market-structure clothing: the long bar is biased, smoothing away detail and arriving late; the short bar is high-variance, fast but twitchy and prone to firing on nothing.
Fifteen minutes is a point on that curve. It is not right or wrong. It is a choice that buys smoothness and pays for it in path-blindness and a fifteen-minute latency floor. The mistake is not the choice. The mistake is forgetting I made it, and then reading my indicators as if they describe the market rather than a deliberately lossy compression of it.
Read the summary as a summary
So the rule I hold now is small. A bar is not a price. It is a paragraph summarizing fifteen minutes of an argument, and my indicators only ever read the paragraph, never the argument. Every conclusion they reach inherits whatever the summary dropped: the path, the order of events, anything that happened and reversed inside the window.
That does not mean distrust the indicators. It means know exactly what they are blind to, so I am not surprised on the day the blindness costs me. The smooth trend and the violent chop print the same bar, and my engine will treat them as the same setup. Knowing that in advance is the difference between a tradeoff I chose and a hole I fell into.
Share this post
You Might Also Like
The Two-Point Window My Trailing Stop Lives In
My engine runs a trailing stop to let winners run and a 5% take-profit to cap them. Read the two rules as one system and the trailing stop has a two-point window it can never leave.
Quantitative TradingThe Ninety Minutes My Engine Sits Out
My stock engine refuses to open any new position after 2:30 PM ET. It surrenders the most active hour of the day on purpose. Here is the arithmetic behind the refusal.
AI & AutomationThe One Step I Never Hand to a Subagent
My content routine dispatches a fleet of subagents to gather, then hands none of them the draft. A fleet parallelizes retrieval. It cannot parallelize a voice.
Career & Best PracticesThe Numbers I Used to Ask You to Trust
My April posts reported measured numbers you had to take on faith. My recent ones derive every figure from public config. The change was not discipline. It was topology.
Latest Blog Posts
The Two-Point Window My Trailing Stop Lives In
My engine runs a trailing stop to let winners run and a 5% take-profit to cap them. Read the two rules as one system and the trailing stop has a two-point window it can never leave.
The One Step I Never Hand to a Subagent
My content routine dispatches a fleet of subagents to gather, then hands none of them the draft. A fleet parallelizes retrieval. It cannot parallelize a voice.
The Ninety Minutes My Engine Sits Out
My stock engine refuses to open any new position after 2:30 PM ET. It surrenders the most active hour of the day on purpose. Here is the arithmetic behind the refusal.
Related Tools & Demos
Multi-Model LLM Harness
One interface to call any AI model — capability routing, fallback chains, budgets, circuit breakers, and a quality feedback loop. A practical architecture pattern write-up.
Automated Trading System
Multi-engine trading platform with real-time risk management, regime-based strategy selection, and automated order execution.
View Source Code →Personal Health Analytics
Multi-modal health data platform integrating wearables, lab results, and lifestyle tracking with predictive habit modeling.
View Source Code →
Stay in the Loop
Get weekly insights on AI-driven QA, engineering leadership, and automation strategies.
No spam, ever. Unsubscribe anytime.