повторный Init() без OnDestroy() в индикаторе

Страницы: 1
RSS
повторный Init() без OnDestroy() в индикаторе, При смене инструмента графика в Lua индикаторе перечитывается файл без предварительного срабатывания OnDestroy()
 
Есть Таблица текущих торгов и связанный с ней график.
На график добавлен индикатор за основу взят пример индикатора ATR.
Изменения:
Код
dofile(getWorkingFolder().."\\LuaScripts\\kv_log.lua")

inited = false
            
function Init()
    if not inited then
        kvLogOpen()
        kvLog("ATR Price Init")
        func = ATR()
        inited = true
    end
    return #Settings.line
end

function OnDestroy() 
    if inited then
        kvLog("ATR Price OnDestroy")
        kvLogClose()
        inited = false
    end
end

function OnCalculate(Index) 
    if Index == 1 then kvLog("ATR Price OnCalculate(Index == 1)") end
    return func(Index, Settings)
end
При смене инструмента срабатывает
Код
kvLog("ATR Price Init")
из лога:
Цитата
: ATR Price Init
: ATR Price OnCalculate(Index == 1)
14:50:28 : ATR Price OnCalculate(Index == 1)
< Меняем инструмент >
14:50:43 : ATR Price Init
14:50:43 : ATR Price OnCalculate(Index == 1)
Соответственно теряется дескриптор открытого в первый раз файла лога.
Как можно этого избежать?

Скрытый текст
 
Добрый день.

Уточните, какую версию клиентского места QUIK используете?
Дело в том, что подобные проблемы ранее возникали, если версия ниже 7.5, то обновитесь до актуальной 7.10.
 
версия 7.9.1.1 - последняя на серверах Открытие Брокер.
Не будет конфликтов если обновлюсь с вашего сайта?
 
Цитата
Владимир Киселев написал:
dofile(getWorkingFolder().."\\LuaScripts\\kv_log.lua")
Владимир, так как у Вас версия 7.9, то можно пока не обновляться.
Пришлите вот этот файл
dofile(getWorkingFolder().."\\LuaScripts\\kv_log.lua")
Мы проверим у себя.
 
Цитата
Egor Zaytsev написал:
ело в том, что подобные проблемы ранее возникали, если версия ниже 7.5, то обновитесь до актуальной 7.10.
В 7.10, как и в предыдущих, при смене инструмента скрипт индикатора перечитывается заново. При этом значения всех переменных принимают первоначальные значения.
OnDestroy при этом не вызывается.
Я не могу быть заинтересован в устранении ошибок в чужом ПО больше, чем его разработчик.
 
Цитата
Старатель написал:
Цитата
Egor Zaytsev   написал:
ело в том, что подобные проблемы ранее возникали, если версия ниже 7.5, то обновитесь до актуальной 7.10.
В 7.10, как и в предыдущих, при смене инструмента скрипт индикатора перечитывается заново. При этом значения всех переменных принимают первоначальные значения.
OnDestroy при этом не вызывается.
Здравствуйте!

Ваше обращение получено, проблема изучается. Постараемся в ближайшее время дать ответ.
 
Цитата
Egor Zaytsev написал:
Пришлите вот этот файл
dofile(getWorkingFolder().."\\LuaScripts\\kv_log.lua")
Мы проверим у себя.
Его текст в первом сообщении под спойлером (скрытый текст).
пока не разобрался как у вас прикреплять файлы.
 
Цитата
Владимир Киселев написал:
Цитата
Egor Zaytsev   написал:
Пришлите вот этот файл
dofile(getWorkingFolder().."\\LuaScripts\\kv_log.lua")
Мы проверим у себя.
Его текст в первом сообщении под спойлером (скрытый текст).
пока не разобрался как у вас прикреплять файлы.
Здравствуйте,
Мы зарегистрировали обращение. Как будет результат дадим здесь ответ.
 
Добрый день,
   
    Ошибка, описанная в данном инциденте, будет исправлена в одной из     очередных версий программы.
    Приносим извинения за причиненные неудобства.
 
Что вы признали ошибкой? Обнуление значений переменных?
Я не могу быть заинтересован в устранении ошибок в чужом ПО больше, чем его разработчик.
 
Цитата
Старатель написал:
скрипт индикатора перечитывается заново. При этом значения всех переменных принимают первоначальные значения.
OnDestroy при этом не вызывается.
Добрый день.

То, что скрипт индикатора перечитывался заново. OnDestroy при этом не вызывался.
 
Цитата
Egor Zaytsev написал:
То, что скрипт индикатора перечитывался заново.
В этом есть свой плюс: при изменении кода индикатора не нужно выполнять кучу манипуляций по его удалению и повторному добавлению на график. Достаточно переключить инструмент в режиме связанных окон туда-обратно.
А вот обнуление значений переменных - это проблема: теряются хендлеры файлов, меток и пр.
Я не могу быть заинтересован в устранении ошибок в чужом ПО больше, чем его разработчик.
 
Старатель написал:
Цитата
А вот обнуление значений переменных - это проблема: теряются хендлеры файлов, меток и пр.
Об этом и тема, поднятая мной.
А ваш плюс?:
Цитата
Старатель написал:
В этом есть свой плюс: при изменении кода индикатора не нужно выполнять кучу манипуляций по его удалению и повторному добавлению на график. Достаточно переключить инструмент в режиме связанных окон туда-обратно.
Вы используете Quik для "изменения кода"? или Вы пишите для более удобной работы в Quik?
 
P.S.: и парный OnDestroy() совсем не мешает
Цитата
Владимир Киселев написал:
удалению и повторному добавлению на график
на график
 
Проблема отсутствия вызова "OnDestroy" при смене инструмента до сих пор актуальна (QUIK 8.13.1.6). Не вызываются даже финализаторы объектов Lua, созданных в контексте предыдущего инструмента. Годы идут, когда ожидать решения проблемы?)
 
Эти контексты (контексты Lua от предыдущих инструментов на графике) - тупо живые! Я сохранял lua_State* от них и проверял все в OnInit - в этих контекстах тестовые глобальные переменные и их значения сохранены. И финализаторы не вызываются даже при закрытии терминала. Утечка ресурсов в нетривиальном пользовательском индикаторе неизбежна.
 
Добрый день.

К сожалению, на данный момент ошибка действительна не исправлена.
 
Цитата
Egor Zaytsev написал:
Добрый день.

К сожалению, на данный момент ошибка действительна не исправлена.
Будьте любезны, заведите/освежите "тикет", пожалуйста)
Вставить вызов пользовательской функции OnDestroy и/или закрыть Lua контекст пользовательского скрипта (для вызова финализаторов) при смене инструмента графика, как это делается при удалении индикатора.
 
Добрый день.

Информация добавлена в обращение.
 
Извиняюсь, что влезаю в тему, но вроде как это касается обсуждаемого вопроса.

Вызывать OnDestroy() еще и при смене интервала инструмента надо бы, график же меняется.
И соответственно, после смены интервала OnInit() заново вызывать.

Собственно, нужно это для того, чтобы скрипт индикатора понимал, что параметры графика изменили, и надо бы пересчитывать весь индикатор заново.
Сейчас выкручиваюсь тем, что в OnCalculate(), отслеживаю не изменился ли инструмент или интервал графика, но это как-то "неправильно" по моему.
 
Здравствуйте BlaZed,
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
 
Цитата
Sergey Hlynovskii написал:
 Здравствуйте  BlaZed ,
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Похоже, у каждого вновь прибывшего сотрудникпа Арка свой маленький блокнотик, в который он чирикает пожелалки карандашиком.

в 2013 году Михаил Булычев дважды обещал мне исправить эту проблему - в приватной переписке и на этом форуме тоже.

Потом я поднимал эту тему в ином разрезе. Написал, что в момент смены инструмента на вызывается destroy() уже на этом форуме. Алексей Иванников попросил сделать скрипт и прислать , чтобы "провести исследования". Как понимаю, в надежде, чтобы я отвязался. Я прислал. 6 строчек. После длительных обсуждений и "проверок на непротиворечивость и соответствие политике компании" признали, ну и дальше по тексту, "в одной из следующих версий". В результате потеряли блокнотик, или рыбу завернули неудачно в ту самую страничку.

Сергей Горохов, помнится, тоже поучаствовал, и с его блокнотиком тоже беда приключилась. Или просто карандашик сломался и записать было нечем.

а вы какую рыбу любите, Сергей?

P.S. Номера обращений не нужно спрашивать, поиск по форуму даст все ответы.
www.bot4sale.ru        t.me/bot4sale
Страницы: 1
Читают тему (гостей: 1)
Наверх