Files
QuanTAlib/lib/volume/eom/Eom.md
T

7.2 KiB
Raw Blame History

EOM: Ease of Movement

Ease of Movement reveals when price advances effortlessly versus when it struggles against resistance. It's the market's accelerometer.

Property Value
Category Volume
Inputs OHLCV bar (TBar)
Parameters period (default 14), volumeScale (default 10000)
Outputs Single series (Eom)
Output range Unbounded
Warmup period + 1 bars
PineScript eom.pine
  • Ease of Movement (EOM) quantifies how easily price moves relative to volume.
  • Similar: CMF, EFI | Complementary: ATR | Trading note: Ease of Movement; volume-normalized price displacement. High = price moves easily on low volume.
  • Validated against TA-Lib, Skender, and Tulip reference implementations where available.

Ease of Movement (EOM) quantifies how easily price moves relative to volume. High positive values indicate price is advancing with little resistance (low volume relative to price range), while high negative values reveal price declining easily. Values near zero suggest price is meeting resistance, requiring substantial volume to produce movement.

The elegance of EOM lies in its normalization: it divides price change by a "box ratio" that accounts for both volume and price range. This makes the indicator comparable across securities with different price and volume characteristics.

Historical Context

Developed by Richard W. Arms Jr. in the 1980s, the Ease of Movement indicator emerged from Arms' work on volume-price relationships (he also created the Arms Index/TRIN and Equivolume charting). Arms recognized that the relationship between price movement and volume tells a story about supply and demand balance.

The key insight: when price moves significantly on low volume, the market is offering little resistance to that direction. Conversely, large volume producing small price changes indicates significant opposition to the move.

This implementation uses a Simple Moving Average for smoothing, consistent with Arms' original formulation. The volumeScale parameter (default 10,000) normalizes the output to reasonable numeric ranges.

Architecture & Physics

EOM operates as a three-stage pipeline:

1. Midpoint Distance

The distance moved is based on the midpoint of the High-Low range:


Midpoint_t = \frac{High_t + Low_t}{2}

Distance_t = Midpoint_t - Midpoint_{t-1}

Using midpoints rather than closes provides a better measure of the "center of gravity" of price action for each bar.

2. Box Ratio

The box ratio measures how much volume was required per unit of price range:


BoxRatio_t = \frac{Volume_t / VolumeScale}{High_t - Low_t}
  • High box ratio: lots of volume relative to range (resistance)
  • Low box ratio: little volume relative to range (ease)

3. Raw EOM and Smoothing


RawEOM_t = \frac{Distance_t}{BoxRatio_t}

The raw values are smoothed with a Simple Moving Average:


EOM_t = SMA(RawEOM, period)

Mathematical Foundation

Distance Calculation


D_t = \frac{H_t + L_t}{2} - \frac{H_{t-1} + L_{t-1}}{2}

where:

  • H_t = High at time t
  • L_t = Low at time t

Box Ratio


B_t = \frac{V_t / S}{H_t - L_t}

where:

  • V_t = Volume at time t
  • S = Volume scale (default 10,000)

Raw Ease of Movement


E_t = \frac{D_t}{B_t} = \frac{D_t \times (H_t - L_t) \times S}{V_t}

Expanding fully:


E_t = \frac{(H_t + L_t - H_{t-1} - L_{t-1}) \times (H_t - L_t) \times S}{2 \times V_t}

Interpretation Signals

  • Strong positive EOM: Price rising easily, bullish
  • Strong negative EOM: Price falling easily, bearish
  • EOM near zero: Price meeting resistance
  • Zero line crossover: Potential trend change
  • Divergence: Price vs EOM disagreement warns of reversal

Performance Profile

Operation Count (Streaming Mode)

Operation Count Notes
ADD 2 Midpoint calculation
SUB 3 Distance, range
MUL 1 Scale application
DIV 2 Box ratio, EOM
SMA Update O(1) Ring buffer
Total ~10 Per bar

Memory Footprint

Component Size Notes
State record 40 bytes 5 doubles
Previous state 40 bytes For bar correction
Ring buffer period × 8 bytes SMA calculation
Total ~80 + 8n bytes n = period

Quality Metrics

Metric Score Notes
Accuracy 10/10 Matches original formulation
Timeliness 7/10 SMA lag proportional to period
Overshoot 8/10 Well-behaved, bounded by SMA
Smoothness 8/10 SMA provides good smoothing
Allocation 10/10 Zero heap allocations in hot path

Validation

Library Status Notes
QuanTAlib Ring buffer SMA implementation
TA-Lib No EOM implementation
Skender No EOM implementation
Tulip Has EMV (different formula)
Ooples No matching EOM implementation

Note: External library implementations vary in their handling of volume scaling and SMA period. Tulip's EMV uses a different formula without the volume scale divisor.

Common Pitfalls

  1. First Bar: No previous midpoint exists, so raw EOM = 0. The implementation initializes previous midpoint on the first valid bar.

  2. Zero Range (High = Low): Creates division by zero in box ratio. Implementation guards against this by returning last valid EOM value.

  3. Zero Volume: Creates division by zero. Implementation treats as infinite resistance (EOM = 0).

  4. Volume Scale Selection:

    • Default 10,000 works for most equities
    • Crypto/forex may need 1,000,000+ due to different volume scales
    • Scale affects magnitude, not direction or signal timing
  5. Period Selection:

    • Short periods (7-10): More responsive, more noise
    • Standard period (14): Good balance for swing trading
    • Long periods (20+): Smoother, confirms longer-term trends
  6. Not Bounded: Unlike RSI or stochastics, EOM has no fixed range. Compare signals relative to the indicator's own history, not absolute values.

  7. isNew Parameter: When correcting a bar (isNew=false), the implementation properly restores previous state and ring buffer position. Critical for live trading.

  8. NaN/Infinity Handling: Implementation substitutes last valid values for NaN inputs and guards against infinite results from zero volume or zero range.

References

  • Arms, R.W. Jr. (1989). "The Arms Index (TRIN)." Dow Jones-Irwin.
  • Arms, R.W. Jr. (1994). "Trading Without Fear." John Wiley & Sons.
  • StockCharts. "Ease of Movement (EMV)." Technical Indicators
  • Investopedia. "Ease of Movement Indicator." Technical Analysis
  • TradingView Wiki. "Ease of Movement." Pine Script Reference