Ошибки в Qlua - двойной прогон всех индексов через функцию OnCalculate()

Страницы: 1
RSS
Ошибки в Qlua - двойной прогон всех индексов через функцию OnCalculate(), При добавлении индикатора на график происходит двойной прогон всех индексов через функцию OnCalculate()
 
При добавлении индикатора на график происходит двойной прогон всех индексов через функцию OnCalculate()

То есть два раза прогоняются все индексы от 1 до последнего - Size(), через функцию OnCalculate()

Описание - какие методы вызываются при добавлении индикатора.

Когда и какие методы вызываются, и сколько раз.

------
добавление индикатора через (Редактировать -> Добавить)
- Init()
- OnCalculate() - все индексы прогоняются 2 раза

[Применить] - вызывает OnCalculate() со всеми свечами
[OK] - вызывает OnCalculate() со всеми свечами

------
добавление индикатора через (Добавить график (индикатор) -> Добавить)
- Init()
- OnCalculate() - все индексы прогоняются 2 раза

------
Смена таймфрейма:
- OnCalculate() - все индексы прогоняются 1 раз

------
Смена инструмента: - через таблицу "Текущих торгов" - если график заякорён к ней
- Init()
- OnChangeSettings()

- OnCalculate() - все индексы прогоняются 1 раз

------
Изменение настроек в ручную:
- OnChangeSettings()
- OnCalculate() - все индексы прогоняются 2 раза

------
Удаление индикатора:
- OnDestroy()
------

Просьба к разработчикам исправить неправильную обработку добавления индикатора
и сделать при добавлении нового индикатора на график 1 прогон всех индексов через функцию - OnCalculate()
 
Данная ошибка выявлена в версиях:
Версия 9.1.1.3
Версия 8.13.3.1
 
Это не ошибка,это фиииииича.

просили много раз об этом, но разработчикам , видимо, так удобно.
 
У меня из-за этой фичи пишутся в файл две одинаковые записи , что приводит к дальнейшему слому моего алгоритма чтения/записи.
Приходится выкорячиваться и обходить эту фичу всякими нецензурными методами. Зато программерское мастерство сильно хорошо
оттачивается.
 
Цитата
vladindre написал:
У меня из-за этой фичи пишутся в файл две одинаковые записи , что приводит к дальнейшему слому моего алгоритма чтения/записи.
Приходится выкорячиваться и обходить эту фичу всякими нецензурными методами. Зато программерское мастерство сильно хорошо
оттачивается.
Как уже сказали, этому косяку уже много лет, и фиксить его разрабы почему-то не желают.

У себя я решил проблему примерно так (упростил и вырезал стратегию)
Код
function OnCalculate(i)
  if(sec_code~=getDataSourceInfo().sec_code)or(class_code~=getDataSourceInfo().class_code)or(interval~=getDataSourceInfo().interval)then
    lines={} -- Массив со кешем рабочих линий
    interval=getDataSourceInfo().interval
    sec_code=getDataSourceInfo().sec_code
    class_code=getDataSourceInfo().class_code
  end
  if CandleExist(i) and lines[i]==nil then
    -- тут мои вычисления
    lines[i]={}
    lines[i]["S"]=sell
    lines[i]["B"]=buy
  end
  return lines[i]["S"],lines[i]["B"]
end
В результате индикатор рассчитывается для каждой свечи только один раз, и полностью пересчитывается при смене инструмента или интервала
 
Хороший вариант, попробую его использовать. Спасибо.
Страницы: 1
Читают тему (гостей: 1)
Наверх