Предлагаю обсудить индикатор AMA.

 

Как-то наткнулся на статью про адаптивные скользящие. 

Нашел здесь на сайте индикаторы АМА, выбрал из них «AMA for Expert2» (вот здесь) и начал тестировать. Пробовал пересечение двух машек и одну с поиском экстремума индикатора в прошлом и его превышение. К сожалению данных по тестам не сохранил, так как не нашел ничего стоящего.

          Сейчас возникла идея, а что если опять адаптировать индикатор и попробовать использовать фильтр? В результате сделал индикатор на основе «AMA for Expert2». Индикатор подтормаживает. Необходимо его как-то ускорить. Возможно, где-то ошибся.

Кто проводил исследование по данной теме, есть ли смысл копать в этом направлении?

Или может быть использовать индикатор, как фильтр?

#property copyright "Kamil Gazizullin"
#property link      "forexman77@yandex.ru"
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Aqua
#property indicator_color2 Red
#property indicator_color3 Magenta
//--- input parameters
extern int       Period_MA_1=10;
//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
extern int p=10;
double val_plus[];
double val_minus[];

extern int       periodAMA=10;
extern double    nfast=2.0;
extern double    nslow=30.0;
extern double    G=2.0;
extern double    dK=2.0;
extern int       PriceType=0; // цена, от которой строится

extern double K=0.2;
extern int    StPeriod=10;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,116);
   SetIndexEmptyValue(1,0.0);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexArrow(2,116);
   SetIndexEmptyValue(2,0.0);
   SetIndexBuffer(2,ExtMapBuffer3);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    int counted_bars=IndicatorCounted(),                      
    limit, maxValueIdx, minValueIdx;
    double
    indicator_plus, indicator_minus, prirost, summa, ER, SSC, SC, Filter, max, maximum, min, minimum, StdDev;
   if(counted_bars>0)
      counted_bars--;
   limit=Bars-counted_bars;

   for(int i=0;i<limit;i++)
   { 
     indicator_plus=0;
     indicator_minus=0;
     ArrayInitialize(val_plus,0);
     ArrayInitialize(val_minus,0);
     for(int k=p;k>=0;k--)
      {
       ArrayResize(val_plus,p);
       ArrayResize(val_minus,p);
       val_plus[k]=iClose(Symbol(),Period(),i+k)-iClose(Symbol(),Period(),i+k+1);//если текущий бар растущий 
       val_minus[k]=iClose(Symbol(),Period(),i+k+1)-iClose(Symbol(),Period(),i+k);//если текущий бар падающий
       if (val_minus[k] > 0){indicator_minus=indicator_minus+val_minus[k];}//складываем значения минусовых движений
       if (val_plus[k] > 0){indicator_plus=indicator_plus+val_plus[k];}//складываем значения плюсовых движений
       }
       prirost=iClose(Symbol(),Period(),i+0)-iClose(Symbol(),Period(),i+10);
       summa=indicator_plus+indicator_minus;
       ER=MathAbs(prirost)/summa;
       SSC=(ER*0.60215)+0.06452;
       SC=(2/SSC)-1;//получение адаптивного периода для индикатора "AMA for Expert2"
       periodAMA=SC;
       ExtMapBuffer1[i]=iCustom(NULL,0,"AMA for Expert2",periodAMA,nfast,nslow,G,dK,PriceType,0,i);
   }
   for(i=0;i<limit;i++)
   { 
   maxValueIdx=ArrayMaximum(ExtMapBuffer1,10,i);//находим индекс, где значение максимально
   minValueIdx=ArrayMinimum(ExtMapBuffer1,10,i);//находим индекс, где значение минимально
   maximum=iCustom(NULL,0,"AMA for Expert2",0,maxValueIdx);//получаем значение максимума
   minimum=iCustom(NULL,0,"AMA for Expert2",0,minValueIdx);//получаем значение минимума
   StdDev=iStdDev(NULL,0,StPeriod,0,MODE_EMA,PRICE_CLOSE,i);
   max=maximum-ExtMapBuffer1[i];//диапазон от максимума по текущий бар
   min=ExtMapBuffer1[i]-minimum;//диапазон от минимума по текущий бар
   Filter = K*StdDev;//значение фильтра
   if (max > Filter){ExtMapBuffer2[i]=High[i]+100*Point;}//движение больше фильтра ставим точку
   if (max < Filter){ExtMapBuffer2[i]=0;}
   if (min > Filter){ExtMapBuffer3[i]=Low[i]-100*Point;}//движение больше фильтра ставим точку
   if (min < Filter){ExtMapBuffer3[i]=0;}
   }
   return(0);
  }
//+------------------------------------------------------------------+
 
Forexman77:

Как то наткнулся на статью про адаптивные скользящие.

Нашел здесь на сайте индикаторы АМА, выбрал из них «AMA for Expert2» (вот здесь) и начал тестировать. Пробовал пересечение двух машек и одну с поиском экстремума индикатора в прошлом и его превышение. К сожалению данных по тестам не сохранил, так как не нашел ничего стоящего.

          Сейчас возникла идея, а что если опять адаптировать индикатор и попробовать использовать фильтр? В результате сделал индикатор на основе «AMA for Expert2». Индикатор подтормаживает. Необходимо его как-то ускорить. Возможно, где-то ошибся.

Кто проводил исследование по данной теме, есть ли смысл копать в этом направлении?

Или может быть использовать индикатор, как фильтр?

 


Извините! Обычное запаздывание в АМА, у Вас не знаю! У меня висит ТЕМА ("тройная" ЕМА), и то не пользуюсь, хотя следует за ценой быстрее, как никакая!

ТЕМА тоже с сайта. Возьмите и сравните! 

 
borilunad:


Извините! Обычное запаздывание в АМА, у Вас не знаю! У меня висит ТЕМА ("тройная" ЕМА), и то не пользуюсь, хотя следует за ценой быстрее, как никакая!

ТЕМА тоже с сайта. Возьмите и сравните! 

Если вкратце. Индикатор сделан на основе АМА:
ExtMapBuffer1[i]=iCustom(NULL,0,"AMA for Expert2",periodAMA,nfast,nslow,G,dK,PriceType,0,i);

период в нем задается в зависимости от тренда, так называемый коэффициент эффективности (Efficiency Ratio, ER). Рассчитанный за десять дней. Чем больше выражен тренд тем больше ER ближе к цифре 1.

И уже от него вычисляется период SC для индикатора. Если тренд становится выраженным период падает и наоборот.  

Для наглядности прилагаю "SC" и "ER" в виде индикаторов, которые выделил отдельно.

Ну и в заключении взял индикатор стандартной девиации и умножил на коофицент.  Эту величину сравниваю на превышение эктремумов индикатора в последние 10 баров.

 

Тестировал различные комбинации обычных мувингов две и три. На тестах за несколько лет не нашел ничего стабильного. Был на трех скользящих более менее результат.

К примеру задаю тест с перебором МА1>MA2>MA3 открываем лонг, по книжному порядок первой меньше второй, второй меньше третьей. А на самом деле прибыль получается только когда,

MA2 имеет больший вес. По идее получается легкая машка пересекает тяжелую (MA2) ,  при этом тяжелая находится над средней. То есть не совсем, как все привыкли думать: легкая > средняя > тяжелая.

Если говорить про AMA Кауфмана, то пробовал и пересечение и фильтры для одной скользящей, ничего впечатляющего не нашел на долгой истории в несколько лет. Возможно не там копал?

Файлы:
er.mq4  3 kb
sc.mq4  3 kb
 
Тогда подождите, когда мастаки подтянутся! Я на индикаторы не полагаюсь, такие же 50/50! Сколько раз было, что явно все показывают куда, а цена вдруг резко пошла наоборот! Хорошо ещё, что имеем только 2 направления! Тут же выставляю лок, а там видно будет!
 
borilunad:
Тогда подождите, когда мастаки подтянутся! Я на индикаторы не полагаюсь, такие же 50/50! Сколько раз было, что явно все показывают куда, а цена вдруг резко пошла наоборот! Хорошо ещё, что имеем только 2 направления! Тут же выставляю лок, а там видно будет!
Да, на индикаторы полностью надеяться нельзя и большинство из них вообще бесполезны, по крайне мере на форекс.
Причина обращения: