По мотивам https://forum.quik.ru/forum13/topic1576/ Аналогичную проблему наблюдаю третий день. Зависает lua-индикатор, который получает данные из другого источника. Проблема как на 7й так и на 6й версии. Как на боевой базе так и на Quik-Junior (три дня назад джуниор ещё работал). Как при подключенном состоянии так и без. Катастрофически растёт info.log (сотни мегабайт за несколько минут). Сначала грешил на getCandlesByIndex(). Сейчас подозреваю, что проблема в работе функции OnCalculate. Раньше она у меня работала так - при старте отрабатывала все свечки от 1 до n, а затем каждый интервал - n+1, n+2 ит.д. Сейчас она отрабатывает весь массив данных с сервера, независимо от настройки Параметров текущего окна\Диаграмма\ и не интервально, а по тикам. Допустим настройка Последние 50 свечек и интервал 60мин.
Вот как отрабатывает: Settings={ Name = "SimpleLine" } function Init() file = io.open(getScriptPath().."\\log.txt", "w") return 1; end function OnCalculate(index) t = os.date(); file:write(t.." "..tostring(index).."\n"); return 1; end
По нескольку раз в секунду отрабатывает 1856я свечка! Если индикатор более сложный, то с такой частотой отрабатывает весь алгоритм, каждый раз получая данные из источника. Неудивительно, терминал виснет на несколько минут. У других вообще падает...
Вадим, добрый день! В функции OnCalculate(index), index - это посути номер текущей свечи и он приходит каждый тик. На текущей свече (от минуты до...) index ,будет иметь одинаковое значение. Если надо рассчитать индикатор лишь раз по приходу свечи, делаю примерно так:
Код
old_index=-1
function OnCalculate(index)
if index~=old_index then
--
--
--
-- рассчитываю
--
end
old_index=index
return---что рассчитал
end
Если работать только в текущей свече ( с подключение к брокеру) то if index==old_index... и расчет будет вестись каждый тик
Здравствуйте, OnCalculate срабатывает на каждое изменение текущей (последней) свечи и это нормально. Поэтому пока последняя не сформировалась она будет появляться в OnCalculate столько раз сколько изменится.
...Можно приделать счетчик на приход index, или через Т() засекать интервал времени. У меня чуть другая история: индикатор работает сам по себе, но подключаю скрипт берущий свечки сграфика цены в окне, где этот индикатор и Квик падает.
Пришлите для анализа архив всей папки с терминалом QUIK (без ключей доступа) созданный сразу после падения и скрипт индикатора который приводит к падению
Пришлите для анализа архив всей папки с терминалом QUIK (без ключей доступа) созданный сразу после падения и скрипт индикатора который приводит к падению
Пришлите для анализа архив всей папки с терминалом QUIK (без ключей доступа) созданный сразу после падения и скрипт индикатора который приводит к падению