Определение параллельности разнопериодных Moving Average - страница 3

 
EVladMih:IgorM, похоже, что вы тоже на правильном пути. По крайней мере параллельности должны быть именно на местах "сложных" коррекций. 

отрисовка желтой линией баров которые подходят под условие, что 4 бара левее имеют одинаковое расстояние между МА с погрешностью 0.00005

 
IgorM:

отрисовка желтой линией баров которые подходят под условие, что 4 бара левее имеют одинаковое расстояние между МА с погрешностью 0.00005 


Тогда не совсем то. Определяем первые бары (4-5) чисто как право считать это место параллельностью, а дальше идет приращение (удлиннение) участка параллельности. Определяется его текущая длинна и, конечно, конец параллельности.

Если идти дальше/глубже, то возможно как бы возобновление параллельности (обычно бывает на треугольных коррекциях). На картинке см. пример:

Параллельность 1 и 2

 "Параллельность" между первыми двумя вертикалками и перед третьей. Можно и 2 участка назвать одной параллельностью, а можно назвать сочетанием двух параллельностей (как двойные вершина/дно).

 
EVladMih:
#property copyright "Copyright © DmitriyN-2012"
#property link      "https://www.mql5.com/ru/users/dmitriyn"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 White

// Ограничение длины 
extern int BarsPaint=1000;  
// Исходные данные первой МА-шки
extern int periodMa1=20;
extern int shiftMa1=0;
extern int methodMa1=0;
extern int appliedpriceMa1=0;
// Исходные данные второй МА-шки
extern int periodMa2=40;
extern int shiftMa2=0;
extern int methodMa2=0;
extern int appliedpriceMa2=0;
// Переменные
double A1, A2, B1, B2, Ugol;
double ExtMapBuffer1[];

int init()
   {
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   return(0);
   }
   
int start()
   {
   int counted_bars=IndicatorCounted();
   if (counted_bars>0) counted_bars--;
   int limit; 
   limit=Bars-counted_bars;
   if (limit>BarsPaint)limit = BarsPaint;
   for(int i=limit;i>=0;i--)
   {  
      // Расчёт точек первой МА
      A1=iMA(0,0, periodMa1, shiftMa1, methodMa1, appliedpriceMa1, i);
      A2=iMA(0,0, periodMa1, shiftMa1, methodMa1, appliedpriceMa1, i+1);
      // Расчёт точек второй МА
      B1=iMA(0,0, periodMa2, shiftMa2, methodMa2, appliedpriceMa2, i);
      B2=iMA(0,0, periodMa2, shiftMa2, methodMa2, appliedpriceMa2, i+1);
      // Расчёт угла
       Ugol=MathArccos((B1*B2+A1*A2)/(MathSqrt(B1*B1+A1*A1)*MathSqrt(B2*B2+A2*A2)));
      // Рисование
      ExtMapBuffer1[i]=Ugol;
   }
   return(0);
   }

Индикатор угла между машками.

 
Ближе к концу недели выложу свою версию. 
 
Коэффициент корреляции, изобретатели!
 
Integer:
Коэффициент корреляции, изобретатели!

Флаг в руки, барабан на шею. 

Мы все больше геометрию продвигаем:)  

 
Здесь выложу. Просто геометрия будет. Без долбаной статистики! 
 
Статистика тут ни при чем. Просто берем разницу между машками и требуем, чтобы она отклонялась на всем участке исследования не более чем на заданный эпсилон.
 
Вместе сделаем:) 
 
Алексей, Mathemat:
Статистика тут ни при чем. Просто берем разницу между машками и требуем, чтобы она отклонялась на всем участке исследования не более чем на заданный эпсилон.
Алексей, извини, но есть точная формула. 
Причина обращения: