Ease of Movement (EMV)
Calculate the Ease of Movement (EMV) for a given price series.
The Ease of Movement indicator relates how far price moved (the change in the midpoint of the high-low range from one period to the next) to the volume required to move it (via the “Box Ratio”, volume scaled down and divided by the period’s high-low range). High positive readings mean price is moving up easily on relatively little volume; high negative readings mean price is moving down easily on relatively little volume. The raw daily reading is smoothed with a Simple Moving Average to reduce noise.
The formula is as follows:
\[\text{Distance Moved} = (\operatorname{High}(t) + \operatorname{Low}(t)) / 2 - (\operatorname{High}(t-1) + \operatorname{Low}(t-1)) / 2\] \[\text{Box Ratio} = (\text{Volume} / \text{volume\_divisor}) / (\text{High} - \text{Low})\] \[\text{Raw EMV} = \text{Distance Moved} / \text{Box Ratio}\] \[\text{EMV} = \operatorname{SMA}(\text{Raw EMV},\; \text{window})\]Also known as: EMV, Ease of Movement.
Ease of Movement (EMV) in Python
get_ease_of_movement is part of the Technicals module of the open-source Finance Toolkit. Install it with:
pip install financetoolkit -U
Then call get_ease_of_movement as shown below.
from financetoolkit import Toolkit
toolkit = Toolkit(tickers=["AAPL", "MSFT"])
toolkit.technicals.get_ease_of_movement()
Parameters
get_ease_of_movement accepts the following parameters:
- period (str, optional): The time period to consider for historical data. Can be “daily”, “weekly”, “quarterly”, or “yearly”. Defaults to “daily”.
- close_column (str, optional): The column name for closing prices in the historical data. Defaults to “Adj Close”.
- window (int, optional): Number of periods used to smooth the raw Ease of Movement values with a Simple Moving Average. Defaults to 14.
- volume_divisor (float, optional): Scaling constant applied to volume so that the Box Ratio (and therefore EMV) stays in a readable range regardless of an asset’s typical share volume. Defaults to 100,000,000.
- rounding (int | None, optional): The number of decimals to round the results to. Defaults to 4.
- growth (bool, optional): Whether to calculate the growth of the Ease of Movement. Defaults to False.
- lag (int | list[int], optional): The lag to use for the growth calculation.
- standardize (bool, optional): Whether to standardize (Z-Score) the result. When combined with growth=True, standardizes the growth values instead of the raw values. Defaults to False. Defaults to 1.