Сергей (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Получить номер свечи-фрактала
 
Просто надо убрать лишние строки кода из индикатора - ds в данном коде не используется и всегда false  
Получить номер свечи-фрактала
 
Цитата
VPM написал:
Здесь много примеров как это делается для обоих вариантов.
Благодарю.  Про скрипт я даже не подумал, там понятно было бы ds=CreateDataSource() и далее, а тема начата именно с индикатора и вот что в индикаторе за ds и как в ней оказались данные source Откуда в функцию Value(...,ds)  передается sourse не могу понять и соответственно далее Out = (O and O(I)) or (ds and ds:O(I))  Ну O(I) - источник с графика а остальное?
Дайте какие то ссылки чтобы разобраться
Получить номер свечи-фрактала
 
Цитата
VPM написал:
Смотрите в справке функцию CreateDataSourc
Но функцию CreateDataSource можно использовать только внутри функций main() сриптов а это индикатор, и во-вторых, я вообще не вижу где переменная ds объявлена и что ей присвоено какое то значение
Получить номер свечи-фрактала
 
Переменная ds это что? подскажите
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Andrey Golik
Прошу Вас ознакомится с экспериментами последних постов и конкретно написать здесь в течении какого времени проблема будет решена
У вас в компании должен быть регламент работы с клиентами и обозначены сроки решения проблем с рабочим местом трейдера
Как правило такие регламенты предполагают срок не более 1 месяца
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Цитата
nikolz написал:
Полагаю что тема про OnDestroy()  закрыта  
Не парни, так не пойдет...  Про OnDestroy()  может и так, т.е. неправильно тема названа но суть темы в том что терминал теряет контроль над метками, а как это проблема должна решиться это уже вопрос разработчиков. Или де инициализацией  или еще каким образом потому как в процессе и вашей попытки решить какими то обходными путями проблема НЕ РЕШИЛАСЬ Метка после переключения на другой актив не удаляется
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Ваше время :) не свое...  А Вам благодарен Буду искать обходные варианты
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Цитата
nikolz написал:
После сдвига экрана функция set установит новые координаты метки. А старая метка останется на экране
Да не должна она нигде остаться У нее есть id при создании и терминал его знает и помнит (должен по крайней мере) и если я делаю новые установки  SetLabelParams() то именно к этому id
За все остальное отвечает сам терминал, он должен удалить и создать новый объект или к существующему применить изменения но именно с этим изначальным id.  А уж при смене инструмента все удалить а скрипт сделает все заново.
Еще раз спасибо, не хочу вас дальше втягивать и тратить время
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Цитата
Бес Паники написал:
Да, и у Price нужно этот идентификатор тогда убрать, чтобы Quik точно знал, где убирать метки.
Убрал и идентификатор ввел в "дополнительно" окна индикатора, увы...  
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Цитата
nikolz написал:
Поэтому, полагаю, что как Вы хотите не получится
Не совсем понимаю что вообще дает стирание метки и создание ее заново если можно менять ее параметры? Это сэкономит ресурсы или еще что то?
Когда сменится инструмент то все предыдущее должно быть удалено в принципе и инициализировано заново как с чистого листа чего как раз и не происходит, как это должно быть реализовано это не вопрос пользователя

Конечно если это решит сейчас проблему я так и сделаю, но это как мне кажется неправильно и просто как способ обойти проблемы функционирования самого терминала
В любом случае спасибо вам за подсказки и что потратили на меня время
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Цитата
nikolz написал:
Я лишь показал Вам что проблема не QLua
Я имел ввиду что если не удалять метку в теле расчетов а корректировать ее положение то так и будет несколько меток после смены инструмента
А lua действительно не причем, это уже проблема самого рабочего места Quik
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Но вообще говоря у меня как раз нет задачи на тиках удалять и создавать новую метку.  Удалять и создавать новую только нужно  только если сменился актив графика. Мептка будет нести информацию о позиции - цена входа, объем позиции и тд и обновляться раз в несколько секунд через SetLabelParams()
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Цитата
nikolz написал:
попробуйте этот
График - Сбербанк
Поле Price - Дополнительно > вводим идентификатор "abcdef"
Накладываем индикатор - вводим тот же идентификатор"abcdef"
Смотрим метку - есть пробуем ее подвигать мышкой Все ок
Переключаемся на Роснефть - сдвигаем метку и видим что их уже две
Но сейчас обратил внимание что две метки только в теч одной секунды,
потом когда пройдет удаление в коде и метка создастся заново то уже одна опять до повторного переключения

Второй вариант лучше в нем после переключения образуются две метки
а в первом - три и они уже не удаляются по мере тиков
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Цитата
nikolz написал:
Мне не удалось получить наложение меток.
Попробовал Ваш скрипт в том виде как есть без каких либо изменений К сожалению метки дублируются
Чтобы увидеть это переключайтесь между двумя активами туда и обратно
Как только первый раз вернетесь на изначальный сместите метку и увидите что их две, потом еще раз на другой и обратно на исходный и будет уже три и тд
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Спасибо большое nikolz   и  Бес Паники
Попробую все на выходных и отпишусь
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Цитата
Бес Паники написал:
Вот пример как реализовано у меня и метки уверенно удаляются, долго морочился, пока не зафиксировал "chart_tag" в виде константы в коде
Не совсем удобно но я попрошу - допишите необходимые фрагменты кода прямо в мой тестовый пример     Тогда разберусь неприменно  Здорово выручите !
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Цитата
Бес Паники написал:
-- Удаление всех меток
function GraphLabels:Clear()
   self.Labels = {}
   DelAllLabels(self.GraphId)
end
Не разобрался :) Выдает ошибку  
Код
test_Example2.lua:190: attempt to index a nil value (global 'GraphLabels')
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Цитата
Бес Паники написал:
В методе GraphLabels:Clear() поле self.GraphId объекта GraphLabels содержит значение, переданное в Init() вызовом GraphLabels:Init(GRAPHID_TRADERTARGETS). Старые метки удаляются и создаются новые как раз по ci == 1
Спасибо, красивый вариант Но честно говоря не совсем уловил :)
GRAPHID_TRADERTARGETS - это метка из Settings ?
LabelSB, ...,  LabelBS - это что?
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Цитата
Oleg Kuzembaev написал:
Добрый день, Сергей.

Как мы отмечали в наших прошлых сообщениях, данная проблема зафиксирована и действительно изучается разработчиками в данный момент. К сожалению, более точной информации мы предоставить пока не можем.
В самом начале темы я привел ссылки на предыдущие вопросы пользователей еще с 2017 года !  а Вы говорите изучается
Я понимаю что одна из ваших главных задач это обеспечение безукоризненного функционала финансовых и учетных задач, но это не исключает работу по другому функционалу
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Цитата
Бес Паники написал:
По моему скромному опыту DelAllLabels(ID)  отрабатывает корректно и удаляет все метки (включая добавленные для предыдущего инструмента)
Нет не удаляет
Например включение в OnCalculate(index)  строки   if index == 1 then  DelAllLabels(chart_tag)  end    не удаляет
Метки удаляются только при удалении самого индикатора с графика
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Цитата
nikolz написал:
т е при смене инструмента старые матки удаляются.Что не так?
Приветствую коллега
1. При наложении при первом проходе индикатора терминал ни видит идентификатора объявленного в Settings, и увидит его только на втором проходе и соответственно если есть в коде проверка на идентификатор то выдаст аларм на отсутствие его
2. При переключении инструмента в окне с индикатором метка предыдущего инструмента теряется и создается новая для текущего инструмента
Старую метку в коде скрипта уже не найти и не удалить из кода скрипта, но это же не решение проблемы
В результате сколько переключений по смене инструмента столько и меток оказывается в окне графика. В посте и код тестового скрипта и скрин есть Ну при удалении скрипта с графика да метки будут удалены
Вопрос- как при смене инструмента удалить все следы от предыдущего?


Теперь к стандартной фразе техподдержки "проблема изучается" Ну парни у вас вобще чувство собственного достоинства есть? ответственность за продукт вашей работы, за авторитет компании?
Мне лично дважды Andrey Golik обещал и здесь на форуме и в переписке по email.
Цитата
Вот от 12.09.2024 "Да, мы приносим Вам благодарность за развернутое описание проблемы.      Однако, что является для Вас неожиданным в нашем ответе? Проблемы,      которые Вы обозначили признаны таковыми и будут исправлены в      следующих версиях рабочего места QUIK"

"Больше года прошло а ""воз и ныне там..."

С наступающим годом и успехов всем
Картинка метка png
 
Господа разработчики, в течении нескольких лет обращаюсь с проблемой работы терминала (рабочего места Quik)  с метками и через данный форум и электронными письмами  (Некорректная работа терминала метками (QU-227199)
Проблема вами признана но как минимум с сентября 24 года не решена
Детально проблема описана здесь, причем с приложением тестовых скриптов

В тексте обращения приведены ссылки аналогичных обращений других пользователей от 2017, 2018, 2021 годов

Кратко:
1. При добавлении скрипта индикатора на график  на первом проходе OnCalculate() скрипт не видит параметры настроек, в частности идентификатора графика, что приводит к ошибке
2. Скрипт и сам терминал теряет доступ к меткам после смены инструмента графика
Метки от предыдущего инструмента остаются на графике и скрипт создает новые уже для текущего инструмента

Прошу прокомментировать ситуацию и назвать хотя бы ориентировочные сроки ее решения
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
 
Цитата
Karina Dmitrieva написал:
Пока можем предложить настраивать фильтры по нужным Вам условиям в таблице заявок
Благодарю, я в курсе наличия фильтров :)
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
 
Цитата
Karina Dmitrieva написал:
Сергей,
Цитата
Если на текущей активной вкладке таблицы "Карман" не будет, то команда "Копировать в карман" будет недоступной.  
Да, команда активизируется если все на одной вкладке и табл сделок и сам карман
Но а зачем в таком случае оставили команды по сохранению в файл заявок если их потом не подгрузить?
Вообще было гораздо функциональнее. Таблиц заявок как правило несколько и на разных вкладках, например по рынкам (акции, облигации, срочный) и все это дублировать в отдельной вкладке где и карманы неудобно и лишняя нагрузка
Сделайте тогда хотя бы возможность выделять группу заявок в таблице заявок с теми чтобы можно было эту группу выгрузить в Карман-1,  др группу в Карман-2 по аналогии возможности выделения группы через CTRL в самом кармане
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
 
Цитата
Karina Dmitrieva написал:
В таблицы заявок, стоп-заявок, внебиржевых адресных/безадресных заявок добавлена новая команда "Копировать в карман".
Команда "Копировать в карман" не активна, текущая версия 12.2.1.2
Из табл Заявок есть и активны Сохранить в файл заявки из таблицы и Сохранить в файл все заявки
Их табл Стоп-заявок активны Сохранить в файл стоп-заявки из табл и Сохранить в файл все стов-заявки  как и было в предыдущей 11
Из Кармана в 12.2 - только Загрузить транзакции из tri-файла
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
 
Цитата
Karina Dmitrieva написал:
действительно, в версии Рабочего места QUIK 11.4.0 исчезла  возможность переносить заявки из таблицы заявок в карман транзакций
Karina,  Прошу Вас пояснить ситуацию по данной ошибке в версии 12.2 где указано что проблема устранена но во всплывающем меню из Кармана нет опции "Загрузить заявки из файла"
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
 
Цитата
paluke написал:
Ну так решили же проблему с ошибками
Логично  :what:
Из кармана есть только "Загрузить транзакции из tri-файла" а из таблицы заявок только "Сохранить в файл заявки из таблицы"

А по моему обращению и детально описанной проблеме по работе с метками уже 4 месяца ни ответа ни привета :)
Кстати там же есть ссылки на эту проблему еще десятка участников форума#s3gt_translate_tooltip_mini { display: none !important; }
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
 
Цитата
Karina Dmitrieva написал:
Sergey Kuznetcov, здравствуйте.

Сообщаем, что нами выпущена новая версия Рабочего места QUIK - 12.2.0 в которой данная проблема устранена.
В анонсе версии 12.2 действительно указано что "Ошибка при попытке загрузить в Карман транзакций заявки из файла" исправлена
Но в последней версии 12.2.1.2 во всплывающем меню из Кармана нет опций "Загрузить заявки из файла", "Загрузить стоп-заявки из файла", "Загрузить адресные/безадресные заявки из файла"  которые есть в версии 11.3.4
Есть только "Загрузить транзакции из tri-файла"
Как в qlua разделить на группы облигации по типу купона
 
Цитата
Станислав написал:
Увы, другой информации биржа не транслирует
Да, ММВБ параметры облигаций транслирует крайне неудовлетворительно
Нашел казалось бы косвенный признак флоатеров - нулевые данные по доходности или по дюрации Но увы и тут не все однозначно, по некоторым ммвб дает доходность Например РСЭКСМБ2Р4 указана доходность а по РСЭКСМБ2Р5 нет (ноль)

Вобщем сделал отбор по нулевой доходности а те корпоративные флоатеры где биржа дает доходность пока записал в массив Таких в портфеле всего 5, не сложно и добавить если будет новая сделка
Ну а с ММВБ что то спрашивать бессмысленно
Как в qlua разделить на группы облигации по типу купона
 
Цитата
Станислав написал:
По названию ОФЗ можно сразу понять, к какому классу бумаг относится конкретный выпуск
Спасибо, а этот код "COMPLEXPRODUCT" как можно получить в коде скрипта ОФЗ понятно а что по корпоративным, муниципальным да и остальным "бирж.обл."  как дает "SECTYPE"
Как в qlua разделить на группы облигации по типу купона
 
Набросал черновик скрипта для построения пользовательской таблицы  облигации в портфеле в соответствии с классификацией
По типу эмитента: Федеральные, Субфедеральные и муниципальные, корпоративные сделал разбивку с помощью параметров
функции getParamEx()  "SECTYPESTATIC"  и  "SECTYPE"  по их значениям "Облигации" >> "РФ"  "суб.РФ"   "мун.обл."   " корп.обл."
Отдельной группой сформировал массив Замещающих облигаций по признаку валюты номинала
А вот дальше хотелось бы разбить по типу купона - Постоянный, Фиксированный, Плавающий и Переменный, как минимум на две группы

Буду благодарен за идеи по отличительным признакам?
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Andrey Golik,
Цитата
Andrey Golik написал:
Сергей, добрый день. Получили от Вас информацию на почте. По итогам разбора продублируем наш ответ в данной теме форума.
Добрый день Есть какие то ориентиры по времени устранения описанной проблемы
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
 
Karina Dmitrieva, спасибо Неудобно конечно При большом количестве заявок по их количестве сделать перетаскивание а выделение всех не предусмотрено
Придется подождать и работать на предыдущей версии 11.3
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
 
Karina Dmitrieva,  Спасибо за информацию, но во-первых, найдите где доводить ее до пользователей своевременно и с пояснениями поскольку мне сейчас непонятно с какой целью это сделано и как теперь работать с новыми форматами
Ну и главное - я писал о том что теперь Карман транзакций не загружает сохраненные заявки в файле из меню на Таблице заявок
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
 
Здесь вообще есть админ ?

На проблему работы терминала в отношении торговых функций должна быть незамедлительная реакция разработчика, а тут неделя заканчивается и хоть трава не расти !
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
 
Сохраняем файл - ПКМ на таблице заявок > Сохранить в файл заявки из таблицы
В окне Карман транзакций  - ПКМ Загрузить заявки из файла
Результат - Ошибка Не указан номер заявки

Смотрим формат сохраненного файла и видим следующее:
,Выставлена (время),Инструмент,Операция,Цена,Кол-во,Остаток,Объем,Состояние,
1,19:47:26,Астра ао [МБ ФР: Т+: Акции],Продажа,478,25,160,160,76 520,00,Активна,

Тот же но сохраненное в 11.3.4.3
55377299185,19:47:26,Астра ао,МБ ФР: Т+: Акции,ASTR,S,L01-00000F00,LSQP ,O,478.25,0.00,160,,160,76520.00,0.00,MU0003300971,MC0003300000,,11JJDL/,Y1,11JJDL,,
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Цитата
Kolossi написал:
это не проблема шерифа
Похоже не все понимают о чем речь... или не посмотрели ссылки на предыдущие обращения с аналогичной тематикой :)
Причина моего обращения в техподдержку и этой темы в следующем:
1. При добавлении скрипта индикатора на график  на первом проходе OnCalculate() скрипт не видит параметры настроек.  Вызов OnChange() происходит между 1 и 2ым проходами Проблема известная но тем не менее...
2. Метки созданные на графике при смене инструмента не удаляются в связи с отсутствием вызова OnDestroy()  перед заменой актива Это приводит к образовании новых меток по количеству переходов с актива на актив

Для детального понимания процессов я прикладываю скрипт индикатора для наблюдения за порядком расчетов и лог файл
Скрипт создает единственную метку с динамически меняющимися параметрами на вновь образующемся баре Метка создается на первом тике бара с удалением предыдущей
В течении бара метку можно сдвинуть в удобное место, на новом баре она займет "свое" место  на HighestHigh(10) по оси Y и смещением на 3 бара влево по оси времени. В текстовый параметр запишем Close() посл свечи а в Hint номер посл бара
Сам тест
- добавляем скрипт индикатора и сразу же вводим идентификатор графика
- смотрим DebugView

В отладчике смотрим порядок вызова функций при добавлении индикатора:
Init() > OnCalculate() > OnChangeSettings() > OnCalculate() 2 > OnCalculate() 3
Первый вывод - первый проход до вызова OnChange входящие параметры скрипта недоступны, т.е. никакие расчеты этого цикла некорректны Поэтому делаем обход этого прохода
Понаблюдав за меткой, отображением цены закрытия и номера бара, переместив ее в удобное место - переключаем таймфрейм - предыдущая метка удаляется и создается новая так же как на поступлении нового бара
При смене таймфрейма  сразу вызывается OnCalculate()  без инита и без опроса параметров скрипта.  Все работает корректно

Теперь  переключаемся на другой инструмент (пусть из табл тек торгов)
 В логе видим инициализацию и цикл расчетов на новом активе
   Init() > OnChangeSettings() > OnCalculate() 1
Делаем выводы по порядку следования функций.
Метка создается новая, к метке от предыдущего инструмента доступа нет, OnDestroy() не вызвается, метка "теряется" и доступ к ней скрипт не имеет
Повторяем процедуру несколько раз и наблюдаем наслоение меток на графике и на одном и на втором инструментах
  см скрин   test-2_переключ-инструментов.jpg
Удаляем индикатор с графика
Одна метка при этом остается на графике и не видна из меню пкм-удалить...
Удаляется после выделения клавишей DEL    
Смотрим какие функции используются в коде для удаления меток
Детально анализируем  лог файл в DebugView
Делаем выводы

Код скрипта индикатора
Код
Settings=
{
Name = "test_Example-2",
chart_ID = ''       -- идентификатор графика
}

n_init = 0         -- переменная для подсчета заходов в функцию Init
n_OnCalcCount = 0   -- переменная для подсчета OnCalculate
n_OnChange = 0      -- счетчик OnChangeSettings
bars_prev = 0       -- номер посл бара
TF_prev = -4;      -- таймфрейм
delay = 1.0;      -- задержка в цикле рассчетов параметров для метки (параметров счета)
LastSecond = 0;      -- время последнеих рассчетов 
chart_tag = '';      -- идентификатор графика
label_params = {};   -- параметры метки
Label_ID = nil;      -- идентификатор графика
Labels = {};         -- Массив номеров установленных меток - для контроля

function Init()
   n_init = n_init + 1
PrintDbgStr("Init() = "..n_init)
   n_OnCalcCount = 0
   n_OnChange = 0
   bar_prev = 0
   TF_prev = -4      -- контроль смены таймфрейма
   sec_code_prev = ''   -- контроль перекл на др актив
   
   return 1
end

function OnChangeSettings()
--   n_OnCalcCount = 0
   n_OnChange = n_OnChange + 1
   chart_tag = Settings.chart_ID
PrintDbgStr("OnChangeSettings() = "..n_OnChange..', n_OnCalcCount = '..n_OnCalcCount)
end

function OnDestroy()
PrintDbgStr("OnDestroy() #Labels Array "..#Labels);
   if #Labels > 0 then -- Удаляет ранее установленные метки
      for i=1,#Labels,1 do
         local del = DelLabel(chart_tag, Labels[i]);   
      if del then PrintDbgStr("OnDestroy() Del id "..tostring(Labels[i]));  end;
      end;
   end;
   -- стараемся найти и удалить потерянные метки 
   PrintDbgStr("OnDestroy() LbDelete_2() "..LbDelete_2() .. ' labels were removed');
 
end


function OnCalculate(index)


    -- Пропускаем первый проход между Init() и OnChangeSettings() при первичном  добавлении индикатора
    -- для исключения ошибки чтения параметра при первом запуске индикатора
    -- Init() > OnCalculate() > OnChangeSettings() > OnCalculate() 2 > OnCalculate() 3
   if n_OnChange == 0 then 
      while index <= Size()  do
         if index == Size() then PrintDbgStr('Пропускаем цикл до вызова OnChangeSettings() после Init(), index = ' .. index); end;
         return
      end;
   end
  
    -- предпоследний бар
   if index == Size() - 1 then
PrintDbgStr('---- Begin Cycle Number '..(n_OnCalcCount+1))
       
      DSInfo   = getDataSourceInfo();
      Sec_Code = DSInfo.sec_code;
            
      if chart_tag == '' then message('OnCalculate Chart ID не указан!!!'); end;
PrintDbgStr("Seccode " .. Sec_Code ..",  chart_ID = " .. chart_tag)
            
   else
       -- последняя свеча
      if index == Size() then
          -- раз в секунду (или больше)   
         if os.time() > LastSecond  then            -- if os.time() > LastSecond + 2*delay-1 then
            LastSecond = os.time();
         
             -- потиковое обновление (с задержкой)   
            label_params['TEXT'] = tostring(C(index))
            label_params['HINT'] = tostring(index)

            -- корректируем параметры метки   
            if Label_ID  ~= nil and TF_prev == DSInfo.interval then
               -- сохраняем прежнее положение метки если переместили в теч текущ бара)
                -- при смене таймфрейма метка будет удалена и создана заново
               local ly = GetLabelParams(chart_tag, Label_ID)   --table or nil
               if ly ~= nil then   -- and ly.yvalue ~= nil 
                  label_params['YVALUE'] = ly.yvalue
                  label_params['DATE']   = ly.date
                  label_params['TIME']   = ly.time         
               end;
--PrintDbgStr('index == Size() = ' .. Size() .. ', Label_ID  ' .. Label_ID .. ', C(index) ' .. tostring(C(index))   )   
               SetLabelParams(chart_tag, Label_ID, label_params);
--   PrintDbgStr('SetLabelParams Label_ID = '..Label_ID)
            end         
                           
            -- первый тик нового бара или первый проход и метка еще не создавалась или смена таймфрейма
            -- удаляем предыдущую и создаем новую метку с новыми координатами (метку можно смещать в удобное место...)
            if bars_prev < Size() or Label_ID == nil or TF_prev ~= DSInfo.interval then
               bars_prev = Size()
               -- удаляем метку если она уже была и создаем новую
               if Label_ID ~= nil then LbDelete() end;   
               Label_ID = labeldraw(chart_tag, index)
               TF_prev = DSInfo.interval
            
            end;


         end -- every second
         -- завершение цикла
         n_OnCalcCount = n_OnCalcCount+1
   --PrintDbgStr('END Cycle index == Size() ' .. Size()..', n_OnCalcCount = '..n_OnCalcCount)
      end -- index == Size()         
         
   end -- if index > 1 
   
   return nil
end

function labeldraw(tag, index)
 
   local highest = 0.0   
   for j = 0, 14 do
      if H(index-j) > highest then highest = H(index-j) end;
   end

   local _t =    T(index-3)
   --PrintDbgStr(_t.year.._t.month.._t.day..' '.._t.hour..':'.._t.min..':'.._t.sec)
   local Y = tostring(_t.year)
   local m = tostring(_t.month)   if #m  == 1 then  m = "0"..m  end;
   local d = tostring(_t.day)      if #d  == 1 then  d = "0"..d  end;
   local hh = tostring(_t.hour)   if #hh == 1 then hh = "0"..hh end;
   local mm = tostring(_t.min)      if #mm == 1 then mm = "0"..mm end;
   local ss = '00'; -- tostring(_t.sec) if #ss == 1 then ss = "0"..ss end;

   label_params['DATE'] = tonumber(Y..m..d);
   label_params['TIME'] = tonumber(hh..mm..ss);
   label_params['YVALUE'] = highest;
   label_params['R'] = 0; -- DOUBLE Красная компонента цвета в формате RGB. Число в интервале [0;255]
   label_params['G'] = 0; -- DOUBLE Зеленая компонента цвета в формате RGB. Число в интервале [0;255]
   label_params['B'] = 255; -- DOUBLE Синяя компонента цвета в формате RGB. Число в интервале [0;255]
   label_params['TRANSPARENCY'] = 0;
   label_params['TRANSPARENT_BACKGROUND'] = 1;
   label_params['FONT_FACE_NAME'] = 'Verdana';
   label_params['FONT_HEIGHT'] = 12;

   local label_id = AddLabel(tag, label_params) -- number
   if label_id  ~= nil then
       Labels[#Labels+1] = label_id
      PrintDbgStr('Create Label_id: '..tostring(label_id)) 
   else 
      message('Don\'t create label')
   end

   return label_id  -- number

end


----  удаление меток
-- ищем и удаляем все метки независимо как и кем установленные :) 
-- функцию используем полной очистки от меток и контроля 
function LbDelete_2()
--   local _labels = {}
    local n = 0;
   for _label_id = 1, 10000, 1 do
      local L = GetLabelParams(chart_tag, _label_id )--table or nil  Табл параметров метки - все значения имеют тип – STRING
      if L ~= nil  then
         local del = DelLabel(chart_tag, _label_id)
         if del == true then 
            n = n + 1;
PrintDbgStr('LbDelete_2() Label number '..tostring(_label_id).. ' deleted ')
         end; 
      end
   end
   Label_ID = nil;
   Labels = {}
   return n;
end
-- Удаляет ранее установленные метки сохраненые в массиве
function LbDelete()
   local n = 0
   if #Labels > 0 then 
      for j=1,#Labels,1 do          
         if DelLabel(chart_tag, tonumber(Labels[j])) then 
            n = n + 1
PrintDbgStr("LbDelete() id "..tostring(Labels[j]) .. ' deleted')
          end
      end;
      Labels = {};
      Label_ID = nil;
   end;
   return n;
end;

При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
При наложении индикатора или при периинициализации при смене инструмента графика терминал даже ни видит переменных объявленных в Settings

А увидит он идентификатор только на втором проходе  Как тут метки не потерять :)

Тяжелая у вас работа парни (разработчики) За 20 лет как познакомился с этим монстром ничего не изменилось Кракозябы накапливаются и наслаиваются одни на другие

Код
-- ----- Первичное добавление индикатора -----
-- Init() > OnCalculate() > OnChangeSettings() > OnCalculate() 2 > OnCalculate() 3

Код
Settings=
{
Name = "Example1",
chart_ID = ''         -- идентификатор графика
}

function Init()
   if Settings.chart_ID == '' then message('Init() Chart ID не указан!!!') end;
   return 1
end

function OnCalculate(index)
    if index == Size() then
      if Settings.chart_ID == '' then message('OnCalculate Chart ID не указан!!!'); end;
   end
   return nil
end

При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Такой вопрос - где и как происходит прерывание расчетов в текущем цикле OnCulculate() при смене инструмента на графике? Цикл доходит до конца или прерывается случайным образом

Цель выполнить кусок кода по удалению текущей метки которая после смены инструмента уже "потеряется"
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Проблема с метками существует с древних времен - здесь и  здесь  и  здесь и с моим участием  здесь
По второй ссылке - ответ Daniil Pozdnyakov типовой "К сожалению, проблему, о которой ведётся речь, воспроизвести не удалось"н
Ну киньте индикатор что приводит пользователь по данной ссылке, переключите несколько раз между двумя инструментами график и увидите см файл - screen_1
Ну что еще нужно чтобы "воспроизвести" ошибку в работе терминала
По ссылке обсуждения с моим участием еще в 2021 еще на версии терминала 9.3 ответ того же  Daniil Pozdnyakov   "Описанная в данном обращении проблема была устранена в версии 9.4.0 терминала QUIK." а проблема как была так и переходит уже несколько лет
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Цитата
funduk написал:
На каждом I == 1 проверяете инструмент, если он не совпадает с предыдущим, удаляете метку. Т.е. удаляете после смены инструмента, не до.
Спасибо за ответ Но после смены инструмента ситуацию я только что описал - метку в коде уже не найти и соответственно не удалить
Кроме того часто бывают ситуации когда пкм на графике не дает уже "Удалить - Все метки в диаграмме"
Да и как после смены инструмента получить тикер предыдущего? После инита все переменные уже "обнулены"  в том числе и id метка.
Ну разве что в файле хранить, и постоянно сравнивать запись в файле с текущим  :what:  
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Никто из сообщества не откликнулся. Обращаюсь к разработчикам.
Господа. Это не пожелание а вопрос некорректной работы терминала Терминал теряет метки.
Создав метку на одном инструменте и переключившись на другой инструмент метка полностью теряется.
Ее уже невозможно удалить ни стандартными функциями:
- DelLabel(), потому что после смены инструмента  id метки после переинициализации уже не существует
- DelAllLabels() даже при том что chart_tag прежний эту метку уже не находит
ни перебором в коде типа...

Код
local n = 0;
for _label_id = 1, 1000, 1 do
   local L = GetLabelParams(chart_tag, _label_id )--table or nil
   if L~= nil  then
      n = n + 1;
      if L.hint:find("PnL")  
         then DelLabel(chart_tag, _label_id)
      end;
   end
end 

В результате переключившись пару раз на другие инструменты и вернувшись на изначальный получите вот такую картинку :)

Какое решение найдут разработчики - не знаю Но ситуация требует исправления.

Возможно подключать OnDestroy() при смене инструмента, либо увязать это с параметром диаграммы - "Оставлять трендовые линии, фигуры и метки при смене инструмента"

При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Добрый день
Вопрос поднимался еще в 2017г  и был принят поддержкой :)

При смене инструмента графика OnDestroy() по прежнему не вызывается
Вопрос - скажем скрипт-индикатор создает метку на графике Меняете инструмент и метка остается, причем скрипт полностью ее теряет
Как ее удалить в коде скрипта перед тем как инструмент будет заменен или сохранить доступ к ней?
Глобальные переменные обнулились, идентификатор метки тоже утерян
Известные баги 9 версии
 
Цитата
Karina Dmitrieva написал:
Здравствуйте, Сергей.

Для детального анализа возникновения описываемого Вами эффекта просим приложить данный скрипт. Можете здесь или направьте его нам на почту:  quiksupport@arqatech.com  со ссылкой на данную ветку форума.
Это абсурд ! Напишите сами (индикатор) скрипт в одну строчку SetLabelParams(chart_tag, Label_ID, label_params); и установите метку на график  предварительно заполнив параметр label_params['HINT'] = "TEST"
Известные баги 9 версии
 
Цитата
Karina Dmitrieva написал:
Добрый день, Сергей.

Опишите, пожалуйста, более подробно Вашу ситуацию. Что Вы подразумеваете под "программной установкой"?
Можете приложить скриншот для наглядности ?
Программно - значит скриптом
При наведении курсора мыши на текст метки появляется "всплывающая подсказка" ( HINT )
На скрине версии 9.4  В версии 9.5 эта подсказка не появляется
Известные баги 9 версии
 
Версия 9.5.0.42   не работает всплывающая подсказка при программной установки текстовой метки (hint)
Версия 9.2.3.15, Метки
 
Цитата
Anzhelika Belokur написал:
Добрый день. Описанная в данном обращении проблема будет устранена в одной из очередных версий ПО. Приносим извинения за причиненные неудобства.
Пожалуйста, сориентируйте по срокам. Пауза затянулась....
Версия 9.2.3.15, Метки
 
Цитата
Anzhelika Belokur написал:
Добрый день. Описанная в данном обращении проблема будет устранена в одной из очередных версий ПО. Приносим извинения за причиненные неудобства.
Спасибо за отклик Ждем С наступающим НГ
Версия 9.2.3.15, Метки
 
Цитата
Daniil Pozdnyakov написал:
Правильно понимаем, что данные скрипты Вы получили от сторонних разработчиков ?
Спасибо что откликнулись.
Правильно. Я привел ссылку на разработчика
Цитата
Daniil Pozdnyakov написал:
Просьба подробно описать, с какими проблемами Вы столкнулись ?
Я начал работать начиная с 8 версии  и имея опыт в программировании не смог найти где и почему терминал теряет  метки и и соответственно не контролирует их.
Установленная скриптом (индикатором) метка после каких либо действий с графиком (смена таймфрейма, инструмента) теряется. Скрипт ее уже не может найти.  Даже программное удаление DelAllLabels(chart_tag) не работает поскольку На графике пкм-Удалить-Все метки диаграммы подтверждает что метки на графике остались но найти их программно скрипт не может.  Кроме того  при установке индикатора на график с  указанием в settings  идентификатора графика  проверка при инициализации  в коде сразу выдает ошибку по идентификатору. Это говорит о том что терминал при инициализации индикатора не идентифицирует метку самого графика и метку указанную в настройках индикатора Возможно что проблема именно в этом.
В 9 версии проблема с загрузкой метки из файла
labels_params[IMAGE_PATH] = getWorkingFolder()..\\Data\\transation_Icons\\*.bmp
выдает ошибку загрузки файла и соответственно метки на графике нет
Причем ошибка только процессе инициализации индикатора, далее ошибки нет но и меток на графике нет Хотя "Удалить  Все метки..."  подтверждает их наличие на графике

Еще раз хочу подчеркнуть что код скрипта и индикатора который я предложил протестировать для меня никакой роли не играет  У меня свои наработанные годами скрипты которые я просто адаптировал под Квик
Попытка разобраться в переписке в отдельных фрагментах кода полагаю приведет только к путанице Поэтому я и предложил протестировать приложенный мною скрипт и индикатор  с тем чтобы разработчики сами могли проверить работу терминала с метками  Задача ведь не в проверке кодов а именно в проверке работы терминала
Версия 9.2.3.15, Метки
 
Цитата
Anton написал:
Цитата
Потому что теперь функция называется table.unpack. Аж с луа 5.2.
Вообще дело то не в unpak().   Терминал теряет метки, т.е. если скрипт установил метку, то через некоторое время, после смены инструмента, тайили таймфрейма он уже не может найти свою же метку и ее невозможно даже удалить программно не говоря уже о том чтобы управлять ей, а  9.3.3. просто не выводит метку на график
Я же приложил скрипт и индикатор Оба написаны очень грамотно Все кому интересно могут попробовать и суть не в функционале и его востребованности а именно как академический пример работы с метками и не только

#s3gt_translate_tooltip_mini { display: none !important; }
Страницы: 1 2 След.
Наверх