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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:32:02