[LegacyColorValue = true]; 

{ TSMDblStochastic: Blau's Double Smoothed Stochastic
  Copyright 1999, P.J.Kaufman. All rights reserved.
  Disclaimer:
}
  inputs: phigh(numericseries), plow(numericseries), pclose(numericseries),
          q(numericsimple), r(numericsimple), s(numericsimple);
  vars:   diff1(0), savg1(0), savg2(0), diff2(0), davg1(0), davg2(0);

  diff1 = pclose - lowest(plow,q);
  savg1 = savg1[1] + (2 / (r + 1)) * (diff1 - savg1[1]);
  savg2 = savg2[1] + (2 / (s + 1)) * (savg1 - savg2[1]);
  diff2 = highest(phigh,q) - lowest(plow,q);
  davg1 = davg1[1] + (2 / (r + 1)) * (diff2 - davg1[1]);
  davg2 = davg2[1] + (2 / (s + 1)) * (davg1 - davg2[1]);

  TSMDblStochastic = 0;
  if davg2 <> 0 then TSMDblStochastic = 100*savg2 / davg2;