Смотри, как бесплатно скачать роботов
Ищи нас в Facebook!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Индикаторы

Система линейных алгебраических уравнений на каждом баре - индикатор для MetaTrader 5

Просмотров:
5675
Рейтинг:
(26)
Опубликован:
2019.05.02 09:00
Обновлен:
2022.11.08 02:12
\MQL5\Include\Canvas\
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Данная работа преследует 3 цели:

  • Продемонстрировать работу индикатора сразу в двух окнах: в главном и подокне. Это достигается с помощью применения класса iCanvas.
  • Компактное решение системы линейных алгебраических уравнений с помощью рекурсии.
  • Продемонстрировать и доказать некоторым искателям грааля несостоятельность утверждения, что применение СЛАУ в алготрейдинге содержит потенциал прогнозирования цены.


Сердце данного индикатора - это рекурсивная функция решения системы линейных алгебраических уравнений:

void SLAU(double &x[],double &f[],double &a[],int m)
  {
   int k=m-1;
   if(m>1)
     {
      double xx[],ff[];
      double g=x[0]; if(g==0) g=1.0e-100;       // Данные три строчки делят матрицы x и f на значение верхнего левого значения матрицы x
      for(int i=0;i<ArraySize(x);i++) x[i]/=g;  // Это необходимо для того, чтобы не происходило геометрического стремления к нулю или бесконечности элементов матрицы 
      for(int i=0;i<ArraySize(f);i++) f[i]/=g;  // на каждом рекурсивном шаге, т.к. все значения этих матриц - это цена и эти значения отличаются друг от друга на доли %
      ArrayResize(ff,k);
      ArrayResize(xx,k*k);
      for(int i=0; i<k; i++)
        {
         ff[i]=f[0]*x[(i+1)*m]-f[i+1]*x[0];
         for(int j=0;j<k;j++) xx[i*k+j]=x[j+1]*x[(i+1)*m]-x[(i+1)*m+j+1]*x[0];
        }
      int i=0;
      for(;i<k; i++) if(xx[i*k]!=0) break;
      if(i>0 && i<k) for(int j=0;j<k;j++) {double t=xx[j]; xx[j]=xx[i*k+j]; xx[i*k+j]=t;}
      SLAU(xx,ff,a,k);
     }
   double sum=0;
   for(int i=1; i<m;i++) sum+=a[n-m+i]*x[i];
   if(x[0]!=0 && x[0]==x[0]) a[n-m]=(f[0]-sum)/x[0]; else a[n-m]=1.0/n;
   if(m!=n) return;
  }

где : 

  • m - количество уравнений СЛАУ (размерность)
  • x [] - главная матрица системы размером m*m
  • f [] - столбец свободных членов размерностью m
  • a [] - столбец искомых коэффициентов A1, A2,...Am

Например СЛАУ из 5 уравнений будет выглядеть следующим образом:

x0 = a1*x1 + a2*x2 + a3*x3 + a4*x4 + a5*x5

x1 = a1*x2 + a2*x3 + a3*x4 + a4*x5 + a5*x6

x2 = a1*x3 + a2*x4 + a3*x5 + a4*x6 + a5*x7

x3 = a1*x4 + a2*x5 + a3*x6 + a4*x7 + a5*x8

x4 = a1*x5 + a2*x6 + a3*x7 + a4*x8 + a5*x9

в данном индикаторе:

x0 = close[0]

x1 = close[1]

x2 = close[3]

... и т.д.

Таким образом некоторые исследователи полагают, что зная все коэффициенты A1...Am можно рассчитать (спрогнозировать) значение следующего бара.


Данный индикатор на каждом баре решает СЛАУ и строит линию прогноза на следующий бар - синяя линия на окне цены. "Прогнозируемая" цена появляется в момент открытия бара и подразумевает, что цена закроется в этом значении.

Фиолетовая линия - это прогнозируемая от текущего бара линия цены, если продолжать этот ряд не меняя коэффициентов А.

Разноцветные линии в подокне - это значения коэффициентов A1... Am.

Бирюзовые крупные точки - это проверка правильности расчета СЛАУ, Если расчет совпадает со значение Close бара, то цвет бирюзовый , если нет - то красный. Если все точки бирюзового цвета, значит СЛАУ решена верно.
Так же можно делать оценку предполагаемой прибыли или убытка при таком "прогнозе" на протяжении всех существующих баров в окне. Оценка производится с нулевым спредом. Поэтому нужно понимать, что реальная прибыль будет значительно меньше. Ниже этой оценки приводится оценка, полученная с помощью генерации случайного направления.

Таким образом, при исследовании работы данного индикатора можно сделать вывод, что прогноз цены с помощью СЛАУ так же эффективен, как и с помощью подбрасывания монетки. 

Можно менять размерность СЛАУ с помощью ползунка, который появляется при перемещении указателя мышки в верхнюю часть окна.
Рекомендую в настройках MT5 параметр "Макс. баров в окне" выставить 5000. Т.к. при высокой размерности СЛАУ вычисления достаточно ресурсоёмки.
Версия iCanvas должна быть не менее 1.27

    iMA iMACD EA iMA iMACD EA

    Индикатор iMA (Moving Average, MA) в качестве фильтра тренда и индикатор iMACD (Moving Average Convergence/Divergence, MACD) в качестве подтверждающих сигналов

    iStochastic automated iStochastic automated

    Торговая стратегия по осциллятору iStochastic (Stochastic Oscillator, STO)

    Связанный список. Связанный список.

    Шаблон класса, реализующий работу со связанным списком

    Multi signal panel Multi signal panel

    Сигнальная панель на базе трёх индикаторов и пяти таймфреймов