Метки в индикаторе

Страницы: 1
RSS
Метки в индикаторе, При перезапуске Квика получается наслоение меток
 
Индикатор:
Код
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
то напишите так:
Код
function OnDestroy ()
DelAllLabels(tag);
end
 
Цитата
nikolz написал:
Код
DelAllLabels(tag)

DelAllLabels удаляет метки не только на графике с указанным идентификатором, и в некоторых ситуациях не применим.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
nikolz написал:
Если хотите удалить все метки при срабатывании OnDestroy
Нужно удалить не все, а только те метки, что были выставлены из индикатора.
Надо делать так, как надо. А как не надо - делать не надо.
 
Я сохраняю UIDы меток выставленным скриптами в файл и потом если надо удаляю поштучно.
Это полезно еще при необходимосте перезапуска метки в случае прочих косяков.
 
Цитата
Kolossi написал:
Я сохраняю UIDы меток выставленным скриптами в файл и потом если надо удаляю поштучно.
Это полезно еще при необходимосте перезапуска метки в случае прочих косяков.
Я имел ввиду вариант удаления меток не при закрытии Квика, а при повторном запуске.
К стати в приведенном коде OnDestroy() если в цикле for ...  поставить явно

local res=DelLabel(Settings.tag, Labels[i])
message(tostring(res).."/"..Settings.tag.."/"..tostring(Labels[i]))

сообщение выдаст правильные параметры?
 
Цитата
Kolossi написал:
сообщение выдаст правильные параметры?

Тег графика и идентификаторы меток корректные, но DelLabel возвращает false
Надо делать так, как надо. А как не надо - делать не надо.
 
Ещё какая-то информация требуется?
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Старатель написал:
Цитата
nikolz написал:
Если хотите удалить все метки при срабатывании OnDestroy
Нужно удалить не все, а только те метки, что были выставлены из индикатора.
тогда в цикле
DelLabel(STRING chart_tag, NUMBER label_id)
 
В OnDestroy
 
Цитата
nikolz написал:
тогда в цикле
DelLabel(STRING chart_tag, NUMBER label_id)
nikolz, я знаю, что вы не умеете читать, как минимум код. В коде в первом сообщении это есть.
Надо делать так, как надо. А как не надо - делать не надо.
 
Вопрос был к клиентской поддержке.
Надо делать так, как надо. А как не надо - делать не надо.
 
А еще в терминале случаются моменты, когда все работает штатно, а ondestroy не вызывается. И, конечно,  "в одной из следующих версий..." Поэтому удаление меток, выставленных в индикаторе - вопрос удачи и полагаться на это нельзя.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
Старатель написал:
Индикатор:
Код
   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- второй

 


удаляю один индикатор:
 
 
версия квика 9.7.1.10
 
это картинки для версии квика 9.5.0.42
два индикатора:

один удаляем:


Удивительно, но у меня все работает правильно.
 
nikolz,
Цитата
Старатель написал:
При закрытии Квика срабатывает OnDestroy, но метки с графиков не удаляются.

"Чукча не читатель, чукча - писатель."
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Roman Mural написал:
Так и было задумано.
Цитата
Roman Mural написал:
для удаления меток Вы можете воспользоваться функцией DelAllLabels

Значит, плохо было задумано.
Возьмите два индикатора, которые ставят/снимают метки на одной диаграмме на разных графиках с разными идентификаторами в разных областях и полюбуйтесь, как они будут удалять чужие метки. А заодно сотрут ещё и все пользовательские метки в той же диаграмме.
Надо делать так, как надо. А как не надо - делать не надо.
 
Лично я считаю, что необходимо минимизировать ЛЮБЫЕ обращения к системному софту Квика. У меня, слава богу, никогда не было и даже не планировалось никаких меток, никаких графиков, никаких стаканов и, соответственно, никаких проблем, с этим связанных. Какое-то время я надеялся получать от них свечи, но техника их получения настолько ужасна, что давным-давно все свечи считаю сам. Какое-то время я надеялся заставить работать хотя бы утилиту автоматической сверки портфеля с данными брокера, но и это оказалось утопической задачей. Какое-то время я надеялся компенсировать глюки с обнулением ID транзакции, дублируя эту айдишку в поле комментария в наивном предположении, что хотя бы в одном из этой колоды прерываний на одно события хотя бы в одном из этих полей эта айдишка будет прописана правильно, но и это оказалась утопией. А в последние 2-3 дня меня задолбала диагностика "Данный инструмент запрещён для операции шорт". Какой, блин, "данный"? Язык отвалится назвать, какой именно? К тому же, я АБСОЛЮТНО ТОЧНО знаю, что акции эти у меня есть, и столь же точно знаю, что и брокер об этом прекрасно знает. Иногда встречается диагностика "Превышена позиция по деньгам", хотя и я, и скрипт, и брокер прекрасно знаем, что деньги у меня есть. И при этом при всём ещё и новые версии плодятся, как тараканы. Пока вся эта конструкция ещё хоть как-то работает, "но ключевое здесь - пока".
 
Здравствуйте.

Цитата
Александр М написал:
Присоединяюсь к Старателю, в новых версиях QUIK (от 8.13 и выше), по DelLabel метки не удаляются в колбеке OnDestroy, хотя должны, а удалять их по DelAllLabels нельзя, т.к. на 1 графике может быть много индикаторов со своим набором меток.
Мы зарегистрировали пожелание на доработку.  Мы постараемся рассмотреть его и  сообщить Вам результаты анализа. Впоследствии, по результатам анализа,  будет приниматься решение о реализации пожелания в будущих версиях ПО.
 
Цитата
Alexey Danin написал:
Здравствуйте.

 Мы зарегистрировали пожелание на доработку.  Мы постараемся рассмотреть его и  сообщить Вам результаты анализа. Впоследствии, по результатам анализа,  будет приниматься решение о реализации пожелания в будущих версиях ПО.
Алексей, пользуясь случаем оставлю здесь ещё пожелание: Добавьте ещё один параметр в таблице метки, типа user_id или user_hint, используя который пользователь смог бы идентифицировать метку. Kolossi выше написал, что он сохраняет UID метки в файл и затем удаляет при повторном запуске. Я тоже в подобных случаях удаляю старые при повторном запуске терминала. Не знаю, что за UID Kolossi сохраняет, но label_id для этих целей не годятся, и поэтому приходится выдумывать разное экзотическое для идентификации: где-то использую время, где-то цвета, а где-то редкий шрифт, и потом при запуске удаляю все метки с определенным шрифтом, например. Существование дополнительного параметра в таблице существенно бы облегчило данную задачу.
 
Здравствуйте.

Цитата
Игорь М написал:
Алексей, пользуясь случаем оставлю здесь ещё пожелание: Добавьте ещё один параметр в таблице метки, типа user_id или user_hint, используя который пользователь смог бы идентифицировать метку.  Kolossi  выше написал, что он сохраняет UID метки в файл и затем удаляет при повторном запуске. Я тоже в подобных случаях удаляю старые при повторном запуске терминала. Не знаю, что за UID  Kolossi  сохраняет, но label_id для этих целей не годятся, и поэтому приходится выдумывать разное экзотическое для идентификации: где-то использую время, где-то цвета, а где-то редкий шрифт, и потом при запуске удаляю все метки с определенным шрифтом, например. Существование дополнительного параметра в таблице существенно бы облегчило данную задачу.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Страницы: 1
Читают тему (гостей: 1)
Наверх