void calcPolynomialRegression(double &PricesArray[],double &RegressionArray[], int power) { ArrayResize(RegressionArray, ArraySize(PricesArray)); ArraySetAsSeries(RegressionArray,ArrayGetAsSeries(PricesArray)); double summ_x_value[21],summ_y_value[11],constant[11],matrix[11][11]; ArrayInitialize(summ_x_value,0); ArrayInitialize(summ_y_value,0); ArrayInitialize(constant,0); ArrayInitialize(matrix,0); double summ=0,summ_x=0,summ_y=0; int pos=ArraySize(PricesArray)-1; summ_x_value[0]=ArraySize(PricesArray); for(int exp_n=1; exp_n<=2*power; exp_n++) { summ_x=0; summ_y=0; for(int k=1; k<=ArraySize(PricesArray); k++) { summ_x+=MathPow(k,exp_n); if(exp_n==1) summ_y+=PricesArray[pos-k+1]; else if(exp_n<=power+1) summ_y+=PricesArray[pos-k+1]*MathPow(k,exp_n-1); } summ_x_value[exp_n]=summ_x; if(summ_y!=0) summ_y_value[exp_n-1]=summ_y; } for(int row=0; row<=power; row++) for(int col=0; col<=power; col++) matrix[row][col]=summ_x_value[row+col]; int initial_row=1; int initial_col=1; for(int i=1; i<=power; i++) { for(int row=initial_row; row<=power; row++) { summ_y_value[row]=summ_y_value[row]-(matrix[row][i-1]/matrix[i-1][i-1])*summ_y_value[i-1]; for(int col=initial_col; col<=power; col++) matrix[row][col]=matrix[row][col]-(matrix[row][i-1]/matrix[i-1][i-1])*matrix[i-1][col]; } initial_col++; initial_row++; } int j=0; for(int i=power; i>=0; i--) { if(j==0) constant[i]=summ_y_value[i]/matrix[i][i]; else { summ=0; for(int k=j; k>=1; k--) summ+=constant[i+k]*matrix[i][i+k]; constant[i]=(summ_y_value[i]-summ)/matrix[i][i]; } j++; } int k=1; for(int i=ArraySize(PricesArray)-1; i>=0; i--) { summ=0; for(int n=0; n<=power; n++) summ+=constant[n]*MathPow(k,n); RegressionArray[i]=summ; k++; } }
я реализовал расчет регрессии (не только линейной) вообще без циклов. Точнее цикл нужет только один раз при инициализации.
В результате скорость расчета в тысячи раз быстрее.
и код короче.
Но прошу прощения, код не выложу. Секрет.
Просто говорю, что это реально.
Есть две статьи, они помогут
- www.mql5.com
я реализовал расчет регрессии (не только линейной) вообще без циклов. Точнее цикл нужет только один раз при инициализации.
В результате скорость расчета в тысячи раз быстрее.
и код короче.
Но прошу прощения, код не выложу. Секрет.
Просто говорю, что это реально.
Код оч прост. Прибавляем текущие квадраты, вычитаем выходящие из интервала. Все. Весь секрет.)
Можно еще интересней сделать, но на других принципах.
Код оч прост. Прибавляем текущие квадраты, вычитаем выходящие из интервала. Все. Весь секрет.)
улыбнуло ))
Чтобы совсем смешно стало, можно было бы рассказать не о канале, а о том, как линию полином регрессии без циклов сделать. Но, вот это точно не буду делать.)) Это вам ни к чему.
я реализовал расчет регрессии (не только линейной) вообще без циклов. Точнее цикл нужет только один раз при инициализации.
В результате скорость расчета в тысячи раз быстрее.
и код короче.
Но прошу прощения, код не выложу. Секрет.
Просто говорю, что это реально.
В тысячи раз быстрее, и без цикла перебора входных значений ???
Не верю !!!
Как минимум, цикл перебора входных параметров обязательно требуется !
я реализовал расчет регрессии (не только линейной) вообще без циклов. Точнее цикл нужет только один раз при инициализации.
В результате скорость расчета в тысячи раз быстрее.
и код короче.
Но прошу прощения, код не выложу. Секрет.
Просто говорю, что это реально.
И даже без цикла суммирования x*y? А если x и y не прямые линии?
В тысячи раз быстрее, и без цикла перебора входных значений ???
Не верю !!!
Как минимум, цикл перебора входных параметров обязательно требуется !
И даже без цикла суммирования x*y? А если x и y не прямые линии?
Не верьте на здоровье.
Рашид же сбросил статьи. Читаем внимательно. Там есть ссылка еще на одну статью:
https://www.mql5.com/ru/articles/270
если поднапрячь мозги на уровне математики 7-8 класса, то аналогичным способом без цикла можно получать среднеквадратичное отклонение для получения канала, а не только скользящей. У меня это реализовано для полинома любой степени, а не только первой (линейная регрессия). Можете пощупать в демо версии на маркете.
ЗЫ Я писал, что цикл нужен один раз при инициализации.
В тысячи раз быстрее - это с учетом расчета величины среднеквадратического отклонения (т.е. ширины канала)- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть индикатор линейной регрессии.
Как встроить его расчет в советник и получить данные на 0 баре или на 1.
Пытался сделать вот так:
Но что-то не то выдает...