Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Система линейных алгебраических уравнений на каждом баре - индикатор для MetaTrader 5
- Просмотров:
- 6195
- Рейтинг:
- Опубликован:
- 2019.05.02 09:00
- Обновлен:
- 2022.11.08 02:12
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Данная работа преследует 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 (Moving Average, MA) в качестве фильтра тренда и индикатор iMACD (Moving Average Convergence/Divergence, MACD) в качестве подтверждающих сигналов
iStochastic automatedТорговая стратегия по осциллятору iStochastic (Stochastic Oscillator, STO)
Шаблон класса, реализующий работу со связанным списком
Multi signal panelСигнальная панель на базе трёх индикаторов и пяти таймфреймов