//@version=5
// Deviation Clouds: ERD74
indicator(shorttitle="Deviation Clouds", title="DClouds", overlay=true)
// --- Moving Average Inputs ---
src = input.source(close, title="Source")
basisLength = input.int(20, minval=1, title="MA Length")
basisMaType = input.string("SMA", title="Moving Average Type", options=["SMA", "EMA", "WMA", "HMA"])
// --- Standard Deviation Inputs ---
mult = input.float(1.0, minval=0.001, maxval=50, title="Standard Deviation 1")
mult2 = input.float(1.5, minval=0.001, maxval=50, title="Standard Deviation 2")
mult3 = input.float(2, minval=0.001, maxval=50, title="Standard Deviation 3")
// --- Custom MA Function (Calculates selected MA type) ---
f_get_ma(maType, source, len) =>
float maValue = na
if maType == "SMA"
maValue := ta.sma(source, len)
else if maType == "EMA"
maValue := ta.ema(source, len)
else if maType == "WMA"
maValue := ta.wma(source, len)
else if maType == "HMA"
maValue := ta.hma(source, len)
maValue
// --- Basis and Deviation Calculations ---
basis = f_get_ma(basisMaType, src, basisLength)
dev = ta.stdev(src, basisLength)
dev1 = mult * dev
dev2 = mult2 * dev
dev3 = mult3 * dev
upper1 = basis + dev1
lower1 = basis - dev1
upper2 = basis + dev2
lower2 = basis - dev2
upper3 = basis + dev3
lower3 = basis - dev3
// --- Basis Color Logic (Green/Red) ---
colorBasis = src >= basis ? color.new(color.green, 0) : color.new(color.red, 0)
// Define 100% transparent colors for the bands
transparentRed = color.new(color.red, 100)
transparentGreen = color.new(color.green, 100)
// --- Plotting Cloud ---
pBasis = plot(basis, linewidth=2, color=colorBasis, style=plot.style_line, title="MA", trackprice=true)
// Plot Bands
pUpper1 = plot(upper1, color=color.red, style=plot.style_circles, title="Deviation 1 Upper", trackprice=true)
pUpper2 = plot(upper2, color=color.red, style=plot.style_circles, title="Deviation 2 Upper", trackprice=true)
pUpper3 = plot(upper3, color=color.red, style=plot.style_line, title="Deviation 3 Upper", trackprice=true)
pLower1 = plot(lower1, color=color.green, style=plot.style_circles, title="Deviation 1 Lower", trackprice=true)
pLower2 = plot(lower2, color=color.green, style=plot.style_circles, title="Deviation 2 Lower", trackprice=true)
pLower3 = plot(lower3, color=color.green, style=plot.style_line, title="Deviation 3 Lower", trackprice=true)
// --- Filling the Clouds ---
fill(pBasis, pUpper1, color=color.new(color.red, 40), title="Basis to Deviation 1 Upper Cloud")
fill(pUpper1, pUpper2, color=color.new(color.red, 60), title="Deviation 1 to Deviation 2 Upper Cloud")
fill(pUpper2, pUpper3, color=color.new(color.red, 80), title="Deviation 2 to Deviation 3 Upper Cloud")
fill(pBasis, pLower1, color=color.new(color.green, 40), title="Basis to Deviation 1 Lower Cloud")
fill(pLower1, pLower2, color=color.new(color.green, 60), title="Deviation 1 to Deviation 2 Lower Cloud")
fill(pLower2, pLower3, color=color.new(color.green, 80), title="Deviation 2 to Deviation 3 Lower Cloud")