Как работает OnCalculate()

Страницы: 1
RSS
Как работает OnCalculate(), Интерактивно указываю интервал расчета при помощи меток. Пересчитывается только текущая свеча
 
Здравствуйте форумчане и разработчики.
Прошу пояснить такой вопрос - как работает функция OnCalculate(). Я кодом Lua выбрасываю на график две метки, затем перемещаю их руками и затем провожу расчет индикатора на интервале между метками. Ожидал, что все линии индикатора изменятся после расчета. Но...алгоритм работы функции OnCalculate() не соответствует моим ожиданиям. На скрине ниже все видно - сначала выводятся рассчитанные значения до перемещения меток и только на последней свечке (по приходу тиков) выводятся рассчитанные значения. Это так задумано изначально?
 
Добрый день.
Все верно, функция OnCalculate() срабатывает при появлении нового значения на графике.
Если вы хотите безусловное срабатывание OnCalculate(), то можно воспользоваться функцией: SetValue: Функция предназначена для установки указанного значения на выбранной линии определенной свечи индикатора.
 
Спасибо Егор.
Еще один вопрос - будет ли корректно отрабатывать  SetValue() если ее вызовы будут находится в другой функции ( в ней в цикле рассчитываются сразу все значения, которые необходимо вывести ), вызываемой из OnCalculate(), или ее необходимо разместить в теле OnCalculate().
Пример:
Код
function GETTRENDLINE(APntIdx,APntLvl,BPntIdx,BPntLvl,koe)
   local Line
        local indx
   local TrLine
   --g_PriceStep
   --g_PriceScale 
   indx=Size();
   --message(tostring(indx));
   for i=0,indx do
      if indx < APntIdx then
         SetValue(i, 1, nil)
         else
            if indx > BPntIdx then
               SetValue(i, 1, nil)
               else
                  if indx==APntIdx then
                     SetValue(i, 1, APntLvl)
                  end
                  if indx==BPntIdx then
                     SetValue(i, 1, BPntLvl)
                  end
                  if indx>APntIdx then
                     if indx<BPntIdx then
                        TrLine=math_round(APntLvl*koe,g_PriceScale)
                        SetValue(i, 1, TrLine)
                     end
                  end
            end
      end
   end
   return 
end
 
VNG_nemo,
Да будет
Страницы: 1
Читают тему (гостей: 1)
Наверх