Ease of Movement Indicator: Formula, Settings and How to Read It
Ease of Movement, introduced by Richard Arms, divides the shift of a bar's midpoint by the volume required per unit of range to produce it. Large positive values describe price drifting upward cheaply; values near zero describe price paid for with heavy volume inside a narrow range.
Senzoukria · Indicators · Updated September 2026
Ease of Movement ships with the Senzoukria desktop app, in the Volume group of the indicator catalogue. It is drawn in its own panel below the chart.
What Ease of Movement measures
Three inputs are combined per bar: the distance between the current and previous midpoints, the bar's range, and its volume. The box ratio — volume divided by range — is the cost term, and the raw value is the distance divided by that ratio, then averaged over 14 bars by default. A bar with zero volume produces a box ratio of zero, and a bar whose high equals its low leaves the box ratio undefined; both cases yield no value at all, as does the first bar, which has no previous midpoint. The moving average propagates those gaps instead of shortening its own window: a window containing a gap yields no value, so the period you set is always the period actually used.
The formula, as implemented
This is not a description of how the indicator is usually defined elsewhere — it is what the shipped code computes, documented next to the implementation:
Ease of Movement (Arms, 1980) : distance = (high + low)/2 − (high[−1] + low[−1])/2 box ratio = volume / (high − low) raw = distance / box ratio EOM = SMA_N(raw) (défaut N = 14) POURQUOI : Arms mesure le COÛT du mouvement. Un mid-price qui grimpe sur un petit volume et un range large = le prix « glisse », l'EOM est fortement positif ; le même déplacement payé par un volume massif dans un range étroit donne un EOM proche de zéro — le marché a résisté. C'est l'effort/résultat d'Arms, du côté OHLCV (cf. `effort-vs-result`, tape.ts, qui le mesure du côté volume/ticks). DÉNOMINATEUR NUL → null, dans les DEUX cas où il se présente, et sans exception (aucun cumul en jeu) : • volume = 0 → box ratio = 0 → division par zéro ; • high = low → box ratio indéfini (0 au dénominateur du box ratio). Première barre (pas de mid précédent) → null. Le lissage `smaNullable` PROPAGE les trous : une fenêtre contenant un null rend null, plutôt que de moyenner sur une période effective plus courte que celle annoncée. Défaut N = 14 (Arms). N = 1 rend le brut (SMA1 = identité).
How to read it
- Positive readings mean the midpoint rose across the window and negative that it fell. The magnitude speaks to how easily, not how far.
- An advance accompanied by a reading hovering near zero means the volume required per point was high — the move was contested rather than free.
- Sustained readings on the same side of zero describe a market that keeps moving one way without heavy resistance; that is a statement about the bars already printed.
- Values are in instrument-specific units. Judge them against their own recent range, never against a threshold copied from another symbol.
- A single wide, quiet bar can produce an outlier that dominates the average for the following bars; look at the raw bar before trusting the smoothed value.
Parameters and defaults
The SMA period defaults to 14, Arms's setting, and accepts 1 to 200. Setting it to 1 plots the raw per-bar value, which is noisy because the box ratio can become very small on wide quiet bars. Longer periods smooth the series and, since gaps propagate, also make it more likely that a stretch containing missing bars produces no plot at all. The default colour is yellow (#fdd835).
| Parameter | Type | Default | Range |
|---|---|---|---|
| SMA period | number | 14 | 1 – 200 |
What it does not show
Ease of Movement works on the midpoint and total volume — it never sees the close, the aggressor side, or where inside the range the volume traded. Its raw form is numerically unstable when the range is wide and the volume small, producing outliers that skew the average afterwards. Bars without trades break the series by design, so illiquid instruments and overnight hours leave the pane empty. Instruments with different tick and contract sizes produce values that cannot be compared directly.
Using it in Senzoukria
Add it from the Indicators panel of any footprint chart or candle chart. It runs on futures data from Rithmic or Databento and on crypto pairs from Binance and Bybit, on the same engine — the calculation does not change with the venue, only the data feeding it does. Market data subscriptions are billed by the provider, separately from the app.
Related indicators
- Volume — Volume
- Buy/Sell Volume — Volume
- Average Trade Size — Volume
- Volume ROC % — Volume
- Relative Volume — Volume
- Trade Count — Volume
See the full indicator library, or start with the order flow guide if you are new to reading aggression, delta and absorption.
Frequently asked questions
- What does Ease of Movement actually measure?
- It measures how much volume was needed to move the bar's midpoint. The midpoint shift is divided by volume per unit of range, so the same price displacement yields a large value when it happened on light volume and a small one when it took heavy volume. It is a cost-of-movement reading, not a direction forecast.
- Why does Ease of Movement sometimes produce an enormous value?
- The box ratio sits in the denominator, and a wide bar that traded very little volume makes it very small. Dividing the midpoint shift by that small number produces an outlier which, with the default 14-period average, then influences the plotted line for the next fourteen bars. Reading the raw bar behind a spike is the way to tell a real cheap move from an artefact of thin volume.
- What is the default period for Ease of Movement?
- Fourteen bars, the setting Arms used, applied as a simple moving average over the raw values. A period of 1 returns the raw per-bar series, since a one-period simple average is the identity.