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.valueemv > 0Example
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
scaleparameter 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.