https://www.metatrader4.com/ru/forum/search/?search=%F0%E5%E3%F0%E5%F1%F1%E8%FF&x=0&y=0
Меня интересует не канал линейной регрессии а индикатор линейной
регрессии (одна линия).
Вот правило:
При линейной регрессии используют метод наименьших квадратов
для того, чтобы вписать линию в набор данных. Наилучшая линия
находится путем минимизации расстояния от точек данных до этой
линии.
На всякий случай дам код MQL II - может кто переделает...
/*[[ Name := linreg Author := Copyright © 2005, MetaQuotes Software Corp. Link := https://www.metaquotes.net// Separate Window := No First Color := Blue First Draw Type := Line First Symbol := 217 Use Second Data := No Second Color := Red Second Draw Type := Line Second Symbol := 218 ]]*/ Inputs : RPeriod(20); Variables : shift(0),cnt(0),loopbegin(0),first(True),prevbars(0); Variables : sum(0),length(0),i(0),mt(0),WT(0),vWT2(0),value(0); SetLoopCount(0); //initial chekings If RPeriod<1 Then Exit; length=RPeriod; loopbegin=206-length-1; For shift=loopbegin Downto 0 Begin sum=0; For i=length Downto 1 Begin sum=sum+(i-(length+1)/3)*Close[length-i+shift]; End; WT = sum*6/(length*(length+1)); // loop from first bar to current bar (with shift=0) SetIndexValue(shift, WT); End;
double regressionEquation(double X[],double Y[],int size,double& B0,double& B1){ int i; double averageXY=0; double averageX=0; double averageY=0; double sumXY=0; double sumXX=0; double sumYY=0; double SXX=0; double SYY=0; double SXY=0; for (i=0;i<size;i++) { sumXY+=(X[i]*Y[i]); sumXX+=(X[i]*X[i]); sumYY+=(Y[i]*Y[i]); averageY+=Y[i]; averageX+=X[i]; } averageX/=size; averageY/=size; SXY=sumXY-size*averageY*averageX; SXX=sumXX-size*averageX*averageX; SYY=sumYY-size*averageY*averageY; if (SXX==0) SXX=100; if (SYY==0) SYY=100; B1=SXY/SXX; B0=averageY-B1*averageX; double Rxy=SXY/(MathSqrt(MathAbs(SXX*SYY))); return (Rxy); }Вообщем так, функция возвращает коэфицент пирсона,так это вроде по русски (в учился не в России поэтому точно не знаю как все это научно по русски называется)
тоесть чем ближе к 1,тем лучше уравнение регрессии.. а само уравнение это Y'=B0+B1*X, В0 и В1 функция возвращает тоже,надо только передать в функцию 2 массива со значениями и количество значений для рассчета. А потом имея В0 и В1 можно подставить в уравнение Х "из будущего" в нашем случае время и "предугадать" У,то есть цену.
Надеюсь кому-то поможет.... :)
Формула верна и выглядит следующим образом:
у = а + bx, где:
у - цена закрытия;
х - положение текущего периода времени в базе данных;
а - 1/п (Ey - bEх);
b - (nExy - EхEу)/nEх2 - (Ex)2;
п - число временных периодов при суммировании;
E - сумма за n периодов.
Спасибо за функцию - но проблема в том - как теперь ее вставить
в индикатор?
Нет - это не оно. Индикатор Линейной регрессии - это линия типа индикатора Зигзаг (она прямая)
С чего ты взял, что она прямая? Этот индикатор, как и тот, который я разместил в codebase рисует последнюю точку линии регресси, только в отличие от моего полосы рассчитываются по стандартной девиации, а в моем по стандартной ошибке.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Помогите найти индикатор "Линейная регрессия" для МТ4.
Или если может кто-нибудь напишет - я формулу вычисления дам.
Спасибо!