Я же использовал деление суммы на N. В этом случае все перекрестные суммы уходят и формулы получаются очень компактные.
Может быть это и оправдано. Оценка получается смещённая, но если не работать с совсем уж короткими ЛР, точность вполне достаточна.
Смещенная по отношению к чему ? К классическому определению ? Или к нормальному распределению ? По-моему это никакого значения не имеет, ни при малых N, ни при больших.
ANG3110: Если интересно, вот прикладываю индикатор линейной регрессии без циклов. Считает регрессию из большого количества баров, за считанные доли секунды.
Да, это очень близко к MovingLR_2, цикл по истории (с закомментированной раскраской подъёмов/спусков) получается 1219 мсек, но MovingLR_2 (с добавленным расчётом А) уложился в 1078.
lna01: Может быть это и оправдано. Оценка получается смещённая, но если не работать с совсем уж короткими ЛР, точность вполне достаточна.
Смещенная по отношению к чему ? К классическому определению ? Или к нормальному распределению ? По-моему это никакого значения не имеет, ни при малых N, ни при больших.
Смещённая относительно истинной. Конкретно, у вас СКО занижено.
P.S. Но в отношении ценовых графиков это несущественно, поэтому я и согласился выше, что такое упрощение оправдано
ANG3110: Если интересно, вот прикладываю индикатор линейной регрессии без циклов. Считает регрессию из большого количества баров, за считанные доли секунды.
Да, это очень близко к MovingLR_2, цикл по истории (с закомментированной раскраской подъёмов/спусков) получается 1219 мсек, но MovingLR_2 (с добавленным расчётом А) уложился в 1078.
Если отключить раскраску, то считает в 1.5 раза быстрее. Обращение к массивам занимает много времени. Ну и если уж нужен типа рекорда по скорости, можно было бы использовать еще кое-какие, приемы. Но мне ж премию за это не дадут.
Кстати наскоро глянув код MovingLR_2 я не увидел расчета коэффициентов линии a и b, а они как раз и являются на мой взгляд наибольшей ценностью, так как в этом случае можно строить функцию угла и измерять скорость тренда. А в at_LR0 они счтаются на каждом баре. Значит и СКО можно считать на каждом баре. И еще MovingLR_2 выдает не чистую линейную регрессию, а что то близкое. Когда рисуется просто положение конца, это не очень принципиально, но есть случаи, когда нужна абсолютно точная линейная регрессия.
ANG3110 писал (а): я не увидел расчета коэффициентов линии a и b
К-ты a и b можно считать напрямую с помощью формулы LR = (3*LW - 2*S) MA. Тогда при условии, что бар под номером i - "текущий" бар, т.е. последний в текущей линии регрессии:
LR(Bar i) = a*i + b LR(Bar i-1) = a*(i-1) + b
Откуда
a = LR(Bar i) - LR(Bar i-1) b = LR(Bar i) - a*i
Или я чего-то намудрил? Конечно, a и b зависят от i, как и положено.
Или я чего-то намудрил? Конечно, a и b зависят от i, как и положено.
Конечно намудрил. Так нельзя считать. a и b являются функцией минимального ср.кв. отклонения вдоль всего периода. a - это угол наклона линии вдоль всего периода. А приращение положения конца LR, даст не угол всей регрессии, а только изменение коэффициента b, который кстати и является координатой положения конца линии.
Если отключить раскраску, то считает в 1.5 раза быстрее. Обращение к массивам занимает много времени.
Именно поэтому для теста я её и отключил - цифры приведены для отключённой раскраски.
Ну и если уж нужен типа рекорда по скорости, можно было бы использовать еще кое-какие, приемы.
На самом деле алгоритмы очень близки. В at_LR0 можно немного экономнее работать с индексами. Дополнительно у меня использован приём с закольцованным указателем, собственно основным мотивом для сравнения скорости была оценка его эффективности.
Кстати наскоро глянув код MovingLR_2 я не увидел расчета коэффициентов линии a и b,
...
И еще MovingLR_2 выдает не чистую линейную регрессию, а что то близкое. Когда рисуется просто положение конца, это не очень принципиально, но есть случаи, когда нужна абсолютно точная линейная регрессия.
Коэффициенты линии a и b рассчитываются вот в этих строчках. A = (SumXY - N3*SumY)*N4; B = (N1*SumY - SumXY)*N2; Для наглядности прилагаю версию MovingLR_2, которая просто рисует текущую линейную регрессию. Тем более, что в предыдущей была помарка при расчёте N4 :)
MovingLR_2 выдает чистую линейную регрессию и убедиться в этом достаточно легко. В at_LR0 неточен переход от периода в часах к периоду в барах. Если в at_LR0 заменить Close на (High+Low)/2 и взять период 1, в MovingLR_2 задать период не 60 а 61 и повесить их на минутный график, результаты полностью совпадут.
P.S. Кстати, Mathemat, at_LR0 как раз хороший пример, как в такого типа алгоритме делать обсчёт нулевого бара
Я же использовал деление суммы на N. В этом случае все перекрестные суммы уходят и формулы получаются очень компактные.
Смещенная по отношению к чему ? К классическому определению ? Или к нормальному распределению ? По-моему это никакого значения не имеет, ни при малых N, ни при больших.
А это только преданным участникам данной темы или и другим( я о себе ) можно приобщиться...(получить костюмчик).
Если интересно, вот прикладываю индикатор линейной регрессии без циклов. Считает регрессию из большого количества баров, за считанные доли секунды.
А это только преданным участникам данной темы или и другим( я о себе ) можно приобщиться...(получить костюмчик).
Спасибо большое...Реально приятно такое отношение...Уже получил и сижу изучаю.
Может быть это и оправдано. Оценка получается смещённая, но если не работать с совсем уж короткими ЛР, точность вполне достаточна.
Смещенная по отношению к чему ? К классическому определению ? Или к нормальному распределению ? По-моему это никакого значения не имеет, ни при малых N, ни при больших.
P.S. Но в отношении ценовых графиков это несущественно, поэтому я и согласился выше, что такое упрощение оправдано
Если интересно, вот прикладываю индикатор линейной регрессии без циклов. Считает регрессию из большого количества баров, за считанные доли секунды.
Если отключить раскраску, то считает в 1.5 раза быстрее. Обращение к массивам занимает много времени. Ну и если уж нужен типа рекорда по скорости, можно было бы использовать еще кое-какие, приемы. Но мне ж премию за это не дадут.
Кстати наскоро глянув код MovingLR_2 я не увидел расчета коэффициентов линии a и b, а они как раз и являются на мой взгляд наибольшей ценностью, так как в этом случае можно строить функцию угла и измерять скорость тренда. А в at_LR0 они счтаются на каждом баре. Значит и СКО можно считать на каждом баре. И еще MovingLR_2 выдает не чистую линейную регрессию, а что то близкое. Когда рисуется просто положение конца, это не очень принципиально, но есть случаи, когда нужна абсолютно точная линейная регрессия.
LR(Bar i) = a*i + b
LR(Bar i-1) = a*(i-1) + b
Откуда
a = LR(Bar i) - LR(Bar i-1)
b = LR(Bar i) - a*i
Или я чего-то намудрил? Конечно, a и b зависят от i, как и положено.
Или я чего-то намудрил?
Ты ещё не спишь...?
Или я чего-то намудрил? Конечно, a и b зависят от i, как и положено.
Конечно намудрил. Так нельзя считать. a и b являются функцией минимального ср.кв. отклонения вдоль всего периода. a - это угол наклона линии вдоль всего периода. А приращение положения конца LR, даст не угол всей регрессии, а только изменение коэффициента b, который кстати и является координатой положения конца линии.
Если отключить раскраску, то считает в 1.5 раза быстрее. Обращение к массивам занимает много времени.
Ну и если уж нужен типа рекорда по скорости, можно было бы использовать еще кое-какие, приемы.
Кстати наскоро глянув код MovingLR_2 я не увидел расчета коэффициентов линии a и b,
...
И еще MovingLR_2 выдает не чистую линейную регрессию, а что то близкое. Когда рисуется просто положение конца, это не очень принципиально, но есть случаи, когда нужна абсолютно точная линейная регрессия.
A = (SumXY - N3*SumY)*N4;
B = (N1*SumY - SumXY)*N2;
Для наглядности прилагаю версию MovingLR_2, которая просто рисует текущую линейную регрессию. Тем более, что в предыдущей была помарка при расчёте N4 :)
MovingLR_2 выдает чистую линейную регрессию и убедиться в этом достаточно легко. В at_LR0 неточен переход от периода в часах к периоду в барах. Если в at_LR0 заменить Close на (High+Low)/2 и взять период 1, в MovingLR_2 задать период не 60 а 61 и повесить их на минутный график, результаты полностью совпадут.
P.S. Кстати, Mathemat, at_LR0 как раз хороший пример, как в такого типа алгоритме делать обсчёт нулевого бара