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

Pine Script超级趋势代码咨询:trend变量取值逻辑疑问

关于Supertrend指标中trend变量的逻辑解析

1. trend不是数组,是Pine Script的「序列变量」

Pine Script里的普通变量默认是序列(Series),它不是传统意义上的数组,但会自动保存每一根K线的历史值,trend[1]指的就是上一根K线的trend值。

  • 代码里trend = 1只是给当前K线一个临时初始值,紧接着的trend := nz(trend[1], trend)是用nz()函数做兜底:如果上一根K线的trend有值(非空),就直接继承上一根的状态;如果是第一根K线(上一根无历史值),就用当前的初始值1。
  • 这么写的目的是让trend能持续延续之前的趋势状态,不会每根K线都被重置为1。

2. 为什么刚赋值1,还要判断trend == -1

初始的trend = 1只是当前K线的临时占位值,执行trend := nz(trend[1], trend)之后,trend的实际值已经变成了上一根K线的趋势状态——如果之前的趋势是向下(值为-1),那当前K线的trend就会继承这个-1。

  • Supertrend的核心逻辑是「趋势延续,直到反转信号出现」:只有当价格突破上轨/下轨时,趋势才会切换。后续判断trend == -1,本质是在检查当前继承的趋势是否为向下,从而决定要不要触发向上反转的逻辑。
  • 你简化条件后趋势线变化,就是因为跳过了对历史趋势状态的判断,破坏了「趋势不轻易反转」的核心规则,导致指标频繁切换趋势。

举个实际运行流程的例子:

  1. 第一根K线:trend[1]为空,所以trend = nz(na, 1) → 最终值为1(上升趋势)
  2. 第二到第N根K线:如果没触发反转信号,trend会一直继承上一根的1
  3. 某根K线触发向下反转信号:trend被赋值为-1
  4. 下一根K线:trend := nz(trend[1], 1) → 继承上一根的-1,此时判断trend == -1就会成立,执行对应向下趋势的逻辑

内容的提问来源于stack exchange,提问作者bkyle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:12:03