Давно написал индикаторы линейной регресии на MQL3, стал переписывать на 4, не идёт. Спецы помогите написать или исправить ошибку.
- Проведение прямой через множество точек по методу наименьших квадратов
- Как начертить среднюю прямую по нескольким точкам
- Совершенная нелинейная регрессия
И ещё подобный: гиперболическая регрессия(тоже не могу найти ошибку)
//+------------------------------------------------------------------+ //| гиперболическая регрессия.mq4 | //| Copyright © 2008, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //#property indicator_chart_window #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Red //---- input parameters extern int nn=21; //---- buffers double ExtMapBuffer1[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer1); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); //---- double barr, as, bs,cs,ds,e, f,k,LR,ExtMapBuffer1[]; int n,n1; // Индикатор Гиперболической Регресии for (barr=0;barr<=100;barr++){ for (n=1;n<=nn;n++){ n1=barr+n-1; as=as+1/n; bs=bs+1/(n*n); cs=cs+Close[n1]; ds=ds+Close[n1]/n; } e=nn*bs-as*as; f=cs*bs-ds*as; k=nn*ds-as*cs; f=f/e; k=k/e; LR = f+k/nn; as=0; bs=0; cs=0; ds=0; ExtMapBuffer1[n]=LR; } //---- return(0); } //+------------------------------------------------------------------+
Посмотрите поиск https://www.mql5.com/ru/code
https://forum.mql4.com/ru/10446/page13
Спасибо, интересно, но где же я напартачил в индикаторе?
kvn:
Спасибо, интересно, но где же я напартачил в индикаторе?
Правильно - напортачил.
Спасибо, интересно, но где же я напартачил в индикаторе?
Rosh:
Правильно - напортачил.
kvn:
Спасибо, интересно, но где же я напартачил в индикаторе?
Спасибо, интересно, но где же я напартачил в индикаторе?
Правильно - напортачил.
Грамотный да? тогда подскажы где. и будет от меня большое спасибо.
kvn:
Грамотный да? тогда подскажы где. и будет от меня большое спасибо.
Здесь на эту тему было вагон+маленькая тележка. Могу только в общих чертах: составляется уравнение суммы среднеквадратичных отклонений от аппроксимирующей кривой со сколько угодным количеством заданными параметрами. Далее находятся частные производные от каждого параметра и приравниваются нулю. Из полученной системы линейных уравнений находятся все необходимые параметры. Алгоритм, как видите простой, и совсем не творческий, чтобы этим заниматься.
Rosh:
Правильно - напортачил.
kvn:
Спасибо, интересно, но где же я напартачил в индикаторе?
Спасибо, интересно, но где же я напартачил в индикаторе?
Правильно - напортачил.
Грамотный да? тогда подскажы где. и будет от меня большое спасибо.
То что Вы говорите это не совсем линейная регрессия. Методика ЛР описана у меня в индикаторе.
//Индикатор строится по формуле:LR = at+b
//где LR - прогнозируемая "средняя" цена закрытия,
//t - момент времени,Pt - цены закрытия за n последних периодов.
//a = (n*СУММА (t*Pt) - СУММА(t)*CУММА(Pt))/(n*СУММА(t^2) - (СУММА(t))^2) - тангенс угла наклона линии регрессии,
//b = 1/n*(СУММА(Pt) - a*СУММА(t)), - смещение по горизонтали}
Но при выполнении сначало идут неверные данные (когда n=1-100,) а потом выдаёт n=22 и правильные значения. Гдето небольшая ошибка и не как не могу найти.
подозреваю что ошибка в операторе цикла.
//Индикатор строится по формуле:LR = at+b
//где LR - прогнозируемая "средняя" цена закрытия,
//t - момент времени,Pt - цены закрытия за n последних периодов.
//a = (n*СУММА (t*Pt) - СУММА(t)*CУММА(Pt))/(n*СУММА(t^2) - (СУММА(t))^2) - тангенс угла наклона линии регрессии,
//b = 1/n*(СУММА(Pt) - a*СУММА(t)), - смещение по горизонтали}
Но при выполнении сначало идут неверные данные (когда n=1-100,) а потом выдаёт n=22 и правильные значения. Гдето небольшая ошибка и не как не могу найти.
подозреваю что ошибка в операторе цикла.
Хоть и не люблю википедию, но даю ссылку на нее на тему линейной регрессии. Вот еще нашел в неком блоге - http://cmacfm.mazoo.net/archives/000936.html
Не буду спорить про ЛР. ТАК ГДЕ ЖЕ ОШЫБКА В КОДЕ ИНДИКАТОРА???????
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь