Кто подскажет замену для iMaOnArray()? - страница 2

 
Eugene1:

Было бы приятно взглянуть на код...

Так в той моей теме выложен код, где гладится RSI с помощью EMA. Самое наверное простое для подсчета сглаживание.
 
IgorM:

дык iMaOnArray() и есть готовая замена для расчета скользящего среднего, не устраивает, тогда считайте сами по классической формуле, примерно так:


Это да, согласен, что так, хоть и дольше, но надёжней считать.

Не сомневаюсь, что этот кусок кода рабочий!

Только вот, там есть ещё линейно взвешенная итп.

С ними у меня некоторые трудности... там в деталях ошибиться можно...

 
TheXpert:
Так в той моей теме выложен код, где гладится RSI с помощью EMA. Самое наверное простое для подсчета сглаживание.

Так там нет всех возможностей МА, меня прежде всего линейно взвешенная интересует.

 
Eugene1:меня прежде всего линейно взвешенная интересует.

наверное так:

for(i=limit; i>=0; i--){
      Buffer1[i]=0;
      Buffer2[i]=0;
      for(int z=0; z<SMA_period; z++)
            Buffer1[i] += Close[i+z];                             //СЛОЖЕНИЕ ИНДЕКСОВ
      Buffer1[i] = Buffer1[i]/SMA_period;                         //ДЕЛЕНИЕ НА ПЕРИОД - РАСЧЕТ SMA
      
      if(Close[i] > 0)Buffer2[i] = Close[i]*(2.0/(EMA_period+1)) + Buffer2[i+1]*(1-(2.0/(EMA_period+1)));   //РАСЧЕТ EMA ПО КЛАССИЧЕСКОЙ ФОРМУЛЕ
} 
 
IgorM:

наверное так:



А lwma?
 
Eugene1:А lwma?
хм, извини, но дальше сам: http://fxcodebase.com/wiki/index.php/Linear_Weighted_Moving_Average_(LWMA)
 
Eugene1:
А lwma?
jartmailru:
возьмите MA-индикатор из поставки МТ- переделайте в функцию.
 
jartmailru:возьмите MA-индикатор из поставки МТ- переделайте в функцию.



Я уже смотрел этот вариант: на первый взгляд - очевидное и простое решение!

НО ... там не по той формуле считается, что предлагает IgorM

Поэтому там, возможно, происходит накопление погрешности вычислений, так же

как и в iMaOnArray(), а возможно, не происходит...

Получается, "очевидное" решение перерастает в исследование...

А я как раз в середине другого исследования застрял... поэтому, собственно, и

тему эту создал: вдруг кто-то уже имеет готовый ответ - мне тогда не надо рекурсивно одно исследование на другое навешивать :-)

 
Eugene1:

НО ... там не по той формуле считается, что предлагает IgorM

Что-то меня смущает
for(i=limit; i>=0; i--){
      Buffer1[i]=0;
      Buffer2[i]=0;
      for(int z=0; z<SMA_period; z++)
            Buffer1[i] += Close[i+z];                             //СЛОЖЕНИЕ ИНДЕКСОВ
      Buffer1[i] = Buffer1[i]/SMA_period;                         //ДЕЛЕНИЕ НА ПЕРИОД - РАСЧЕТ SMA
      
      if(Close[i] > 0)Buffer2[i] = Close[i]*(2.0/(EMA_period+1)) + Buffer2[i+1]*(1-(2.0/(EMA_period+1)));
} 
Lwma- то тут где вообще?
 
jartmailru:
Что-то меня смущает
Lwma- то тут где вообще?

Я тоже не разобрался.

По вашим вышеприведённым формулам будет работать только если индикатор запускать на родном таймфрейме,

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

Оно, может и правильно, для использования, но для переделки

получается настолько туманно, что я не могу разобраться.

Вот если бы кто-то переписал не теряя универсальности в более простой и медленный алгоритм,

при использовании которого не было бы условий для накопления погрешности расчётов, то думаю, это было бы полезно всему сообществу.

То есть я имею в виду золотое правило программстов: писать код, который выглядит просто, и читается без труда, практически не требует комментариев.