pine-script - 自引用变量 *** 我错过了什么?
问题描述
请找到计算超趋势指标的代码
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 号柱,无法计算 "TrendUp" 的值,因为前一个柱的 "TrendVar" 值不存在
- 对于 2 号柱,无法计算 "TrendUp" 的值,因为 1 号柱的 "TrendVar" 值不存在
- 等等...
一定有我遗漏的东西,因为 SuperTrend 指标工作正常。
有人可以帮忙吗?
解决方案
第一个值实际上设置为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)
推荐阅读
- swift - Xcode / 斯威夫特 | 单击或键入 UITextField 时,按钮会变回原来的位置
- javascript - NodeJS 读取多个文件阻塞并返回快速响应
- spring - 路径变量或请求参数?
- git - 在 Git 中分支除 master 分支之外的任何其他分支时添加警告的最佳方法是什么
- sass - 如何在 scss 中简单地设置样式,以便多个元素使用相同的样式
- android - Expandable ListView 将子数据复制到父数据中
- wordpress - 如何使用 Action Scheduler WordPress 作业队列
- ruby-on-rails-5 - 安装 escape_utils (1.2.1) 时出错
- vb.net - 按列值查找行
- asp.net-mvc - 参考操作的Odata路由,缺乏文档