скользящая средняя

 
Как программно узнать что скользящая средняя выровнялась на графике ?
 
traderEvgen:
Как программно узнать что скользящая средняя выровнялась на графике ?
Для этого нужно сравнить значения индикатора на нескольких барах. А самое трудное - это чётко определится - а что такое "... скользящая средняя выровнялась...". То есть сколько баров сравнивать, какая погрешность выравненности...
 
Karputov Vladimir:
Для этого нужно сравнить значения индикатора на нескольких барах. А самое трудное - это чётко определится - а что такое "... скользящая средняя выровнялась...". То есть сколько баров сравнивать, какая погрешность выравненности...

а можете что - то посоветовать ?

 мне нужно примерно такие выравнивание находить 

МА выравнялась  

 
traderEvgen:

а можете что - то посоветовать ?

 мне нужно примерно такие выравнивание находить 

 

ну если значение средней на предыдущем баре=текущему, то это значитивыровнилась. Можно процент отклонения добавить, типа: если предыдущее значение в пределах 10% отклонения от текущего, то выровнялось. Ну и задать диапазон периодов, сколько баров эта цена должна быть в диапазоне отклонения, чтобы считать что линия выровнялась.
Можно диапазон отклонения сделать зависимым от числа баров. чем больше баров, тем шире диапазон отклонения. Но сделать это по определенному закону.
 
traderEvgen:
Как программно узнать что скользящая средняя выровнялась на графике ?

SMA "выравнивается" когда преодолевает цену за период назад. (это из определения SMA)

Чтобы избежать частых срабатываний на флете можно ещё сравнить наклоны краткопериодных SMA на текущей момент и за период назад - если они уверенно разбегаются то это чёткий сигнал пересечения и "дребезг" (скорое пересечение в обратку) маловероятен.

 
traderEvgen:

а можете что - то посоветовать ?

 мне нужно примерно такие выравнивание находить 

 

Для большего понимания, начните с публикации значений скользящей средней на промежутке, который Вы выделили. Для начала можно и вручную переписывать данные из окна "Окно данных":

Получение данных скользящей средней


Опубликуйте в этой ветке несколько последовательных значений. Это будет наглядно.

 
Karputov Vladimir:

Для большего понимания, начните с публикации значений скользящей средней на промежутке, который Вы выделили. Для начала можно и вручную переписывать данные из окна "Окно данных":


Опубликуйте в этой ветке несколько последовательных значений. Это будет наглядно.

Я в кодобазу выкладывал советник, как раз для этих дел https://www.mql5.com/ru/code/12395
ShowMAParams
ShowMAParams
  • голосов: 8
  • 2015.02.09
  • Alexey Volchanskiy
  • www.mql5.com
Советник предназначен для помощи в разработке стратегий, основанных на анализе индикатора Moving Average.
 
traderEvgen:
Как программно узнать что скользящая средняя выровнялась на графике ?

Запрограммировать думаю не сильно сложно. Необходимо для начала определиться, как находить выравнивание.

Вот тут попробовал реализовать в виде индикатора угол наклона скользящей. Если угол после большого значения падает и доходит к примеру до 10, то скользящая начинает выравниваться.

Работает на парах где нет йены,  с йеной вместо 1000.0 нужно умножать на 10.0.

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Aqua
//--- input parameters
extern int            Period_  =33;//период скользящей
extern int            P        =7;//кол-во баров для поиска угла
//--- buffers
double m[];
double d[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(2);
   SetIndexBuffer(1,m);
   SetIndexBuffer(0,d);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    int counted_bars=IndicatorCounted(),                      
    limit,iMAX, iMIN;
    double max, min,Katet_B_Max,Katet_A_Max;;
   if(counted_bars>0)
      counted_bars--;
   
   limit=Bars-counted_bars-1;     
   for(int i=limit;i>=0;i--)m[i]=iMA(NULL,0,Period_,0,MODE_EMA,PRICE_CLOSE,i);  
   for(i=limit;i>=0;i--)
   {
   iMAX=ArrayMaximum(m,P,i); 
   iMIN=ArrayMinimum(m,P,i); 
   max=m[iMAX];
   min=m[iMIN];
   Katet_B_Max=MathAbs(iMAX-iMIN);
   Katet_A_Max=MathAbs(m[iMAX]-m[iMIN])*1000.0; 
   if(Katet_B_Max!=0)d[i]=100.0*MathArctan(Katet_A_Max/Katet_B_Max);
   }
   return(0);
  }
//+------------------------------------------------------------------+
 
дык производную взять, если пересекает ноль, значит выравнялась)
 
Oleg Tsarkov:
дык производную взять, если пересекает ноль, значит выравнялась)
Ноль редко, когда будет. Чуть побольше цифру нужно.
 
forexman77:
Ноль редко, когда будет. Чуть побольше цифру нужно.

Я же написал, если пересекает ноль, сверху вниз или снизу вверх, а самого нуля естественно никогда не будет...

т.е. если предыдущее значение выше нуля, а следующее ниже, значит случилось выравнивание) 

Причина обращения: