## Mobility Oscillator

The Mobility Oscillator was authored by Mel Widner, Stocks and Commodities Magazine 02/1996. This Indicator uses highest highs, lowest lows, loops within loops, many if ands or equals, and even a prior close to arrive at its oscillator value. It uses a price distribution function and may be useful in predicting price mobility. The user may change the period lengths. This indicator’s definition is further expressed in the condensed code given in the calculation below. ### How To Trade Using Mobility Oscillator

Mobility Oscillator may be used in conjunction with other indicators. No trading signals are given.

### How To Access in MotiveWave

Go to the top menu, choose Study>Mel Widner>Mobility Oscillator

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.

### Calculation

//period = user defined, default is 14
//m = user defined, default is 10
//pdf = price distrubition function
//index = current bar number, LOE = less or equal
//MOE = more or equal

```Plot: mo = -mo(m, index, period);
....
Method mo(m, index, period)
hMax = highest(index, period, high);
lMin = lowest(index, period, low);
rX = (hMax -lMin) / m;
bL = 0, bU = 0, pdfI = 0, pdfC = 0, pdfMx = 0;
imX = 1, priorClose = 0, x = 0;
for(i=index-m+1; i LOE index; i++)
bU = lMin + ((x + 1) * rX);
bL = bU - rX;
pdfI = pdf(i, (x+1), m, period);
if (x == 0) pdfMx = pdfI;
if (pdfI moreThan pdfMx) imX = x + 1; pdfMx = pdfI;}
if (x == 0) pdfC = pdfI;
priorClose = close[period-1];
if (priorClose moreThan bL AND priorClose LOE bU) pdfC = pdfI;
x++;
endFor
pmo = lMin + (imX - .5) * rX;
moVar = 100 * (1 - pdfC / pdfMx);
if (priorClose lessThan pmo) moVar = -moVar;
return moVar;
endMethod
....
Method pdf(index, value1, m, period)
hMax = highest(index, period, high);
lMin = lowest(index, period, low);
hi = 0;
lo = 0;
pdf = 0;
rX = (hMax - lMin) / m;
bL = lMin + ((value1 - 1) * rX);
bU = lMin + (value1 * rX);
for(i=index-period+1; i LOE index; i++)
hi = high[i];
lo = low[i];
if (hi LOE lo) continue;
if (hi LOE bU) pdf++;
if (!(hi LOE bU OR lo MOE bU)) pdf = pdf + (bU - low) / (hi - lo);
if (hi lessOr= bL) pdf--;
if (!(hi LOE bL OR lo MOE bL)) pdf = pdf - (bL - low) / (hi - lo);
return pdf / period;
endMethod
....
```