Pine Script:如何将高低价与布林带上下轨对比?
修正布林带高低价对比的Pine Script代码
问题原因
ta.bb() 函数的作用是计算布林带的中轨(即指定周期的简单移动平均线),它的第三个参数是标准差乘数,但该函数不会直接返回上轨或下轨。你原来的代码试图用ta.bb(close[2],20,+2)获取上轨,这是对函数用法的误解,导致逻辑错误。
修正方案
方案1:使用官方提供的上轨/下轨函数
Pine Script内置了ta.bbupper()和ta.bblower()函数,可直接获取布林带的上轨和下轨,代码更简洁:
//@version=5 indicator("布林带价格对比", overlay=true) // 计算2周期前的布林带上轨与下轨 bb_upper = ta.bbupper(close[2], 20, 2) bb_lower = ta.bblower(close[2], 20, 2) // 判断2周期前的最高价触碰上轨、最低价触碰下轨 E = high[2] >= bb_upper F = low[2] <= bb_lower // 可选:绘制信号标记 plotshape(E, title="上轨触碰", location=location.belowbar, color=color.new(color.green, 0), style=shape.labelup, text="上轨", textcolor=color.white) plotshape(F, title="下轨触碰", location=location.abovebar, color=color.new(color.red, 0), style=shape.labeldown, text="下轨", textcolor=color.white)
方案2:手动计算上轨/下轨
如果你想手动实现布林带计算逻辑,可以基于中轨和标准差推导:
//@version=5 indicator("布林带价格对比", overlay=true) length = 20 mult = 2 // 计算2周期前的中轨(等价于ta.sma(close[2], length)) bb_mid = ta.bb(close[2], length, mult) // 计算2周期前的收盘价标准差 std_dev = ta.stdev(close[2], length) // 推导上轨与下轨 bb_upper = bb_mid + std_dev * mult bb_lower = bb_mid - std_dev * mult // 判断条件 E = high[2] >= bb_upper F = low[2] <= bb_lower // 可选:绘制信号标记 plotshape(E, title="上轨触碰", location=location.belowbar, color=color.new(color.green, 0), style=shape.labelup, text="上轨", textcolor=color.white) plotshape(F, title="下轨触碰", location=location.abovebar, color=color.new(color.red, 0), style=shape.labeldown, text="下轨", textcolor=color.white)
关键注意事项
- 必须声明Pine Script版本(
//@version=5),这是代码正常运行的前提 high[2]和close[2]表示取当前K线往前数第2根K线的数据,如果你需要对比当前K线,去掉[2]即可- 指标初始化阶段可能会出现数据不足的情况,可通过
ta.barssince()等函数过滤无效信号
内容的提问来源于stack exchange,提问作者Avi Singh
相关产品推荐
相关产品推荐

