Drunkard Walk

The Drunkard’s Walk was authored by Ron Davis in the Stocks And Commodities Mag, December 2011. It is also referred to as a random walk and is an attempt to generate a cycle-free trend identification. Two histograms are given one called an Up Walk, the other a Down Walk. Bollinger Band ranges of the Up and Down Walks determine the color scheme of the histograms. A PercentB path is also shown. The user may change the input (close), Standard Deviation factor and period lengths. This indicator’s definition is further expressed in the condensed code given in the calculation below


How To Trade Using Drunkard’s Walk

The Drunkard’s Walk may be used with other indicators such as Stochastic Oscillator, Bollinger Bands® and the Commodity Channel Index (CCI). No signals are given for this indicator.

How To Access in MotiveWave

Go to the top menu, choose Study>Custom>Drunkard’s Walk

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
//period = user defined, default is 80
//pbPeriod = user defined, default is 14
//std = Standard Deviation user defined, default is 2
//index = current bar number

lowArr[] = lowestBar(index, period, LOW); 
highArr[] = highestBar(index, period, HIGH);
lowest = lowArr[0]; //lowest low for the period
highest = highArr[0];  //highest high for the period
maxBar = highArr[1]; //index for highest high
minBar = lowArr[1]; //index for lowest low
dnRun = index - maxBar;
upRun = index - minBar;
//Calculate Average True Range
atrUp = atr(index, upRun);
atrDn = atr(index, dnRun);
den = 0, upWalk = 0, dnWalk = 0;
if (dnRun moreThan 0 AND upRun moreThan 0) 
  den = 1;
  if (atrUp moreThan 0) 
    den = atrUp;
  upWalk = (high-lowest) / (Math.sqrt(upRun) * den);
  den = 1;
  if (atrDn moreThan 0) 
     den = atrDn;
  dnWalk = (highest-low) / (Math.sqrt(dnRun) * den);
pcb = perCentB(pbPeriod, index, std, key);
Plot1 upWalk;
Plot2: dnWalk;
Plot3: pcb;
bbUp[] = bollingerBands(index, pbPeriod, std, std, UPWALK);
bbDn[] = bollingerBands(index, pbPeriod, std, std, DNWALK);

setBarColor(index, UPWALK, nUpC);
setBarColor(index, DNWALK, nDnC);

//bbUp[0], bbUp[1]  0 is for top band 1 is for bottom band
if (upWalk lessOrEqual bbUp[1]) 
     setBarColor(index, UPWALK, upBelowC);
if (dnWalk lessOrEqual bbDn[1])
      setBarColor(index, DNWALK, dnBelowC);
if (upWalk moreOrEqual bbUp[0])
      setBarColor(index, UPWALK, upAboveC);
if (dnWalk moreOrEqual bbUp[0])
      setBarColor(index, DNWALK, dnAboveC);