Modified on 2010/06/08 22:52 by Administrator — Categorized as: Standard Indicators


public EMV(Bars source, int period, string description)
public static EMV Series(Bars source, int period)

Parameter Description

source Symbol's Bars object
period *Note! Up to Version 5.6, inclusive, EMV's period parameter was not used.


Developed Richard W. Arms, Jr., the Ease of Movement (EMV) indicator shows the relationship between volume and price change. As with Equivolume charting, EMV shows how much volume is required to move prices.


Larger positive values occur when prices are moving upward on light volume, whereas larger negative values are seen when prices move down on light volume. If prices are not moving, or if heavy volume is required to move prices, then the indicator will also be near zero.

In the classic interpretation, an EMV buy signal occurs when the indicator crosses above zero, and vice-versa for a sell signal. For smaller periods, EMV may be smoothed with a 14-period EMA, for example.


MidPoint = (High + Low)/2 - (Highn - Lown)/2
BoxRatio = (Volume / 1e6 ) / (High - Low)
EMV = MidPoint / BoxRatio

See example for script derivation.


using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;

namespace WealthLab.Strategies { public class MyStrategy : WealthScript { StrategyParameter period;

public MyStrategy() { period = CreateParameter("EMV Period", 1, 1, 20, 1); }

protected override void Execute() {

int per = period.ValueInt; if (per < 1) per = 1; DataSeries av = (Highest.Series(Bars.High, per) + Lowest.Series(Bars.Low, per)) / 2d; DataSeries midPoint = av - (av >> per); DataSeries boxRatio = (Sum.Series(Volume, per) /1.0e6) / (Highest.Series(Bars.High, per) - Lowest.Series(Bars.Low, per));

DataSeries emv = new DataSeries(Bars, "EMV(" + per + ")"); for(int bar = per; bar < Bars.Count; bar++) { if (boxRatio[bar] == 0) { emv[bar] = emv[bar-1]; // use the value from the previous bar } else { emv[bar] = midPoint[bar] / boxRatio[bar]; } } ChartPane cp = CreatePane(40, true, true); PlotSeries(cp, emv, Color.Black, LineStyle.Solid, 1); } } }