Code:
input price = close;
input displace = 0;
input length1 = 20;
input length2 = 60;
input Num_Dev_Dn = -2.0;
input Num_Dev_up = 2.0;
input averageType = AverageType.Simple;
def sDev1 = stdev(data = price[-displace], length = length1);
def sDev2 = stdev(data = price[-displace], length = length2);
plot MidLine1 = MovingAverage(averageType, data = price[-displace], length = length1);
plot LowerBand1 = MidLine1 + num_Dev_Dn * sDev1;
plot UpperBand1 = MidLine1 + num_Dev_Up * sDev1;
LowerBand1.SetDefaultColor(Color.Yellow);
MidLine1.SetDefaultColor(Color.Yellow);
UpperBand1.SetDefaultColor(Color.Yellow);
plot MidLine2 = MovingAverage(averageType, data = price[-displace], length = length2);
plot LowerBand2 = MidLine2 + num_Dev_Dn * sDev2;
plot UpperBand2 = MidLine2 + num_Dev_Up * sDev2;
LowerBand2.SetDefaultColor(Color.Gray);
MidLine2.SetDefaultColor(Color.Gray);
UpperBand2.SetDefaultColor(Color.Gray);
AddCloud(UpperBand1, UpperBand2, Color.Yellow, Color.BLACK);
AddCloud(LowerBand1,LowerBand2, Color.BLACK, Color.Yellow);
def MXBand = Max(UpperBand1,Upperband2);
def MNBand = Min(LowerBand1,LowerBand2);
Input Arrows = no;
Input DotSize = 3;
#ARROWS
plot ArrowDown = if arrows and (Close Crosses below MXBand) then MXBand else double.nan;
ArrowDown.setpaintingStrategy(paintingStrategy.Arrow_Down);
ArrowDown.setDefaultColor(color.Yellow);
ArrowDown.setLineWeight(dotsize);
plot ArrowUp = if arrows and (Close crosses above MNBand ) then MnBand else double.nan;
ArrowUp.setpaintingStrategy(paintingStrategy.Arrow_Up);
ArrowUp.setDefaultColor(color.Yellow);
ArrowUp.setLineWeight(dotsize);