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 - (High
n - Low
n)/2
BoxRatio = (Volume / 1e6 ) / (High - Low)
EMV = MidPoint / BoxRatio
where,
- n = period
- High and Low are the high and low over the indicator's period, and, Volume is the cumulative volume over the period
- 1e6 is a scaling factor
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);
}
}
}