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,本质是在检查当前继承的趋势是否为向下,从而决定要不要触发向上反转的逻辑。 - 你简化条件后趋势线变化,就是因为跳过了对历史趋势状态的判断,破坏了「趋势不轻易反转」的核心规则,导致指标频繁切换趋势。
举个实际运行流程的例子:
- 第一根K线:
trend[1]为空,所以trend = nz(na, 1)→ 最终值为1(上升趋势) - 第二到第N根K线:如果没触发反转信号,
trend会一直继承上一根的1 - 某根K线触发向下反转信号:
trend被赋值为-1 - 下一根K线:
trend := nz(trend[1], 1)→ 继承上一根的-1,此时判断trend == -1就会成立,执行对应向下趋势的逻辑
内容的提问来源于stack exchange,提问作者bkyle
相关产品推荐
相关产品推荐

