我是 Pinescript 的初学者。我正在研究紫云,但是有一些地方我不明白。
b1 = 0.0
s14 =ta.sma(close,14)
b1 := na(b1[1])? s14:(b1[1]*13+close)/14
我认为b1的初始值为0.0,na(b1[1])返回false,所以如果继续(b1(1)*13 + close)/14,b1(1)为0,所以close/ 14应该出来了。看似可行,但实际上输出的是不同的值。 即使我用 sma(close,14)[1] 的值进行计算,我也得到了相似但不同的值。 当我打印b1(1)的值时,出现了非0的值,但我不知道错误在哪里。 b1(1) 的值从何而来?
//@version=5
strategy("Purple Cloud [MMD]",overlay=true, timeframe="", timeframe_gaps=true)
atrPeriod = 10
factor = 3.0
[supertrend, direction] = ta.supertrend(factor, atrPeriod)
x1 = 14
alpha = 0.7
bpt=1.4
spt=1.4
x2 = ta.atr(x1) * alpha
xh = close + x2
xl = close - x2
a1=ta.vwma(hl2*volume,3)/ta.vwma(volume,3)
a2=ta.vwma(hl2*volume,math.ceil(14/2))/ta.vwma(volume,math.ceil(14/2))
a3=2*a1-a2
a4=ta.vwma(a3,14)
----------------------------------------------------------------------------
b1 = 0.0
b1 := na(b1[1]) ? ta.sma(close, x1) : (b1[1] * (x1 - 1) + close) / x1
我知道使用三元运算符会变成 false,但我想知道重新分配的 b1[1] 的值是如何计算的。
在 Pine 脚本中,
b1[1]
指的是前一柱上 b1
的值。当脚本在第一个柱上运行时,b1[1]
将为 na
,因为没有 b1
的先前值可供参考。此条件 na(b1[1])
计算结果为 true,导致三元运算符执行第一部分 ta.sma(close, x1)
。随着脚本执行的进行,b1[1]
会保留 b1
之前的值。三元运算符的第一部分 ta.sma(close, x1)
将返回 na
,直到有足够的柱来计算 SMA 值。之后,第二部分将始终执行,因为b1[1]
将永远不会再次成为na
。