local Labels = {}
function OnCalculate(index)
if index == 1 then
OnDestroy()
end
...
local Label = AddLabel(Settings.tag, Param)
if Label and Label > 0 then
Labels[#Labels+1] = Label
end
...
end
function OnDestroy()
for i = 1, #Labels do
PrintDbgStr('DelLabel(' .. Labels[i] .. '): ' .. tostring(DelLabel(Settings.tag, Labels[i])))
end
Labels = {}
end
При закрытии Квика срабатывает OnDestroy, но метки с графиков не удаляются. И при следующем запуске индикатор ставит новые метки поверх старых, что есть не хорошо. Так и было задумано или же ошибка?
Надо делать так, как надо. А как не надо - делать не надо.
local Labels = {}
function OnCalculate (index)
if index = = 1 then
OnDestroy()
end
.. .
local Label = AddLabel (Settings.tag, Param)
if Label and Label > 0 then
Labels[ # Labels + 1 ] = Label
end
.. .
end
function OnDestroy ()
for i = 1 , # Labels do
PrintDbgStr ( 'DelLabel(' .. Labels[i] .. '): ' .. tostring( DelLabel (Settings.tag, Labels[i])))
end
Labels = {}
end
При закрытии Квика срабатывает OnDestroy, но метки с графиков не удаляются. И при следующем запуске индикатор ставит новые метки поверх старых, что есть не хорошо. Так и было задумано или же ошибка?
Да, это у Вас ошибка в алгоритме. --------------------------- Если хотите удалить все метки при срабатывании OnDestroy то напишите так:
Я сохраняю UIDы меток выставленным скриптами в файл и потом если надо удаляю поштучно. Это полезно еще при необходимосте перезапуска метки в случае прочих косяков.
Kolossi написал: Я сохраняю UIDы меток выставленным скриптами в файл и потом если надо удаляю поштучно. Это полезно еще при необходимосте перезапуска метки в случае прочих косяков.
Я имел ввиду вариант удаления меток не при закрытии Квика, а при повторном запуске. К стати в приведенном коде OnDestroy() если в цикле for ... поставить явно
local res=DelLabel(Settings.tag, Labels[i]) message(tostring(res).."/"..Settings.tag.."/"..tostring(Labels[i]))
А еще в терминале случаются моменты, когда все работает штатно, а ondestroy не вызывается. И, конечно, "в одной из следующих версий..." Поэтому удаление меток, выставленных в индикаторе - вопрос удачи и полагаться на это нельзя.
local Labels = {}
function OnCalculate (index)
if index = = 1 then
OnDestroy()
end
.. .
local Label = AddLabel (Settings.tag, Param)
if Label and Label > 0 then
Labels[ # Labels + 1 ] = Label
end
.. .
end
function OnDestroy ()
for i = 1 , # Labels do
PrintDbgStr ( 'DelLabel(' .. Labels[i] .. '): ' .. tostring( DelLabel (Settings.tag, Labels[i])))
end
Labels = {}
end
При закрытии Квика срабатывает OnDestroy, но метки с графиков не удаляются. И при следующем запуске индикатор ставит новые метки поверх старых, что есть не хорошо. Так и было задумано или же ошибка?
Добрый день,
Так и было задумано. По вопросу данного функционала уже есть пожелание на доработку, если хотите, то мы можем прикрепить данную ветку к обращению. Как уже было написано выше, для удаления меток Вы можете воспользоваться функцией DelAllLabels.
Присоединяюсь к Старателю, в новых версиях QUIK (от 8.13 и выше), по DelLabel метки не удаляются в колбеке OnDestroy, хотя должны, а удалять их по DelAllLabels нельзя, т.к. на 1 графике может быть много индикаторов со своим набором меток.
Для тех, кто в танке. ============== Вот вам картинки удаления меток при удалении индикатора. ============= На графике два индикатора метки м1 - первый, m2- второй
Roman Mural написал: для удаления меток Вы можете воспользоваться функцией DelAllLabels
Значит, плохо было задумано. Возьмите два индикатора, которые ставят/снимают метки на одной диаграмме на разных графиках с разными идентификаторами в разных областях и полюбуйтесь, как они будут удалять чужие метки. А заодно сотрут ещё и все пользовательские метки в той же диаграмме.
Надо делать так, как надо. А как не надо - делать не надо.
Лично я считаю, что необходимо минимизировать ЛЮБЫЕ обращения к системному софту Квика. У меня, слава богу, никогда не было и даже не планировалось никаких меток, никаких графиков, никаких стаканов и, соответственно, никаких проблем, с этим связанных. Какое-то время я надеялся получать от них свечи, но техника их получения настолько ужасна, что давным-давно все свечи считаю сам. Какое-то время я надеялся заставить работать хотя бы утилиту автоматической сверки портфеля с данными брокера, но и это оказалось утопической задачей. Какое-то время я надеялся компенсировать глюки с обнулением ID транзакции, дублируя эту айдишку в поле комментария в наивном предположении, что хотя бы в одном из этой колоды прерываний на одно события хотя бы в одном из этих полей эта айдишка будет прописана правильно, но и это оказалась утопией. А в последние 2-3 дня меня задолбала диагностика "Данный инструмент запрещён для операции шорт". Какой, блин, "данный"? Язык отвалится назвать, какой именно? К тому же, я АБСОЛЮТНО ТОЧНО знаю, что акции эти у меня есть, и столь же точно знаю, что и брокер об этом прекрасно знает. Иногда встречается диагностика "Превышена позиция по деньгам", хотя и я, и скрипт, и брокер прекрасно знаем, что деньги у меня есть. И при этом при всём ещё и новые версии плодятся, как тараканы. Пока вся эта конструкция ещё хоть как-то работает, "но ключевое здесь - пока".
Александр М написал: Присоединяюсь к Старателю, в новых версиях QUIK (от 8.13 и выше), по DelLabel метки не удаляются в колбеке OnDestroy, хотя должны, а удалять их по DelAllLabels нельзя, т.к. на 1 графике может быть много индикаторов со своим набором меток.
Мы зарегистрировали пожелание на доработку. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Мы зарегистрировали пожелание на доработку. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Алексей, пользуясь случаем оставлю здесь ещё пожелание: Добавьте ещё один параметр в таблице метки, типа user_id или user_hint, используя который пользователь смог бы идентифицировать метку. Kolossi выше написал, что он сохраняет UID метки в файл и затем удаляет при повторном запуске. Я тоже в подобных случаях удаляю старые при повторном запуске терминала. Не знаю, что за UID Kolossi сохраняет, но label_id для этих целей не годятся, и поэтому приходится выдумывать разное экзотическое для идентификации: где-то использую время, где-то цвета, а где-то редкий шрифт, и потом при запуске удаляю все метки с определенным шрифтом, например. Существование дополнительного параметра в таблице существенно бы облегчило данную задачу.
Игорь М написал: Алексей, пользуясь случаем оставлю здесь ещё пожелание: Добавьте ещё один параметр в таблице метки, типа user_id или user_hint, используя который пользователь смог бы идентифицировать метку. Kolossi выше написал, что он сохраняет UID метки в файл и затем удаляет при повторном запуске. Я тоже в подобных случаях удаляю старые при повторном запуске терминала. Не знаю, что за UID Kolossi сохраняет, но label_id для этих целей не годятся, и поэтому приходится выдумывать разное экзотическое для идентификации: где-то использую время, где-то цвета, а где-то редкий шрифт, и потом при запуске удаляю все метки с определенным шрифтом, например. Существование дополнительного параметра в таблице существенно бы облегчило данную задачу.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.