Переписать стандартные Moving Averages

 
Доброго времени суток.
Сейчас ваяю советник, с простой схемой 4 МА, с разных ТФ, когда веер вверх бай, когда вниз сел.
1. сперва была испробована методика вычисления iMA(.., TF1, ..), iMA(.., TF2, ..)... но когда мы берем такие данные например с H4, где свеча еще не закончилась... то частенько выходят или ложные сигналы, или нужно делать "перерисовки" в советнике. И еще при работе тестера, почему-то я сомневаюсь, что тестер берет данные из истории нужного тф.
2. потом была испробована идея вычисления домножителей, типа раз на М5 * 3, то и просто нужно вычислять МАшку в 3 раза большую и получишь нужный результат МА с М15. Но как говорится все не так просто, из-за особенностей вычисления самих стандартных функций.


3. Ну и сейчас приходит в голову переписать стандартные МА, чтобы работая только со свечками текущего тф с нужным домножителем, вычислять МА нужного тф корректно.
-----------------------------------------------
Ребята, очень буду признателен:
1. тому кто перепишет все это за меня, бесплатно. :-)))))) (ну хоть улыбнулись)
2. если кто-то уже переписывал стандартные МА в подобном ключе, поделитесь исходниками, пожалуйста.
3. может еще есть варианты решения этого глупого грааля.

Всем спасибо.
 
Вы среднее временного ряда физически интерпретируете?
 
Ну в моем плане 2. именно "да".
А вот в плане 3. получается так, что например по тф м5, берем через каждые 3 бара, и вычисляем только по Close последнего из 3 баров. Где-то так.
 
Так что требуется?
Физически корректная непрерывная машка очень проста.
Вспомните интегрирование и геометрический аналог.
Переписать индюки - 27 минут.
--
все!
;)
 
Простите, пожалуйста, я вас не понял. Если не затруднит, то на примере
// в start() {... ExtCountedBars = IndicatorCounted(); ...}

void ema()
{
      double pr  = 2.0 / (MA_Period + 1);
      int    pos = Bars - 2;
      if (ExtCountedBars > 2) pos = Bars - ExtCountedBars - 1;
   //---- main calculation loop
      while(pos >= 0)
      {
         if(pos == Bars - 2)  ExtMapBuffer[pos + 1] = Close[pos + 1];
         ExtMapBuffer[pos] = Close[pos] * pr + ExtMapBuffer[pos + 1] * (1 - pr);
              pos--;
      }
}
объясните, что вы имеете в виду, на счет интегрирования?
Это конечно код просто стандартного индикатора, а не функции iMA(), но все же логика ясна... хотя pr - доля использования значения цен.
Причина обращения: