EMV

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

Syntax

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.

Description

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.

Interpretation

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.

Calculation

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

where,
See example for script derivation.

Example

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); } } }