There you go:
DEFPARAM CalculateOnLastBars = 2000
//ONCE FastAvg = 9 //8 TO BE UNCOMMENTED IF VARIABLE IS STATIC INSIDE THE CODE
//ONCE SlowAvg = 40 //40 TO BE UNCOMMENTED IF VARIABLE IS STATIC INSIDE THE CODE
//ONCE BBval = 20 //20 TO BE UNCOMMENTED IF VARIABLE IS STATIC INSIDE THE CODE
//ONCE BBdev = 2.0 //2.0 TO BE UNCOMMENTED IF VARIABLE IS STATIC INSIDE THE CODE
ONCE BullTrend = 0
ONCE BearTrend = 0
ONCE SideWays = 0
ONCE RangeBars = 2
// Let's check all Variables are set within valid ranges
FastAvg = max(min(FastAvg,99),0)
SlowAvg = max(min(SlowAvg,99),0)
AvgType = max(min(AvgType,6),0)
BBdev = max(min(BBdev,99.9),0.1)
BBavg = max(min(BBAvg,99),0)
RangeBars = max(min(RangeBars,9),2)
// Set up a Bollinger Band
BBmean = average[BBavg,0](close) //BB mean (middle line)
BollUP = BBmean + ((std[BBavg](close)) * BBdev) //BB Upper Band
BollDN = BBmean - ((std[BBavg](close)) * BBdev) //BB Lower Band
// Determine current Averages'value
fast = Average[FastAvg,AvgType](close)
slow = Average[SlowAvg,AvgType](close)
// Determine current status of BB (Narrowing or Expanding)
Narrow = (BollUP < BollUP[1]) AND (BollDN > BollDN[1])
Expand = (BollUP > BollUP[1]) AND (BollDN < BollDN[1])
// first arrow is Green
CrossOver = fast crosses over slow
IF CrossOver THEN
BullTrend = 1
BearTrend = 0
SideWays = 0
CrossUnder = 0
//cross = slow[1]
DRAWARROWUP(barindex,LOW-5*pointsize) COLOURED(0,255,10)
endif
IF CrossOver[5] THEN
IF summation[4](CrossOver OR CrossUnder) = 0 THEN
TopLine = highest[5](high) + (5 * pipsize)
DRAWTEXT("---#TopLine#---",barindex-3,TopLine,SansSerif,Bold,16)coloured(153,0,0)
ENDIF
ENDIF
//next arrows are purple and semi transparent
//if fast>slow AND slow<>cross then
// DRAWTEXT("*",barindex, slow) COLOURED(0,204,0)
//endif
// next arrow is Red
CrossUnder = fast crosses under slow
if CrossUnder then
BullTrend = 0
BearTrend = 1
SideWays = 0
CrossOver = 0
//cross = slow[1]
DRAWARROWDOWN(barindex,HIGH+5*pointsize) COLOURED(255,0,10)
endif
// Display price on the 5th bar (since the crossing)
IF CrossUnder[5] THEN
IF summation[4](CrossOver OR CrossUnder) = 0 THEN
BottomLine = lowest[5](low) - (5 * pipsize)
DRAWTEXT("---#BottomLine#---",barindex-3,BottomLine,SansSerif,Bold,16)coloured(153,0,0)
ENDIF
ENDIF
// grey bars when ranging sideways
IF SideWays = 0 AND (summation[RangeBars](Narrow) = RangeBars) THEN
SideWays = 1
ELSIF SideWays = 1 AND (summation[RangeBars](Expand) = RangeBars) THEN
SideWays = 0
ENDIF
// override default colour for Candles
IF SideWays THEN
DRAWCANDLE(Open,High,Low,Close)coloured(169,169,169) bordercolor(0,0,0)
ELSIF BullTrend THEN
IF close > open THEN
DRAWCANDLE(Open,High,Low,Close)coloured(0,255,0) bordercolor(0,0,0) //light GREEN
ELSE
DRAWCANDLE(Open,High,Low,Close)coloured(0,100,0) bordercolor(0,0,0) //dark GREEN
ENDIF
ELSIF BearTrend THEN
IF close < open THEN
DRAWCANDLE(Open,High,Low,Close)coloured(255,0,0) bordercolor(0,0,0) //light RED
ELSE
DRAWCANDLE(Open,High,Low,Close)coloured(139,0,0) bordercolor(0,0,0) //dark RED
ENDIF
ENDIF
//next arrows are purple and semi transparent
//if fast<slow AND slow<>cross then
// DRAWTEXT("*",barindex, slow) COLOURED(255,0,0)
//endif
RETURN