Search code examples
colorspine-scriptpine-script-v5

Pine script wizard assistance required for color changing conditions


Pine script wizard assistance required for color changing conditions The following script contains a lagging span line combined with Bollinger Bands. I need a color changing function for the lagging span: Above BB upper band = color1. Between BB upper & lower bands = color2. Below BB lower band = color3.

The Script:

//@version=5
indicator(title="Lagging span & BB", shorttitle="Lagging span & BB", overlay=true, timeframe="", timeframe_gaps=true)

// Bollinger Band
length = input.int(20, minval=1)
src = input(close, title="Source")
mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev")
basis = ta.sma(src, length)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input.int(0, "Offset", minval = -500, maxval = 500)

plot(basis, "Basis", color=#FF6D00, offset = offset, display = display.none)
p1 = plot(upper, "Upper", color=#8d8d8d, offset = offset)
p2 = plot(lower, "Lower", color=#8d8d8d, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(177, 177, 177), display = display.none)


//Lagging Span
displacement = input.int(25, minval=1, title="Lagging Span")
lagcol = input.color(#9b5dff, 'Barney Solid Color')

plot(close, offset = -displacement + 1, color = lagcol, title="Lagging Span")

What i have tried nr1:

//@version=5
indicator(title="Lagging span & BB", shorttitle="Lagging span & BB", overlay=true, timeframe="", timeframe_gaps=true)

// Bollinger Band
length = input.int(20, minval=1)
src = input(close, title="Source")
mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev")
basis = ta.sma(src, length)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input.int(0, "Offset", minval = -500, maxval = 500)

plot(basis, "Basis", color=#FF6D00, offset = offset, display = display.none)
p1 = plot(upper, "Upper", color=#8d8d8d, offset = offset)
p2 = plot(lower, "Lower", color=#8d8d8d, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(177, 177, 177), display = display.none)


//Lagging Span
cclag = input(true, 'Enable Bull/Bear Colors')// Enables/disables color changing function

displacement = input.int(25, minval=1, title="Lagging Span")
lagcol       = input.color(#9b5dff, 'Barney Solid Color') //solid color if color change function is not enabled
bullcol      = input.color(#9b5dff, 'Bull Color') //Color if lagging span is above upper BB
insideBBcol  = input.color(#35b940, 'Inside BB Color') //Color if lagging span is between upper & lower BB
bearcol      = input.color(color.red, 'Bear color') //Color if lagging span is below lower BB

cclagcol = cclag ? close > upper ? bullcol : close < upper ? insideBBcol : close < lower ? bearcol : na : lagcol

plot(close, offset = -displacement + 1, color = cclagcol, title = "Lagging Span")

What i have tried nr2:

//@version=5
indicator(title="Lagging span & BB", shorttitle="Lagging span & BB", overlay=true, timeframe="", timeframe_gaps=true)

// Bollinger Band
length = input.int(20, minval=1)
src    = input(close, title="Source")
mult   = input.float(2.0, minval=0.001, maxval=50, title="StdDev")
basis  = ta.sma(src, length)
dev    = mult * ta.stdev(src, length)
upper  = basis + dev
lower  = basis - dev
offset = input.int(0, "Offset", minval = -500, maxval = 500)

plot(basis, "Basis", color=#FF6D00, offset = offset, display = display.none)
p1 = plot(upper, "Upper", color=#8d8d8d, offset = offset)
p2 = plot(lower, "Lower", color=#8d8d8d, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(177, 177, 177), display = display.none)


//Lagging Span
cclag = input(true, 'Enable Bull/Bear Colors')// Enables/disables color changing function

displacement = input.int(25, minval=1, title="Lagging Span")
lagcol       = input.color(#9b5dff, 'Barney Solid Color') //Solid color if color change function is not enabled
bullcol      = input.color(#9b5dff, 'Above BB Color') //Color if lagging span is above upper BB
insideBBcol  = input.color(#35b940, 'Inside BB Color') //Color if lagging span is between upper & lower BB
bearcol      = input.color(color.red, 'Below BB color') //Color if lagging span is below lower BB

xup = ta.crossover(close, upper)
xmid = ta.crossover(close, lower)
xdn = ta.crossunder(close, lower)

cclagcol = cclag ? xup ? bullcol :xmid ? insideBBcol : xdn ? bearcol : na : lagcol

plot(close, offset = -displacement + 1, color = cclagcol, title = "Lagging Span")


Solution

  • Your plot offset makes it so you have to look at the price on the upper and lower price values in the past with this:

    isOver = close > upper[displacement - 1]
    isBelow = close < lower[displacement - 1]
    

    Here is an image of the result I get with the following code. Green if it is over, purple if it is mid and red if it is below.

    isOver = close > upper[displacement - 1]
    isBelow = close < lower[displacement - 1]
    lagcol = isOver ? color.green : isBelow ? color.red : color.purple
    
    plot(close, offset = -displacement + 1, color = lagcol, title="Lagging Span")
    

    image of Tradingview plot lines

    full code:

    //@version=5
    indicator(title="Lagging span & BB", shorttitle="Lagging span & BB", overlay=true, timeframe="", timeframe_gaps=true)
    
    // Bollinger Band
    length = input.int(20, minval=1)
    src = input(close, title="Source")
    mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev")
    basis = ta.sma(src, length)
    dev = mult * ta.stdev(src, length)
    upper = basis + dev
    lower = basis - dev
    offset = input.int(0, "Offset", minval = -500, maxval = 500)
    
    plot(basis, "Basis", color=#FF6D00, offset = offset, display = display.none)
    p1 = plot(upper, "Upper", color=#8d8d8d, offset = offset)
    p2 = plot(lower, "Lower", color=#8d8d8d, offset = offset)
    fill(p1, p2, title = "Background", color=color.rgb(177, 177, 177), display = display.none)
    
    
    //Lagging Span
    displacement = input.int(25, minval=1, title="Lagging Span")
    
    isOver = close > upper[displacement - 1]
    isBelow = close < lower[displacement - 1]
    lagcol = isOver ? color.green : isBelow ? color.red : color.purple
    
    plot(close, offset = -displacement + 1, color = lagcol, title="Lagging Span")