技术分析 · Supertrend

Supertrend 是什么?—
参数怎么调、为什么适合当自动下单信号

2026-08-18·10 分钟阅读

你把 Supertrend 挂上 TradingView。线是绿的、多头;线一翻红、就是空头。你把「翻色」设成 alert 条件,接上 webhook(TradingView 触发时打出去的 HTTP 通知)打去 TVSBot 或任何一个执行端。第一次跑起来,你会遇到两件事。

第一件:K 线还没收,信号先跳一下就送出去了。第二件:同一根 K 线后来又翻回去,等你反应过来仓位已经反手了两次,手续费先付了一轮。这不是 Supertrend 坏了,也不是你的策略逻辑错——是它「当下就给你答案」的性格跟自动下单的节奏对不上。

先讲结论
Supertrend 的翻转信号要跟 K 线收盘绑在一起送。Pine Script(也就是 TradingView 内置的策略语言)的做法有两种:alertcondition() 加上 UI 的「Once Per Bar Close」触发模式、或者在条件里加 barstate.isconfirmed。两种都能挡掉 K 线收盘前的闪烁。这是这篇最重要的一句话。

Supertrend 在算什么——ATR 决定宽度,close 决定方向

Supertrend 的计算分两层。第一层是基本带:以每根 K 线的中点 (high + low) / 2 为中线,往上往下各推 multiplier × ATR 得到上下轨。ATR 是 Average True Range,量的是这段时间的波动——ATR 大代表最近震得凶,带就宽;ATR 小代表相对平静,带就窄。

第二层是趋势锁定:这条线画出来的时候,是走上轨还是下轨,取决于当前是多头还是空头。空头时画上轨、上轨只能往下步进(如果新的一根 K 线算出来上轨变宽,会保留原本较窄的那条);多头时画下轨、下轨只能往上步进。方向翻转的触发条件很单纯:收盘价穿越当前那条线。close 从下轨上方跌破下轨,翻空;close 从上轨下方突破上轨,翻多。

这条规则的用处
「trailing」是这个机制的关键。它让 Supertrend 在趋势里不会被杂讯摇回中线——一旦锁定方向,只有实际反转才会跳线。这也是为什么很多人拿它当**动态止损**用:多头时 Supertrend 的那条线就是你的止损位,跌破就出。

两个参数:ATR 周期与 multiplier

Supertrend 就两个旋钮,其他都是这两个推导出来的。

10
TradingView 内置 Supertrend 的 ATR 周期默认值
3
multiplier 默认倍数
-1 / +1
direction 值:多头 / 空头
参数在做什么调大的效果调小的效果
ATR 周期算 ATR 的取样长度(K 线数)波动计算更平滑、反应变慢波动计算对近期更敏感、翻转更频繁
multiplier带到中线的距离(几倍 ATR)带变宽、翻转次数变少、容忍杂讯带变窄、信号变密、抓小波动

Supertrend 的两个参数与它们各自影响哪一件事。(查证日期 2026 年 8 月)

TradingView 内置的 ta.supertrend(factor, atrPeriod) 默认是 ATR 周期 10、multiplier 3。TVSBot 的 Pine 模板页也是同一组,这是这个组合在圈子里的默认起点——不是「最好」,是「大家都从这里开始」。你要偏保守就把 multiplier 拉到 4 或 5、要偏敏感就调到 2。

pine
//@version=5
        strategy("TVSBot SuperTrend", overlay=true)

        atrPeriod = input.int(10, "ATR 周期")
        factor    = input.float(3.0, "SuperTrend 倍数")

        [supertrend, direction] = ta.supertrend(factor, atrPeriod)

        longCondition  = ta.change(direction) < 0  // 从空翻多
        shortCondition = ta.change(direction) > 0  // 从多翻空

        if longCondition
            strategy.entry("Long",  strategy.long,  alert_message='{"side":"buy"}')
        if shortCondition
            strategy.entry("Short", strategy.short, alert_message='{"side":"sell"}')

这段是 TVSBot 官方 Pine 模板,来源 /docs/pine-templatesta.supertrend() 的第一个返回是那条线的价位,第二个是方向:-1 是多头、1 是空头。用 ta.change(direction) < 0 就是「这一根从空翻多」。

为什么它比 RSI/MACD 更适合当自动下单信号

震荡类指标——RSI(相对强弱指数)、MACD(快慢均线差)——的信号本质是连续数值:RSI 是 0 到 100 之间的数字、MACD histogram 是持续浮动的差值。你要拿它当自动下单信号,得自己在上面拉一条线(RSI 低于 30 买、histogram 穿零轴买),而那条线在盘整区会被反复穿越。

Supertrend 不一样,它直接产出离散状态——只有 updown 两种,翻转是一次明确的事件。没有「差一点就翻」、也没有「即将翻」。这对送 webhook 特别重要,因为 webhook 只知道「触发」跟「没触发」,它没办法送出「快翻了」这种暧昧状态。

RSI / MACDSupertrend
信号本质连续数值离散方向
翻转判定穿越自定阈值穿越当前 trailing band
止损位置需另外定义指标线本身
盘整区行为杂讯多、容易误触翻转少但一翻就整段
适合作 webhook 条件要另加滤网翻转就是条件

要讲清楚的是:这不代表 Supertrend 一定「比较准」。它只是结构上跟自动下单的接口更合——你不用写太多 wrapper 就能把它变成一个干净的信号源。

但——K 线收盘前的信号会反复

Pine Script 对「当前 K 线」的计算方式是这样的:每一个 tick(成交跳动)进来,它都会用「假设这根 K 线现在就收在这个价位」的前提重新算一次。所以你在图表上看 Supertrend 的当前那一段,其实一直在被覆写。

这不是传统定义的 repainting,但效果很像
过去的 K 线不会被改(那才是严格定义的 repainting);但当前这根 K 线的 direction 值,在它收盘之前每个 tick 都可能不同。你把 alert 设成「Once Per Bar」,会在条件第一次满足时就触发——即使那个满足只维持了半秒。K 线收盘那一刻真正的 direction 可能完全相反。

Pine 有两个现成机制挡这件事。alertcondition() 在 TradingView UI 上可以选 Once Per Bar Close,这样只有 K 线收盘那一刻条件满足才会触发。barstate.isconfirmed 这个内置变量在 K 线收盘那一刻才是 true,把它加进 if 条件里就能过滤掉 intra-bar 的闪烁。

上面的模板是 strategy.entryalert()/alert 条件的路线,正常路径是靠 alert 建立时的触发设置。如果你另外用 alertcondition() 拉一条自定条件出来,那就一定要选 close 那个选项——不然前面讲的一切就白做了。

接入 webhook 前必查的四件事

下面五条里任何一条没过,你的 Supertrend 信号都会在盘中反复或跟你想象的不一样。全部过了再上实盘。

1
Alert 触发模式选了 Once Per Bar Close 吗?
没有先回去 alert 设置改。这是 0 号问题,其他都不用查。
往下一题。
2
Data Window 的 direction 在盘中会来回跳吗?
正常。K 线收盘前的信号不作数,等收盘那笔再看。
不会你的 timeframe 可能对不上——确认图表与 alert 挂在同一个周期上。
3
dry-run 跑几天,信号时间戳对得上图表翻色的位置吗?
对得上可以上实盘。
有偏差回去查前两题,多数是 alert 触发模式或 timeframe 没对齐。
  • Alert 建立时,触发模式选 Once Per Bar Close,不要选 Once Per Bar。后者在条件第一次成立时就触发,K 线收盘前反复是常态。
  • 如果你自己写 alertcondition(),或者 strategy 的进出场条件不想倚赖 UI 设置,就在条件里加 and barstate.isconfirmed。这是 Pine 官方推荐的 intra-bar 过滤方式。
  • 用 TradingView 的 Data Window(右上角 {} 图示 → Data Window)看 direction 这栏的值。在盘中盯一根 K 线的实时变化,如果它会来回跳,你的 alert 就会照跳一次。
  • webhook payload 里的 {{strategy.order.action}} 是 TradingView 在触发那一刻的订单方向。K 线没收盘前送出去的方向,跟收盘后不见得一样——所以第一件事一定要做,不然这条 payload 就是骗自己。
  • 在 TVSBot 的 dashboard 开 dry-run(不实际下单、只跑执行流程)跑几天,比对每一次 Supertrend 翻转的图表位置跟 dashboard 收到的信号时间戳。有偏差就回去查前三条。

诚实的一段:Supertrend 不擅长的事

Supertrend 在单边趋势里表现最好——锁定方向后只吃顺风。反过来,在盘整区它会被反复打耳光:带收得再宽,价格在中间震来震去终究会穿越某条线,然后翻回来、再翻过去。这不是参数没调好,是这个指标的结构就会这样。

它也只给你方向,不给你仓位大小。从空翻多是 buy、从多翻空是 sell,但要 buy 多少、要不要加码、什么时候止盈,都是另一件事。TVSBot 的 payload 里 margin_pcttp_pctsl_pct 这几个字段是 Supertrend 信号之外你要自己决定的部分(webhook 自动交易的仓位怎么抓那篇拆得更细)。指标本身不知道你的账户大小,也不管你的风险胃纳。

另一件实际使用者常忽略的事:Supertrend 的信号是给那个时间周期的。你在 4H 图上调好的参数,换到 15m 图不能直接用。Multiplier 3 在 4H 是稳健,在 5m 上可能就是每两小时一次翻转。参数要跟你打算跑的 timeframe 一起调,不然你以为在跑一个保守策略,实际跑的是杂讯机。

常见问题

默认参数(ATR 10、multiplier 3)真的可以直接用吗?
可以当起点,不要当终点。这组是 ta.supertrend() 常见的 demo 值、也是 TVSBot 模板的默认,但真正合不合适要看你的 timeframe 与标的的波动特性。用 TradingView 的 Strategy Tester 把 ATR 周期在 7 到 14、multiplier 在 2 到 5 之间各跑一轮回测,选出你能忍受最大回撤的那组。
为什么线的颜色翻了,但 direction 值没变?
几乎都是 timeframe 对不上——你图表放 15m、alert 挂在 1H;或者你正在看即时 K 线,方向会来回变。用 Data Window 对 direction 那一栏可以直接看到当下的实际值。
Once Per Bar Close 会不会让我进场慢一根?
会,但这是刻意的。K 线收盘才确定「这根真的翻了」,收盘前的信号可能撤回,那不是保守、是杂讯。历史回测跟实盘要用同一个触发模式,不然回测数字骗人。
Supertrend 可以跟其他指标搭配吗?
可以,而且盘整区很需要。常见做法是加一个趋势确认滤网——例如 200 EMA(见 均线完整教学)当方向、只做顺向 Supertrend 翻转——或加 volume 条件过滤掉低量翻转。过滤器越多、信号越少,这是取舍。
我用 Supertrend 送 webhook 给 TVSBot,可以在同一个 Pine 文件里下多笔单吗?
可以,但默认行为跟直觉相反:strategy()pyramiding 参数默认是 0,意思是「同方向只允许 1 笔进场,之后的同方向 strategy.entry() 会被 rejected」。想真的加码得在 strategy(...) 宣告里显式写 pyramiding=2(或更大)。想开多个独立仓位就用 TVSBot 的 strategy 字段在 payload 里区分策略、或每个仓位跑独立的 Pine 文件。这件事跟 Supertrend 无关,跟 Pine 仓位大小处理那类坑有关。

Get started

想把今天学到的东西自动化跑起来?

把 Supertrend 的翻转信号接入交易所——TVSBot 用你自己的 API key、支持 dry-run、风控自己设。7 家交易所都能打。

免费开始使用