Еще одна ошибка перерисовки в PineScript v4: Адаптивная скользящая средняя наименьших квадратов - PullRequest
0 голосов
/ 06 января 2020

Благодаря этому форуму я смог обновить его до версии 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)
...