{ Downloaded From https://www.WiseStockTrader.com }

{ Bollinger Band volatility-adjusted,
  dynamic-period EMA v1.1 }

{ Positive sensitivity:
 EMA periodicity shortens on high BB volatility
 - increases on low BB volatility }
{ Negative sensitivity:
 EMA periodicity shortens on low BB volatility
 - increases on high BB volatility }

{ [1]EMA:         BB volatility-adjusted EMA }
{ [2]Dyn periods: EMA periodicity used }
{ [3]BB vlty:     BB volatility 0~100% }
{ [4]Signals:     EMA/price crossover signals }

{ ©Copyright 2004 Jose Silva }
{ http://www.metastocktools.com }

pds:=Input("EMA avg periods",1,2520,21);
sens:=Input("BB volatility sensitivity (+100 to -100)%",-100,100,75)/100;
pdsVlty:=Input("BB volatility sampling periods",
 2,2520,126);
pdsBB:=Input("Bollinger Band periods",
 2,2520,10);
x:=Input("[1]Open  [2]High  [3]Low  [4]Close  [5]Vol  [6]P",1,6,4);
plot:=Input("[1]EMA,  [2]Dyn periods,  [3]BB vlty,  [4]Signals",1,4,1);

x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));
y:=(BBandTop(x,pdsBB,S,2)-BBandBot(x,pdsBB,S,2))
 /Mov(x,pdsBB,S);
BBvlty:=(y-LLV(y,pdsVlty))/(HHV(y,pdsVlty)
 -LLV(y,pdsVlty)+.000001);
multi:=If(BBvlty<=.5,
 10*Power(BBvlty,3.4739)+.1,
 10*Power(BBvlty,3.32)+.000001);
multi:=If(sens>0,1/multi,multi);
multi:=If(multi<1,1-(1-multi)*Abs(sens),
 (multi-1)*Abs(sens)+1);
pds:=pds*multi;
pds:=If(pds>Cum(IsDefined(x))-(pdsVlty+pdsBB),
 Cum(IsDefined(x))-(pdsVlty+pdsBB),pds);
pds:=If(pds<1,1,pds);
BBema:=x*2/(pds+1)+PREV*(1-2/(pds+1));
signals:=Cross(x,BBema)-Cross(BBema,x);

If(plot=2,pds,If(plot=3,BBvlty*100,
 If(plot=4,signals,BBema)))