Negative Volume Disparity Indicator

Negative Volume Disparity Indicator (NVDI) was authored by Phillip C. Holt, Stocks and Commodities Magazine 06/1996. The NVDI uses Bollinger Bands®, price and previous price, volume and a previous volume to create its plot. A signal line, a moving average of the NVDI, is also plotted. The user may change the input (close), method (SMA), period lengths and number of standard deviations. This indicator’s definition is further expressed in the condensed code given in the calculation below.

Negative Volume Disparity Indicator1

How To Trade Using Negative Volume Disparity Indicator

Adjust the top and bottom guides to control the quantity and quality of the trading signals. If the nvdi is above the top guide and crosses below the ma a sell signal will be generated. Conversely, if the nvdi is below the bottom guide and crosses above the ma a buy signal will be given.

Negative Volume Disparity Indicator2

How To Access in MotiveWave

Go to the top menu, choose Study>Volume Based>Negative Volume Disparity Indicator

or go to the top menu, choose Add Study, start typing in this study name until you see it appear in the list, click on the study name, click OK.

Important Disclaimer: The information provided on this page is strictly for informational purposes and is not to be construed as advice or solicitation to buy or sell any security. Please see our Risk Disclosure and Performance Disclaimer Statement.


//input = price, user defined, default is closing price
//method = moving average = ma, user defined, default is SMA
//period1 = user defined, default is 33
//period2 = user defined, default is 4
//noStd = number of Standard Deviations = user defined, default is 2
//prev = previous, bb = bollinger bands
//bb[0] = bb[top], bb[1] = bb[bottom]
//index = current bar number

prevV = price[index-1];;
vol = getVolume(index);
prevVol = volume[index-1];
bb[] = bollingerBands(index, period1, noStd, noStd, input);
bbDiff = bb[0] - bb[1];
perb = 0;
if (bbDiff != 0) perb = (price - bb[1])/ (bbDiff);
negVol = ifNull(100, negVol);
if (vol lessThan prevVol) negVol = negVol + ((price - prevV) /(prevV) * 100);
neg[] = bollingerBands(index, period1, noStd, noStd, negVol);
negDiff = neg[0] - neg[1];
negPerb = 0;
if (negDiff != 0) negPerb = (negVol - neg[1])/ (negDiff);
Plot1: nvdi = (1 + perb) / (1 + negPerb);
Plot2: ma = ma(method, index, period2, NVDI);
highSell = nvdi for last sell signal, reset to max_negative at each  buy signal;
lowBuy = nvdi for last buy signal, reset to max_positive at each sell signal;
sell =crossedBelow(NVDI, MA) AND (ma moreThan topGuide) AND (nvdi moreThan highSell) ; 
buy = crossedAbove(NVDI, MA) AND (ma lessThan bottomGuide) AND (nvdi lessThan lowBuy);