Помогите написать линейную регрессию - страница 2

 
kvn писал (а): ТАК ГДЕ ЖЕ ОШЫБКА [...] ???????
DNA?
 
kvn:
Не буду спорить про ЛР. ТАК ГДЕ ЖЕ ОШЫБКА В КОДЕ ИНДИКАТОРА???????
Да кто же его знает. Никто не знает какой алгоритм Вы пытаетесь реализовать. Напишите сначала идею, затем формулы, а затем объяснение - вод этот кусок кода выполняет то-то и то-то. А гадать никто не будет.
 
ещё раз
как вычисляется ЛР
//Индикатор строится по формуле:LR = at+b
//где LR - прогнозируемая "средняя" цена закрытия,
//t - момент времени,(переменная n1 в индикаторе)Pt - цены закрытия за n последних периодов.(Close[n2])
//a = (n*СУММА (t*Pt) - СУММА(t)*CУММА(Pt))/(n*СУММА(t^2) - (СУММА(t))^2) - тангенс угла наклона линии регрессии,
//b = 1/n*(СУММА(Pt) - a*СУММА(t)), - смещение по горизонтали}

код индикатора выше.

Вычисляет с n=1 до 100 неверно, затем выдаёт n=22 и верный результат, думаю неверно написан цикл, но непойму где.
 
Похоже она рассинхронизирована. Для бара n х берётся nn, при этом индекс для y будет
n2=n+n1-1 = n+nn-1
.А вообще здесь рядом полно индикаторов регрессий, например https://forum.mql4.com/ru/10446/page39, если искать все, то листать лучше с конца.
 
Могу только формулу вывести:
 
lna01:
Похоже она рассинхронизирована. Для бара n х берётся nn, при этом индекс для y будет
n2=n+n1-1 = n+nn-1

.А вообще
здесь рядом полно индикаторов регрессий, например
https://forum.mql4.com/ru/10446/page39, если искать все, то листать
лучше с конца.


n1 не равно nn  а изменяется от 1 до nn - периоду индикатора.
а n - колл-во пересчитываемых баров (что бработал быстрее и не таскал весь хвост)

А вообще что в https://forum.mql4.com/ru/10446/page39 это не линейная регрессия а скорее производное от МА.
 
kvn:
lna01:
Похоже она рассинхронизирована. Для бара n х берётся nn, при этом индекс для y будет
n2=n+n1-1 = n+nn-1

n1 не равно nn а изменяется от 1 до nn - периоду индикатора.
а n - колл-во пересчитываемых баров (что бработал быстрее и не таскал весь хвост)

А вообще что в https://forum.mql4.com/ru/10446/page39 это не линейная регрессия а скорее производное от МА.
Ну фиг с ним, предположим ЛР сознательно сдвигается на период. Предлагаю так: хитрое выражение
b=(1/nn)*(ssm3-a*ssm2);
заменить на
b=(1.0/nn)*(ssm3-a*ssm2);
(главная ошибка была здесь).
А если сдвиг не нужен, заменить
LR=a*nn+b;
на
LR=a+b;
. После этого сравните, что рисует этот индикатор с тем, что рисует at_LR0.mq4 и по коду at_LR0.mq4 попробуйте разобраться почему это не производная от МА и как правильно избавляться от хвоста.

P.S. Чтобы не париться с параметрами сажайте индикаторы на часовой график и в своём ставьте период на единицу больше.
 
(главная ошибка была здесь).
ОГРОМНОЕ СПАСИБО за подсказку. не догадался бы, плохо. что в руководстве языка это не написано.
Получатсчя что везде где одна из переменных целая, константу надо писать как дробное число. Учту.
А по поводу ДР или нет дело частное.
Наложите мой индюк на график и обратите внимение на точки перигиба линии. Всегда это завершение тренда и неплохая точка выхода.
А при пересечение его с МА (любой) тоже красиво получается.
 
И ещё очен был бы благодарен материалам о том как сделать индюк более скоросным, как увеличить скорость работы МТ.
И может кто знает есть ли где информация о скоросте выполнения различных операторов МТ (например за сколько тактов выполняются различные операторы цикла.)
 
kvn:
(главная ошибка была здесь).
ОГРОМНОЕ СПАСИБО за подсказку. не догадался бы, плохо. что в руководстве языка это не написано.
Получатсчя что везде где одна из переменных целая, константу надо писать как дробное число. Учту.
Если Вы о приведении типов, то это описано и в Учебнике MQL4 и во всех других языках программирования.
 
kvn:
И ещё очен был бы благодарен материалам о том как сделать индюк более скоросным, как увеличить скорость работы МТ.
И может кто знает есть ли где информация о скоросте выполнения различных операторов МТ (например за сколько тактов выполняются различные операторы цикла.)
Что касается МТ, то пользователю полезно стараться минимизировать число индикаторных буферов. Скорость выполнения операторов изучается обычно самостоятельно с помощью операторов Print и GetTickCount. Хотя можно было бы только приветствовать, если бы кто-то это дело перелопатил и опубликовал статью.