Расчет в роботе Экспоненциальное скользящее среднее (EMA)

Страницы: 1
RSS
Расчет в роботе Экспоненциальное скользящее среднее (EMA)
 
Здравствуйте! Возникла задача рассчитать EMA. Но результаты расчета не равны соответствующему индикатору. Не могу понять в чем ошибка? Бьюсь уже несколько дней. Может кто подскажет? Код привожу ниже.


C_ema8 = {}
function main()
 while is_run do
 sleep(1000)
   
   ds1, Error = CreateDataSource (CLASS, SEC, INTERVAL_M10)

-- Ema8

Ema_8 = 0
GO8 = 0
pre_ema_8 =0
period_ema8 = 8

   for i_ema_8 = period_ema8, 1, -1 do
        C_ema8[i_ema_8] = ds1:C(ds1:Size() - (i_ema_8 - 1))
 
        if i_ema_8 == period_ema8 then
              Ema_8 = C_ema8[i_ema_8]
       else
           pre_ema_8 = Ema_8
           GO8 = 1
       end

       if GO8 == 1 then
                Ema_8 = pre_ema_8*(2/(period_ema8+1))+ (1 - (2/(period_ema8+1)))*C_ema8[i_ema_8]
       end

       if i_ema_8 == 1 then
               Ema8 = math.ceil(Ema_8)
               GO8 = 0
       end
   end
end
 
Если взять формулу из руководства все равно разница получается в десятки единиц
Ema_8 = (pre_ema_8*(period_ema8-1)+2*C_ema8[i_ema_8])/(period_ema8 + 1)
 
Здравствуйте,
Пример расчета в LUA можно посмотреть по ссылке:
ftp://ftp.quik.ru/public/INDICATORS.zip
 
Проблема решена.

Считать необходимо не 8 свечей (период), а все для нужного таймфрейма, т.е.

for i_ema_8 = 1, ds1:Size() , 1 do
Страницы: 1
Читают тему
Наверх