Благодаря этому форуму я смог обновить его до версии 4, но, к сведению, версия 2 фактически была виновником перекраски, так как я дважды проверил. Это один из самых ранних алгоритмов Алекса Гровера, хотя по иронии судьбы один из лучших на сегодняшний день, но на самом деле он перерисовывается, когда это делают немногие. Я не знаю, насколько он будет полезен, когда его неизбежно отстают от исправления перекраски, но он никогда не создавал другой адаптивный LSMA, это единственный адаптивный, который я знаю. Так что я готов использовать его версию с пониженной эффективностью, если кто-то здесь сможет определить, что заставляет его перекрашиваться. Я подозреваю, что это barindex, но, прежде чем поставить его на колени, я хотел бы услышать мнения о том, как изменится это изменение, я полагаю.
study("Adaptive Least Squares", overlay=true)
src = input(title="EMA Source", type=input.source, defval=close)
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 = src
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)