דלגו לתוכן
פתיחת RaamTrade

EaseOfMovement — Ease of Movement

תוכן זה אינו זמין עדיין בשפה שלך.

How far price moved per unit of volume: high when a small amount of trading moved the market a long way, near zero when heavy volume produced nothing. Arms’ original point was that the effort behind a move matters as much as the move.

Signature

EaseOfMovement(period, scale, on=<source>)
Argument Type Required Notes
period int Param or literal Yes Smoothing window. Default 14, bounds 1–400.
scale int Param or literal Yes Volume divisor keeping the value readable. Default 1,000,000. Bounds 1–1e9.
on= symbol No Source symbol. Defaults to the trade symbol. Reads high, low, volume.

Formula

$$ \text{EMV} = \frac{\text{midpoint move}}{(V/\text{scale}) / (H-L)}, \quad \text{then averaged over } n $$

Warmup

period + 1 bars; zero-volume or zero-range bars contribute 0.

Reading the value

emv.value
emv > 0

Example

class EaseEntry(Strategy):
"""Enter when price is moving easily upward."""
trade = Symbol()
sizing = FixedCapital()
def execute(self):
emv = EaseOfMovement(14, 1000000, on=self.trade)
if emv.value > 0 and self.trade.is_flat:
self.buy(self.trade, reason="Rising with little effort")
if emv.value < 0 and self.trade.is_long:
self.sell(self.trade, self.trade.position, reason="Effort against us")

Notes

  • Richard Arms’ Ease of Movement Value.
  • The scale parameter exists because raw volume makes the box ratio unreadably small; it is presentational and does not change the sign.
  • Ours reads 0.01× pandas_ta’s eom(14) on the same bars — the reference applies a ×100 scale factor this implementation does not; the shape is identical.