首页 > 解决方案 > 自引用变量 *** 我错过了什么?

问题描述

请找到计算超趋势指标的代码

study("VJ2 Supertrend V1.0 - Buy or Sell Signal", overlay = true)

Factor=input(3.0, minval=1,maxval = 140)
Pd=input(14, minval=1,maxval = 140)

Up=hl2-(Factor*atr(Pd))
Dn=hl2+(Factor*atr(Pd))

TrendUp=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn

Trend = close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
Tsl = Trend==1? TrendUp: TrendDown

linecolor = Trend == 1 ? green : red
plot(Tsl, color = linecolor , style = line , linewidth = 2,title = "SuperTrend")

在这里,“TrendUp”变量是基于其在前一个柱“TrendUp[1]”中的值计算的。

因此,它是一个递归计算。

我不明白的是如何计算变量“TrendUp”的第一个值。例如:

  1. 对于 1 号柱,无法计算 "TrendUp" 的值,因为前一个柱的 "TrendVar" 值不存在
  2. 对于 2 号柱,无法计算 "TrendUp" 的值,因为 1 号柱的 "TrendVar" 值不存在
  3. 等等...

一定有我遗漏的东西,因为 SuperTrend 指标工作正常。

有人可以帮忙吗?

标签: pine-script

解决方案


第一个值实际上设置为na 如果您尝试代码:

study("my script")
m = m[1]
plot(m)

然后你会看到n/a。为了克服这个问题,您需要使用该函数编写一个具有自引用的代码nz()(或使用您在代码段中所做的额外条件):

study("my script")
m = nz(m[1])
// m = nz(m[1], 4)  // or alternatively with installing a value if na
plot(m)

注意:您使用的是 pine 的过时版本(没有任何显式版本),在当前版本的 pine(版本 = 3)中它不起作用 - 您需要在引用之前的值之前设置一个值:

//@version=3
study("my script")
m = 0
m := nz(m[1])
plot(m)

推荐阅读