努力将 v2 转换为 v4 pinescript,"Cannot modify global variable inside function" 错误
Struggling with v2 to v4 pinescript Conversion, "Cannot modify global variable inside function" Error
努力将 v2 转换为 v4 pinescript,"Cannot modify global variable inside function" 错误而且我不太确定如何访问变量并在函数内部进行修改以完成循环,但它没有显示在图表上.
我已经尝试在函数内部 p = 0 后跟 p := "normal function text" 进行编译,但指标从图表中消失了。 V4 pine 显然通过错误的语法影响了数学计算。
https://www.tradingview.com/script/9P5AUAMl-Adaptive-Least-Squares/
//@version=2
study("Adaptive Least Squares",overlay=true)
length = input(500),smooth = input(1.5)
//
alpha = pow(tr/highest(tr,length),smooth)
m(a) =>
p = alpha * a + (1-alpha) * nz(p[1],a)
//
x = n
y = close
x_ = m(x)
y_ = m(y)
//
dx = abs(x-x_)
dy = abs(y-y_)
mx = m(dx)
my = m(dy)
//
a1 = pow(2/alpha+1,2)*m(x*y) - ((2/alpha+1)*m(x))*((2/alpha+1)*m(y))
b1 = sqrt((pow(2/alpha+1,2)*m(x*x) - pow((2/alpha+1)*m(x),2)) * (pow(2/alpha+1,2)*m(y*y) - pow((2/alpha+1)*m(y),2)))
r = a1/b1
//
a = r * (my/mx)
b = y_ - a*x_
reg = x*a + b
//
plot(reg,color=red,transp=0)
我觉得v.4应该是这样的:
//@version=4
study("Adaptive Least Squares", overlay=true)
length = input(500)
smooth = input(1.5)
//
alpha = pow(tr / highest(tr, length), smooth)
m(a, prevVal) =>
alpha * a + (1 - alpha) * nz(prevVal, a)
//
x = bar_index
y = close
x_ = 0.0
x_ := m(x, x_[1])
y_ = 0.0
y_ := m(y, y_[1])
//
dx = abs(x - x_)
dy = abs(y - y_)
mx = 0.0
mx := m(dx, mx[1])
my = 0.0
my := m(dy, my[1])
//
xx = 0.0
xx := m(x * x, xx[1])
xy = 0.0
xy := m(x * y, xy[1])
yy = 0.0
yy := m(y * y, yy[1])
a1 = pow(2 / alpha + 1, 2) * xy - (2 / alpha + 1) * x_ * (2 / alpha + 1) * y_
b1 = sqrt((pow(2 / alpha + 1, 2) * xx - pow((2 / alpha + 1) * x_, 2)) * (pow(2 / alpha + 1, 2) * yy - pow((2 / alpha + 1) * y_, 2)))
r = a1 / b1
//
a = r * (my / mx)
b = y_ - a * x_
reg = x * a + b
//
plot(reg, color=color.red, transp=0)
努力将 v2 转换为 v4 pinescript,"Cannot modify global variable inside function" 错误而且我不太确定如何访问变量并在函数内部进行修改以完成循环,但它没有显示在图表上.
我已经尝试在函数内部 p = 0 后跟 p := "normal function text" 进行编译,但指标从图表中消失了。 V4 pine 显然通过错误的语法影响了数学计算。
https://www.tradingview.com/script/9P5AUAMl-Adaptive-Least-Squares/
//@version=2
study("Adaptive Least Squares",overlay=true)
length = input(500),smooth = input(1.5)
//
alpha = pow(tr/highest(tr,length),smooth)
m(a) =>
p = alpha * a + (1-alpha) * nz(p[1],a)
//
x = n
y = close
x_ = m(x)
y_ = m(y)
//
dx = abs(x-x_)
dy = abs(y-y_)
mx = m(dx)
my = m(dy)
//
a1 = pow(2/alpha+1,2)*m(x*y) - ((2/alpha+1)*m(x))*((2/alpha+1)*m(y))
b1 = sqrt((pow(2/alpha+1,2)*m(x*x) - pow((2/alpha+1)*m(x),2)) * (pow(2/alpha+1,2)*m(y*y) - pow((2/alpha+1)*m(y),2)))
r = a1/b1
//
a = r * (my/mx)
b = y_ - a*x_
reg = x*a + b
//
plot(reg,color=red,transp=0)
我觉得v.4应该是这样的:
//@version=4
study("Adaptive Least Squares", overlay=true)
length = input(500)
smooth = input(1.5)
//
alpha = pow(tr / highest(tr, length), smooth)
m(a, prevVal) =>
alpha * a + (1 - alpha) * nz(prevVal, a)
//
x = bar_index
y = close
x_ = 0.0
x_ := m(x, x_[1])
y_ = 0.0
y_ := m(y, y_[1])
//
dx = abs(x - x_)
dy = abs(y - y_)
mx = 0.0
mx := m(dx, mx[1])
my = 0.0
my := m(dy, my[1])
//
xx = 0.0
xx := m(x * x, xx[1])
xy = 0.0
xy := m(x * y, xy[1])
yy = 0.0
yy := m(y * y, yy[1])
a1 = pow(2 / alpha + 1, 2) * xy - (2 / alpha + 1) * x_ * (2 / alpha + 1) * y_
b1 = sqrt((pow(2 / alpha + 1, 2) * xx - pow((2 / alpha + 1) * x_, 2)) * (pow(2 / alpha + 1, 2) * yy - pow((2 / alpha + 1) * y_, 2)))
r = a1 / b1
//
a = r * (my / mx)
b = y_ - a * x_
reg = x * a + b
//
plot(reg, color=color.red, transp=0)