如何在Pine Script的Supertrend指标中添加收盘价距Up Trend≤10%的警报条件?
Pine Script Supertrend警报条件添加问题解决办法
错误原因
你碰到的报错是因为upTrend是plot()函数返回的绘图对象,并非可参与数学运算的浮点数值序列,直接拿它和close做除法运算会触发类型不匹配错误。
解决思路
核心是把「趋势数值」和「绘图对象」分离:
- 先单独定义存储上涨/下跌趋势数值的变量,这些是浮点序列,能正常参与计算。
- 再用这些数值变量调用
plot()函数,绘图对象仅用于后续的色块填充操作。
修改后的完整代码
//@version=5 indicator("BEN - Supertrend", overlay = true, timeframe = "", timeframe_gaps = true) atrPeriod = input.int(30, "ATR Length", minval = 1) factor = input.float(6.0, "Factor", minval = 0.01, step = 0.01) [supertrend, direction] = ta.supertrend(factor, atrPeriod) supertrend := barstate.isfirst ? na : supertrend // 1. 定义可参与计算的趋势数值变量 upTrendVal = direction < 0 ? supertrend : na downTrendVal = direction < 0 ? na : supertrend // 2. 用数值变量绘制趋势线,返回绘图对象用于填充色块 upTrendPlot = plot(upTrendVal, "Up Trend", color = color.green, style = plot.style_linebr) downTrendPlot = plot(downTrendVal, "Down Trend", color = color.red, style = plot.style_linebr) bodyMiddle = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle",display = display.none) fill(bodyMiddle, upTrendPlot, color.new(color.green, 90), fillgaps = false) fill(bodyMiddle, downTrendPlot, color.new(color.red, 90), fillgaps = false) // 3. 添加符合要求的警报条件:趋势切换为上涨,且收盘价与Up Trend值偏差≤10% alertcondition( direction[1] > direction and (close / upTrendVal) >= 0.9 and (close / upTrendVal) <= 1.1, title='Downtrend to Uptrend (Price within 10% of Up Trend)', message='Supertrend切换为上涨趋势,且收盘价与Up Trend值偏差不超过10%' )
关键说明
upTrendVal完全对应数据窗口里显示的「Up Trend」数值,上涨趋势时等于supertrend,下跌时为na。- 警报条件里的
(close / upTrendVal) >= 0.9 and (close / upTrendVal) <= 1.1确保收盘价在Up Trend值的±10%区间内,可根据需求调整比例。
内容的提问来源于stack exchange,提问作者ben
相关产品推荐
相关产品推荐

