寻求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 = "滞后线")
逻辑说明
- 优先判断
close > upper:滞后线位于上轨上方时,使用上轨上方颜色 - 其次判断
close < lower:滞后线位于下轨下方时,使用下轨下方颜色 - 剩余默认情况为
lower <= close <= upper:滞后线在布林带区间内,使用区间内颜色 - 保留启用/关闭变色的开关,可快速切换固定颜色与区间变色模式
内容的提问来源于stack exchange,提问作者dawid
相关产品推荐
相关产品推荐

