Conversion of Bollinger Bands x3 with Fill

Viewing 2 posts - 1 through 2 (of 2 total)
  • Author
    Posts
  • #247783 quote
    regusregus
    Participant
    Veteran
    Please can anyone convert the following indicator: //@version=6 indicator(shorttitle=”BBx3″, title=”Bollinger Bands x3 with Fill + HMA + Dynamic Width Colors”, overlay=true, timeframe=””, timeframe_gaps=true) // === Inputs === length = input.int(20, minval=1, title=”Length”) maType = input.string(“SMA”, “Basis MA Type”, options=[“SMA”, “EMA”, “SMMA (RMA)”, “WMA”, “VWMA”, “HMA”]) src = input(close, title=”Source”) mult1 = input.float(1.0, minval=0.001, maxval=50, title=”StdDev Multiplier Band 1″) mult2 = input.float(2.0, minval=0.001, maxval=50, title=”StdDev Multiplier Band 2″) mult3 = input.float(3.0, minval=0.001, maxval=50, title=”StdDev Multiplier Band 3″) fillColor1 = input.color(color.new(color.blue, 85), “Fill Color Between Band 1 & 2 (Expanding)”) fillColor2 = input.color(color.new(color.purple, 85), “Fill Color Between Band 2 & 3 (Expanding)”) fillColorNarrow = input.color(color.new(color.gray, 85), “Fill Color (Narrowing)”) showBand1 = input.bool(true, “Show Band 1 (±1σ)”) showBand2 = input.bool(true, “Show Band 2 (±2σ)”) showBand3 = input.bool(true, “Show Band 3 (±3σ)”) showFill12 = input.bool(true, “Fill Between Band 1 & 2”) showFill23 = input.bool(true, “Fill Between Band 2 & 3”) offset = input.int(0, “Offset”, minval = -500, maxval = 500, display = display.data_window) // === MA Functions === hma(src, len) => wma1 = ta.wma(src, len) wma2 = ta.wma(src, len / 2) ta.wma(2 * wma2 – wma1, math.round(math.sqrt(len))) ma(source, length, _type) => switch _type “SMA” => ta.sma(source, length) “EMA” => ta.ema(source, length) “SMMA (RMA)” => ta.rma(source, length) “WMA” => ta.wma(source, length) “VWMA” => ta.vwma(source, length) “HMA” => hma(source, length) // === Calculations === basis = ma(src, length, maType) dev = ta.stdev(src, length) upper1 = basis + mult1 * dev lower1 = basis – mult1 * dev upper2 = basis + mult2 * dev lower2 = basis – mult2 * dev upper3 = basis + mult3 * dev lower3 = basis – mult3 * dev // === Band Widths === width1 = upper1 – lower1 width2 = upper2 – lower2 width3 = upper3 – lower3 // === Narrowing Flags === narrowing1 = width1 < width1[1] narrowing2 = width2 < width2[1] narrowing3 = width3 < width3[1] // === Dynamic Line Colors === colorU1 = narrowing1 ? color.gray : color.lime colorL1 = narrowing1 ? color.gray : color.lime colorU2 = narrowing2 ? color.gray : color.orange colorL2 = narrowing2 ? color.gray : color.orange colorU3 = narrowing3 ? color.gray : color.red colorL3 = narrowing3 ? color.gray : color.red // === Dynamic Fill Colors === fillColorBand12 = narrowing2 ? fillColorNarrow : fillColor1 fillColorBand23 = narrowing3 ? fillColorNarrow : fillColor2 // === Plot Lines === plot(basis, “Basis”, color=#000000, offset=offset) pU1 = plot(showBand1 ? upper1 : na, “Upper 1σ”, color=showBand1 ? colorU1 : na, offset=offset) pL1 = plot(showBand1 ? lower1 : na, “Lower 1σ”, color=showBand1 ? colorL1 : na, offset=offset) pU2 = plot(showBand2 ? upper2 : na, “Upper 2σ”, color=showBand2 ? colorU2 : na, offset=offset) pL2 = plot(showBand2 ? lower2 : na, “Lower 2σ”, color=showBand2 ? colorL2 : na, offset=offset) pU3 = plot(showBand3 ? upper3 : na, “Upper 3σ”, color=showBand3 ? colorU3 : na, offset=offset) pL3 = plot(showBand3 ? lower3 : na, “Lower 3σ”, color=showBand3 ? colorL3 : na, offset=offset) // === Fill Zones with Dynamic Color === fill(pU1, pU2, color=showFill12 ? fillColorBand12 : na, title=”Fill Upper 1↔2σ”) fill(pL1, pL2, color=showFill12 ? fillColorBand12 : na, title=”Fill Lower 1↔2σ”) fill(pU2, pU3, color=showFill23 ? fillColorBand23 : na, title=”Fill Upper 2↔3σ”) fill(pL2, pL3, color=showFill23 ? fillColorBand23 : na, title=”Fill Lower 2↔3σ”)
    #247786 quote
    JSJS
    Participant
    Master

    This is the basis of the indicator without the dynamic colors…

    You can choose from 8 different average…

    // === Inputs ===
    Length=20
    maType=0 //0=SMA, 1=EMA, 2=WMA, 3=Wilder, 4=Triangular, 5=EndPoint, 6=Hull, 7=ZeroLag
    src=Close
    
    mult1=1 //StdDev Multiplier Band 1
    mult2=2 //StdDev Multiplier Band 2
    mult3=3 //StdDev Multiplier Band 3
    
    // === Calculations ===
    Basis=Average[Length,maType](src)
    dev=Std[Length](src)
    
    upper1 = basis + mult1 * dev
    lower1 = basis - mult1 * dev
    
    upper2 = basis + mult2 * dev
    lower2 = basis - mult2 * dev
    
    upper3 = basis + mult3 * dev
    lower3 = basis - mult3 * dev
    
    // === Plot Lines ===
    Return Basis as "Basis" Coloured("White"),upper1 as "Upper 1Std" Coloured("Grey"),lower1 as "Lower 1Std" Coloured("Grey"),upper2 as "Upper 2Std"Coloured("Orange"),lower2 as "Lower 2Std"Coloured("Orange"),upper3 as "Upper 3Std"Coloured("Red"),lower3 as "Lower 3Std"Coloured("Red")
    regus, Iván González and robertogozzi thanked this post
    Scherm­afbeelding-2025-06-01-om-23.14.14.jpg Scherm­afbeelding-2025-06-01-om-23.14.14.jpg
Viewing 2 posts - 1 through 2 (of 2 total)
  • You must be logged in to reply to this topic.
ProRealAI ProRealAI New

Stuck on this ProBuilder code?

Describe what this topic is trying to build, in plain English, and ProRealAI writes the ProRealTime™ indicator, screener or system for you.

Available in 7 languages
Try ProRealAI

Conversion of Bollinger Bands x3 with Fill


ProBuilder: Indicators & Custom Tools

New Reply
Author
author-avatar
regus @regus Participant
Summary

This topic contains 1 reply,
has 2 voices, and was last updated by JSJS
1 year, 3 months ago.

Topic Details
Forum: ProBuilder: Indicators & Custom Tools
Language: English
Started: 06/01/2025
Status: Active
Attachments: 1 files
ProRealCode ProRealCode
Loading...