You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求Pine Script技术支持:实现滞后线基于布林带的变色功能

为TradingView滞后线添加布林带区间变色逻辑

需要给整合了滞后线(Lagging Span)与布林带(Bollinger Bands)的Pine Script脚本添加以下变色规则:

  • 滞后线位于布林带上轨上方时,显示颜色1
  • 滞后线位于布林带上下轨之间时,显示颜色2
  • 滞后线位于布林带下轨下方时,显示颜色3

原始脚本

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

// 布林带
length = input.int(20, minval=1)
src = input(close, title="数据源")
mult = input.float(2.0, minval=0.001, maxval=50, title="标准差倍数")
basis = ta.sma(src, length)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input.int(0, "偏移量", minval = -500, maxval = 500)

plot(basis, "中轨", color=#FF6D00, offset = offset, display = display.none)
p1 = plot(upper, "上轨", color=#8d8d8d, offset = offset)
p2 = plot(lower, "下轨", color=#8d8d8d, offset = offset)
fill(p1, p2, title = "背景填充", color=color.rgb(177, 177, 177), display = display.none)


// 滞后线
displacement = input.int(25, minval=1, title="滞后周期")
lagcol = input.color(#9b5dff, '固定颜色')

plot(close, offset = -displacement + 1, color = lagcol, title="滞后线")

尝试版本的问题分析

尝试版本1

版本1的颜色判断逻辑存在覆盖错误:close < upper 会包含close < lower的情况,导致位于下轨下方的滞后线被错误判定为区间内颜色,无法触发下轨下方的颜色。

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

// 布林带
length = input.int(20, minval=1)
src = input(close, title="数据源")
mult = input.float(2.0, minval=0.001, maxval=50, title="标准差倍数")
basis = ta.sma(src, length)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input.int(0, "偏移量", minval = -500, maxval = 500)

plot(basis, "中轨", color=#FF6D00, offset = offset, display = display.none)
p1 = plot(upper, "上轨", color=#8d8d8d, offset = offset)
p2 = plot(lower, "下轨", color=#8d8d8d, offset = offset)
fill(p1, p2, title = "背景填充", color=color.rgb(177, 177, 177), display = display.none)


// 滞后线
cclag = input(true, '启用多空颜色')// 开启/关闭变色功能

displacement = input.int(25, minval=1, title="滞后周期")
lagcol       = input.color(#9b5dff, '固定颜色') // 未启用变色时的颜色
bullcol      = input.color(#9b5dff, '上轨上方颜色') // 滞后线位于上轨上方时的颜色
insideBBcol  = input.color(#35b940, '区间内颜色') // 滞后线位于上下轨之间时的颜色
bearcol      = input.color(color.red, '下轨下方颜色') // 滞后线位于下轨下方时的颜色

// 错误逻辑:close < upper 覆盖了 close < lower 的情况
cclagcol = cclag ? close > upper ? bullcol : close < upper ? insideBBcol : close < lower ? bearcol : na : lagcol

plot(close, offset = -displacement + 1, color = cclagcol, title = "滞后线")

尝试版本2

版本2错误使用交叉函数(ta.crossover/ta.crossunder),仅在发生交叉的K线才会变色,无法实现“只要滞后线处于对应区间就持续显示对应颜色”的需求。

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

// 布林带
length = input.int(20, minval=1)
src    = input(close, title="数据源")
mult   = input.float(2.0, minval=0.001, maxval=50, title="标准差倍数")
basis  = ta.sma(src, length)
dev    = mult * ta.stdev(src, length)
upper  = basis + dev
lower  = basis - dev
offset = input.int(0, "偏移量", minval = -500, maxval = 500)

plot(basis, "中轨", color=#FF6D00, offset = offset, display = display.none)
p1 = plot(upper, "上轨", color=#8d8d8d, offset = offset)
p2 = plot(lower, "下轨", color=#8d8d8d, offset = offset)
fill(p1, p2, title = "背景填充", color=color.rgb(177, 177, 177), display = display.none)


// 滞后线
cclag = input(true, '启用多空颜色')// 开启/关闭变色功能

displacement = input.int(25, minval=1, title="滞后周期")
lagcol       = input.color(#9b5dff, '固定颜色') // 未启用变色时的颜色
bullcol      = input.color(#9b5dff, '上轨上方颜色') // 滞后线位于上轨上方时的颜色
insideBBcol  = input.color(#35b940, '区间内颜色') // 滞后线位于上下轨之间时的颜色
bearcol      = input.color(color.red, '下轨下方颜色') // 滞后线位于下轨下方时的颜色

// 错误使用交叉函数:仅交叉瞬间变色,无法持续显示区间颜色
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 = "滞后线")

正确实现脚本

调整颜色判断的逻辑顺序,先判断上轨上方,再判断下轨下方,最后覆盖区间内的情况,确保每个区间的判断互斥且完整。

//@version=5
indicator(title="滞后线&布林带", shorttitle="滞后线&布林带", overlay=true, timeframe="", timeframe_gaps=true)

// 布林带
length = input.int(20, minval=1, title="周期")
src = input(close, title="数据源")
mult = input.float(2.0, minval=0.001, maxval=50, title="标准差倍数")
basis = ta.sma(src, length)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input.int(0, "偏移量", minval = -500, maxval = 500)

plot(basis, "中轨", color=#FF6D00, offset = offset, display = display.none)
p1 = plot(upper, "上轨", color=#8d8d8d, offset = offset)
p2 = plot(lower, "下轨", color=#8d8d8d, offset = offset)
fill(p1, p2, title = "背景填充", color=color.rgb(177, 177, 177), display = display.none)


// 滞后线
cclag = input(true, '启用区间变色', tooltip="开启后根据布林带区间切换滞后线颜色")

displacement = input.int(25, minval=1, title="滞后周期")
lagcol       = input.color(#9b5dff, '固定颜色') // 未启用变色时的颜色
aboveUpperCol = input.color(#9b5dff, '上轨上方颜色') // 滞后线位于上轨上方时的颜色
insideBBCol  = input.color(#35b940, '区间内颜色') // 滞后线位于上下轨之间时的颜色
belowLowerCol = input.color(color.red, '下轨下方颜色') // 滞后线位于下轨下方时的颜色

// 正确区间判断逻辑:顺序判断,覆盖所有情况
cclagcol = cclag ? close > upper ? aboveUpperCol : close < lower ? belowLowerCol : insideBBCol : lagcol

plot(close, offset = -displacement + 1, color = cclagcol, title = "滞后线")

逻辑说明

  1. 优先判断close > upper:滞后线位于上轨上方时,使用上轨上方颜色
  2. 其次判断close < lower:滞后线位于下轨下方时,使用下轨下方颜色
  3. 剩余默认情况为lower <= close <= upper:滞后线在布林带区间内,使用区间内颜色
  4. 保留启用/关闭变色的开关,可快速切换固定颜色与区间变色模式

内容的提问来源于stack exchange,提问作者dawid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:37:02