Индикаторы: Оптимизированный вариант адаптивной скользящей средней Кауфмана AMA от wellx - страница 2

 
Rosh:
Ошибка проявляеться если использовать минутки, на часовиках её нет. Ошибка проявляеться во всех вариантах 2 3 и 4. Извини что дотошен, это 1 из индикаторов который я буду использовать на чемпионате.

 
Я опять немного ошибся. Я запустил визуальное тестирование и набросил на график два индикатора: AMA и AMA for Expert4.mq4. И увидел, что один индикатор меняет свои значения на нулевом баре на каждом тике , в то время как второй совсем не меняется. Выяснилось, в оригинале от wellx'а для экономии ресурсов процессора стоит маленькая строчка, которая делает обсчет только 1 раз при открытии нового бара. Если этот запрет закомментировать, то тестирование советника становится невыполнимой задачей:

   int    i,pos=0;
   double noise=0.000000001,AMA,AMA0,signal,ER;
   double dSC,ERSC,SSC,ddK;
   
   //if (prevbars==Bars) return(0);
Я запустил советника с вызовом такого индикатора больше часа назад, но тестирование не прошло еще и половины пути.
 
Prival писал(а):
Ошибка проявляеться если использовать минутки, на часовиках её нет. Ошибка проявляеться во всех вариантах 2 3 и 4. Извини что дотошен, это 1 из индикаторов который я буду использовать на чемпионате.

Я провел исследования и выяснил, что отрицательные значения вызваны исключительно точностью вычислений. Дисперсия, которая вычисляется в оптимизированном варианте иногда бывает отрицательной где то далее 8 знака после запятой. Поэтому можно в этом случае можно принимать значение равным нулю. Необходимо переделать код таким образом:

   for (i=limit2;i>=0;i--)
      {
      val1=0;
      val2=0;
      SredneeAMA=(SumAMABuffer[i]-SumAMABuffer[i+periodAMA])/periodAMA;
      SumKvadratAMA=AMA2Buffer[i]-AMA2Buffer[i+periodAMA];
      dipersion=SumKvadratAMA/periodAMA-SredneeAMA*SredneeAMA;
      if (dipersion<0)
         {
         StdAMA[i]=0;
         //Print("Отрицательная дисперсия! значение:",DoubleToStr(dipersion,8));
         //Print("periodAMA=",periodAMA,"  Bars=",Bars,"    i=",i);
         }
      else StdAMA[i]=MathSqrt(dipersion);
      if (MathAbs(AMAbuffer[i]-AMAbuffer[i+1])>dK*Point)
         {
         if (AMAbuffer[i]-AMAbuffer[i+1]>0) val1=AMAbuffer[i];
         else val2=AMAbuffer[i];
         } 
      upAMA[i]=val1;
      downAMA[i]=val2;
      }
Тогда тестирование будет проходить без ошибок на минутках и на пятиминутках тоже.
 
Rosh:
Я опять немного ошибся. Я запустил визуальное тестирование и набросил на график два индикатора: AMA и AMA for Expert4.mq4. И увидел, что один индикатор меняет свои значения на нулевом баре на каждом тике, в то время как второй совсем не меняется. Выяснилось, в оригинале от wellx'а для экономии ресурсов процессора стоит маленькая строчка, которая делает обсчет только 1 раз при открытии нового бара. Если этот запрет закомментировать, то тестирование советника становится невыполнимой задачей:

   int    i,pos=0;
   double noise=0.000000001,AMA,AMA0,signal,ER;
   double dSC,ERSC,SSC,ddK;
   
   //if (prevbars==Bars) return(0);
Я запустил советника с вызовом такого индикатора больше часа назад, но тестирование не прошло еще и половины пути.

===================================================================================

Рош, вдумайся в реальный смысл вычисления на каждом тике? АМА сама по себе есть инструмент не имеющий смысла на текущем 0м баре. ИМХО, конечно. Как можно принять решение, если нет никакой уверенности, что сигнал не сменится в конечном итоге ? Или это уже не АМА.
 
wellx писал(а):


Рош, вдумайся в реальный смысл вычисления на каждом тике? АМА сама по себе есть инструмент не имеющий смысла на текущем 0м баре. ИМХО, конечно. Как можно принять решение , если нет никакой уверенности, что сигнал не сменится в конечном итоге ? Или это уже не АМА.


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

Подскажите где скачать эксперт торгующий по АМА ?

 

где можна скачать эксперт торгующий по АМА?

 

Маленькая ошибочка которая забивает логи соответственно замедляет работу инд.

00:00:01 Адаптивной скользящей средней КауфманаAMA for Expert2 GBPJPY,M5: negative argument for MathSqrt function
00:00:01 Адаптивной скользящей средней КауфманаAMA for Expert2 GBPJPY,M5: negative argument for MathSqrt function
00:00:01 Адаптивной скользящей средней КауфманаAMA for Expert2 GBPJPY,M5: negative argument for MathSqrt function
00:00:02 Адаптивной скользящей средней КауфманаAMA for Expert2 GBPJPY,M5: negative argument for MathSqrt function
00:00:02 Адаптивной скользящей средней КауфманаAMA for Expert2 GBPJPY,M5: negative argument for MathSqrt function
00:00:02 Адаптивной скользящей средней КауфманаAMA for Expert2 GBPJPY,M5: negative argument for MathSqrt function
00:00:03 Адаптивной скользящей средней КауфманаAMA for Expert2 GBPJPY,M5: negative argument for MathSqrt function
00:00:03 Адаптивной скользящей средней КауфманаAMA for Expert2 GBPJPY,M5: negative argument for MathSqrt function
00:00:04 Адаптивной скользящей средней КауфманаAMA for Expert2 GBPJPY,M5: negative argument for MathSqrt function

       if(SumKvadratAMA/periodAMA-SredneeAMA*SredneeAMA>=0)
         StdAMA[i]=MathSqrt(SumKvadratAMA/periodAMA-SredneeAMA*SredneeAMA);
         else StdAMA[i]=0;
 
Что в итоге? Где можно скачать последний вариант индикатора? в заголовке судя по названию вторая версия AMA for Expert2.mq4
 
И ещё вопрос: можно ли в этом индикаторе менять сдвиг, как в обычном МА?
Причина обращения: