Order flow indicators: delta, footprint and what a backtest needs
Order flow indicators split traded volume into aggressive buying and selling, by bar and by price. Testing them properly needs tick data that records each trade's side, because OHLC bars throw that information away.
By Soren Huang · Published · updated · Editorial policy
Contents
- What does delta measure in order flow trading?
- What does a footprint chart show?
- What does volume profile show?
- What order flow tools do NinjaTrader and ATAS offer?
- What data does an order flow backtest need?
- Why can't a bar-based backtest reproduce order flow signals?
- How do you backtest an order flow signal properly?
- Do order flow indicators predict direction?
- Frequently asked questions
- References
Order flow indicators in platforms such as NinjaTrader and ATAS split traded volume into aggressive buying and selling. Delta is the difference between the two, and a footprint shows that split at each price inside a bar. Testing delta or footprints needs tick data that records each trade's side, because OHLC bars do not keep it.
What does delta measure in order flow trading?
Delta measures which side was in a hurry, not which side was right. Every trade has a buyer and a seller. One of them was usually waiting with a limit order, and the other crossed the spread with a market order. Order flow trading is the practice of reading those aggressive orders as they print, instead of reading only the price that resulted. Order flow data is harder to get than price, which is why many traders begin with RSI, built from price alone.
Order flow is the stream of individual trades and orders that builds each bar, including the price, size and side of every trade. A trade "at the ask" means an aggressive buyer lifted a resting sell order. A trade "at the bid" means an aggressive seller hit a resting buy order.
Delta is the volume traded at the ask minus the volume traded at the bid, over one bar or another period. A delta volume indicator plots that number for each bar. Cumulative delta is a running total of bar deltas, usually reset at the start of each session. For example, a bar with more contracts bought at the ask than sold at the bid has a positive delta; the hypothetical footprint below works through one such bar.
Platforms label each trade as a buy or a sell in one of two ways. Some exchange feeds mark the aggressor side of each trade, and the platform uses that flag. Otherwise the platform compares the trade price with the best bid and ask at that moment. The two methods can give different labels for the same trade, so two platforms can show slightly different delta for the same bar.
What does a footprint chart show?
A footprint chart shows the inside of a bar: how much traded at each price, and on which side. Think of an ordinary candle as a receipt that lists only the total. The footprint is the itemised receipt.
A footprint chart is a bar chart in which every price level inside the bar shows its own volume, usually split into volume at the bid and volume at the ask. Many footprint chart indicators also show the delta per price level and highlight imbalances. An imbalance is a price level where aggressive volume on one side is much larger than on the other. Many platforms measure it diagonally: they compare the ask volume at one price with the bid volume one tick below, against a ratio the user sets.
Hypothetical example
One 5-minute bar on a contract that moves in steps of 0.25 points. The footprint records volume at each price:
| Price | Sold at bid | Bought at ask | Delta |
|---|---|---|---|
| 101.00 | 12 | 5 | −7 |
| 100.75 | 30 | 45 | +15 |
| 100.50 | 60 | 90 | +30 |
| 100.25 | 80 | 70 | −10 |
| 100.00 | 25 | 10 | −15 |
| Bar total | 207 | 220 | +13 |
An ordinary bar file stores only open 100.25, high 101.00, low 100.00, close 100.50 and volume 427. A second bar could have the same five numbers with 290 sold at the bid and 137 bought at the ask. That bar has a delta of −153. Nothing in the bar record tells the two bars apart.
What does volume profile show?
Volume profile shows where trading happened, not who started it. It is a sideways histogram of volume at each price over a chosen period, such as one session or one week. The volume profile indicator page covers how it is built. Two terms matter for testing. The point of control is the price with the most volume. The value area is the price range that holds a set share of the volume, commonly about 70%.
Volume profile sits halfway between bar data and true order flow. You can approximate it from fine bars by spreading each bar's volume over its range. That approximation is close enough for many rule tests. An exact profile, or a profile split into bid and ask volume, needs tick data.
What order flow tools do NinjaTrader and ATAS offer?
Both platforms build the same three core displays from tick data and add their own trade and order book views. The names differ more than the ideas.
| Display | NinjaTrader 8 name | ATAS name |
|---|---|---|
| Footprint | Order Flow Volumetric Bars | Cluster chart |
| Delta over time | Order Flow Cumulative Delta | Cumulative delta indicator |
| Volume by price | Order Flow Volume Profile | Volume profile indicators |
| Resting orders | Order Flow Market Depth Map | Order book (DOM) views |
NinjaTrader also offers an order flow VWAP and a trade detector that marks large trades. ATAS adds a tape of individual trades and filters for large trades. The order book views show resting limit orders, which have not traded yet. That is a different kind of data from delta and footprints, which describe trades that already happened.
For order flow in NinjaTrader on historical charts, the platform needs historical tick data from your data provider. Its Tick Replay setting rebuilds each historical bar trade by trade, so indicators that depend on the bid/ask split can be calculated on past bars and used in strategy tests.
What data does an order flow backtest need?
An order flow backtest needs data at least as detailed as the signal. In practice, that means tick data with the side of every trade. Tick data is a record of every trade, with its time, price and size. Some tick data also carries the best bid and ask at that moment, or an aggressor flag. Without one of those, a trade cannot be labelled as a buy or a sell.
| Data you have | What it can rebuild | What it cannot rebuild |
|---|---|---|
| OHLCV bars (open, high, low, close, volume) | Price-based indicators, bar volume, an approximate volume profile | Delta, footprints, imbalances |
| Tick data: price and size only | Exact volume at each price | True delta (only an estimate from whether each trade ticked up or down) |
| Tick data with bid/ask or an aggressor flag | Delta, cumulative delta, footprints, imbalances | Resting orders that never traded |
| Recorded order book depth | Depth maps and signals based on resting orders | — |
Tick data brings its own quality checks. Some feeds report one large aggressive order as several separate prints, because it filled against several resting orders. Other feeds group those fills into one trade. Trade counts and "large trade" filters therefore change with the data source. Timestamps, session boundaries and contract rolls matter even more than with bars. The guide to backtest data quality: gaps, bad ticks, time zones and rolls lists what to check.
Why can't a bar-based backtest reproduce order flow signals?
A bar-based backtest cannot reproduce order flow signals because the information was deleted when the bar was made. Turning trades into a bar is like boiling a soup down to a stock cube. You keep the weight and the flavour, but you cannot pull the original vegetables back out.
An OHLCV bar keeps five numbers. It drops the side of every trade, the volume at each price and the order in which trades happened inside the bar. The worked example above shows two bars with identical OHLCV and opposite delta. Any rule that says "enter when delta is above X" or "enter after three stacked ask imbalances" needs exactly the information the bar removed.
Estimates do not close the gap. A common shortcut labels a trade as a buy if it printed higher than the previous trade, and as a sell if it printed lower. That shortcut needs tick data, and it still misclassifies many trades. Applied to bars instead of ticks, the guess gets rougher still. A strategy tested on estimated delta is a test of the estimate, not of the indicator you watch live.
How do you backtest an order flow signal properly?
You backtest an order flow signal properly by rebuilding it exactly as you see it live, from tick data, and by filling orders as the market would have filled them. Go through the steps below in order:
- Write the signal as a rule with numbers. "Strong buying" is not testable. "Bar delta above +200 and the close in the top quarter of the bar" is testable.
- Get tick data with bid/ask or aggressor information for the whole test period, from the same source you will use live if possible.
- Use the same settings as your live chart: the same bar type, the same tick grouping per footprint row, the same session reset for cumulative delta and the same imbalance ratio.
- Act only on information that existed. A footprint bar is final only when the bar closes. A signal read from the finished bar can trade from the next trade after the close, not at the bar's own close. The article on look-ahead bias in backtests shows how to check this.
- Model fills honestly. Order flow traders often use limit orders at a level. Count a limit order as filled only when price trades through it, not when price merely touches it. Your order waits in a queue behind other orders at that price.
- Include commission and slippage on every trade. Order flow strategies tend to trade often and aim for small moves per trade, so costs take a large share of the result.
- Fix your thresholds before you look at later data, then test on a period the rule has not seen.
Step 7 matters because order flow rules have many dials: delta thresholds, imbalance ratios, how many stacked levels to require, how large a "large trade" is. Each dial you tune is one more chance to fit noise. If you try many settings and keep the best one, the winning result is likely to be inflated (Harvey & Liu, 2015; White, 2000). For the price-bar side of such a rule, the strategy validation in AlphaPrime (Valynox) runs walk-forward analysis against your own thresholds, so tuned dials are judged on windows they never saw.
Do order flow indicators predict direction?
No. Order flow indicators describe trades that already happened, and they do not tell you where price goes next. Positive delta says aggressive buyers traded more than aggressive sellers. It does not say the buyers will win. Large passive sellers can absorb all that buying with limit orders, and price can still fall.
This is why the same pattern gets opposite readings. Traders call rising delta with flat price "absorption" when price later drops, and "accumulation" when price later rises. Only a rule tested on enough history tells you which reading held more often, and by how much after costs.
When true order flow data is not available for a long history, many traders split the work in two. First they research bar-based rules on long histories, using price, bar volume and approximations such as a bar-built volume profile. Then they use footprint reading as discretionary context, or they test an order flow filter separately on the shorter tick history. AlphaPrime supports the first part. Its strategy generation turns research ideas into testable rules with parameter ranges and entry and exit conditions, evaluated on your own historical bar data. Finished strategies can be exported as source code to NinjaTrader (NinjaScript) and the other platforms on the supported platform export list. There, an order flow filter can be added and tested on tick data.
What this means if you use AlphaPrime: use it for the rules your bar data can express, where AlphaPrime's backtesting evaluates each candidate with fees, slippage, next-bar execution and trading sessions. Test any delta or footprint condition on tick data in the platform where you trade it.
Frequently asked questions
What is the difference between delta and cumulative delta?
Delta is the volume bought at the ask minus the volume sold at the bid within one bar. Cumulative delta adds those bar values together over time, usually starting from zero at each session open. Delta shows the balance inside one bar, and cumulative delta shows the running balance across the session.
Can you backtest a footprint chart indicator in NinjaTrader?
Yes, if historical tick data is available from your data provider. NinjaTrader's Tick Replay setting rebuilds historical bars trade by trade, so footprint-based values can be calculated on past data. Without tick data, the platform has no bid/ask split to rebuild the footprint from.
Is volume profile an order flow indicator?
Volume profile is often grouped with order flow tools, but it shows how much traded at each price, not which side was aggressive. It can be approximated from fine bar data, while delta and footprints cannot. A volume profile split into bid and ask volume needs tick data.
Does a high positive delta mean price will go up?
No. Positive delta only means aggressive buyers traded more contracts than aggressive sellers in that period. Passive sellers with limit orders can absorb that buying, and price can fall anyway. Any directional meaning has to be tested on history, after costs.
What data do I need for order flow trading backtests?
You need tick data that records every trade's price and size, plus either the best bid and ask at that moment or an aggressor flag from the exchange feed. Signals based on resting orders also need recorded order book depth. OHLCV bars are not enough for delta, footprint or imbalance rules.
References
- Harvey, C. R., & Liu, Y. (2015). Backtesting. The Journal of Portfolio Management, 42(1), 13–28.
- White, H. (2000). A Reality Check for Data Snooping. Econometrica, 68(5), 1097–1126.

