Скачать MetaTrader 5

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

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

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

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

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

Maxim Romanov
4147
Maxim Romanov  
traderEvgen:

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

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

 

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

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

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

Vladimir Karputov
Модератор
58772
Vladimir Karputov  
traderEvgen:

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

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

 

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

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


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

Alexey Volchanskiy
19393
Alexey Volchanskiy  
Karputov Vladimir:

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


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

Я в кодобазу выкладывал советник, как раз для этих дел https://www.mql5.com/ru/code/12395
ShowMAParams
ShowMAParams
  • голосов: 8
  • 2015.02.09
  • Alexey Volchanskiy
  • www.mql5.com
Советник предназначен для помощи в разработке стратегий, основанных на анализе индикатора Moving Average.
forexman77
2232
forexman77  
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
1500
Oleg Tsarkov  
дык производную взять, если пересекает ноль, значит выравнялась)
forexman77
2232
forexman77  
Oleg Tsarkov:
дык производную взять, если пересекает ноль, значит выравнялась)
Ноль редко, когда будет. Чуть побольше цифру нужно.
Oleg Tsarkov
1500
Oleg Tsarkov  
forexman77:
Ноль редко, когда будет. Чуть побольше цифру нужно.

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

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

1234
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий