Investment Studio > Expressions > Functions > Indicator > EOM
float array[*][2] eom(float array[*][4] dhlv, float volume_divisor = 10000)
Returns a two-column array containing dates (first column) and corresponding Ease Of Movement (EOM) values (second column). Given n input rows in dhlv, n - 1 (or fewer) rows are returned.
dhlv is a four-column array containing daily price and volume quotes. Each row is structured as follows:
| Column # | Content |
| 1 | The quote date. |
| 2 | The day's high (highest traded price). |
| 3 | The day's low (lowest traded price). |
| 4 | The day's volume (number of traded shares). |
The array is assumed to be time-sorted, with earlier dates preceding later dates.
Automatic type conversion allows the use of date strings as arguments instead of explicit date values.
volume_divisor is a normalization factor which can be used to scale output values, e.g. for easier comparison across different assets:
| (high + low) - (yesterday's high + yesterday's low) | ||
| EOM | = 0.5 | ¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾ |
| (high - low) · volume / volume_divisor |
If omitted, volume_divisor defaults to 10000.
Interpretation
EOM is a measure of how easily the price of an asset is moved by throwing money at it (hence the name).
The numerator (including the factor 0.5) is the difference between the midpoint in the day's price range and the midpoint in the previous day's price range. The denumerator is a measure of the strength of gross value flows in the asset (as opposed to EFI, which is a measure of the strength and direction of net value flows). The same change in price from the previous day will therefore lead to a large EOM if it occurs on a day with small value flows (small price range and/or small volume) and to a small EOM if it occurs on a day with large value flows.
In a trending market, a small EOM is a warning that the current trend may be running out of steam. "Churning" (prices showing little movement in spite of large volumes) is a sign of a market top which experienced traders look for and which will be signalled by a small EOM. A large EOM on the other hand implies that there is strength in the current trend (bullish for large positive values, bearish for large negative values).
Strategies based on EOM therefore trigger buy signals when it crosses above a threshold value and sell signals when it crosses below a threshold value. The simplest case is to use the same value = 0 for both thresholds. In general, such systems use an EMA rather than raw EOM values. A length of 14 days is commonplace, i.e.
=ema(eom(dhlv), 14)
As usual, the length of the EMA should be set to match the investment horizon under consideration.
For a real life example, consider Apple (NASD:AAPL) from June 1, 2001 to December 31, 2001:

The top chart shows the price in standard candlestick form; the middle chart shows volume; the bottom chart shows EMA(EOM, 50) in solid blue and EMA(EFI, 20) overlayed as a black line, for comparison. Note how the two indicators are largely in agreement about trend directions and the positions of zero crosses, while differing about trend strengths.
Example
Assuming standard US date format settings,
=eom({{"1/1/1990", 100, 90, 1000}, {"1/2/1990", 97, 84, 858}})
returns {{32875, -681.8181...}}. 32875 is the date code for 1/2/1990; -681.8181... is the EOM on that date, given the default volume_divisor.