Просто надо убрать лишние строки кода из индикатора - ds в данном коде не используется и всегда false
Получить номер свечи-фрактала
Пользователь
Сообщений: Регистрация: 30.11.2021
28.12.2025 22:45:51
Цитата
VPM написал: Здесь много примеров как это делается для обоих вариантов.
Благодарю. Про скрипт я даже не подумал, там понятно было бы ds=CreateDataSource() и далее, а тема начата именно с индикатора и вот что в индикаторе за ds и как в ней оказались данные source Откуда в функцию Value(...,ds) передается sourse не могу понять и соответственно далее Out = (O and O(I)) or (ds and ds:O(I)) Ну O(I) - источник с графика а остальное? Дайте какие то ссылки чтобы разобраться
Получить номер свечи-фрактала
Пользователь
Сообщений: Регистрация: 30.11.2021
28.12.2025 20:31:48
Цитата
VPM написал: Смотрите в справке функцию CreateDataSourc
Но функцию CreateDataSource можно использовать только внутри функций main() сриптов а это индикатор, и во-вторых, я вообще не вижу где переменная ds объявлена и что ей присвоено какое то значение
Получить номер свечи-фрактала
Пользователь
Сообщений: Регистрация: 30.11.2021
28.12.2025 14:52:33
Переменная ds это что? подскажите
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
23.12.2025 19:16:14
Прошу Вас ознакомится с экспериментами последних постов и конкретно написать здесь в течении какого времени проблема будет решена У вас в компании должен быть регламент работы с клиентами и обозначены сроки решения проблем с рабочим местом трейдера Как правило такие регламенты предполагают срок не более 1 месяца
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
23.12.2025 19:09:31
Цитата
nikolz написал: Полагаю что тема про OnDestroy() закрыта
Не парни, так не пойдет... Про OnDestroy() может и так, т.е. неправильно тема названа но суть темы в том что терминал теряет контроль над метками, а как это проблема должна решиться это уже вопрос разработчиков. Или де инициализацией или еще каким образом потому как в процессе и вашей попытки решить какими то обходными путями проблема НЕ РЕШИЛАСЬ Метка после переключения на другой актив не удаляется
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
23.12.2025 15:17:38
Ваше время :) не свое... А Вам благодарен Буду искать обходные варианты
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
23.12.2025 15:13:14
Цитата
nikolz написал: После сдвига экрана функция set установит новые координаты метки. А старая метка останется на экране
Да не должна она нигде остаться У нее есть id при создании и терминал его знает и помнит (должен по крайней мере) и если я делаю новые установки SetLabelParams() то именно к этому id За все остальное отвечает сам терминал, он должен удалить и создать новый объект или к существующему применить изменения но именно с этим изначальным id. А уж при смене инструмента все удалить а скрипт сделает все заново. Еще раз спасибо, не хочу вас дальше втягивать и тратить время
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
23.12.2025 14:55:36
Цитата
Бес Паники написал: Да, и у Price нужно этот идентификатор тогда убрать, чтобы Quik точно знал, где убирать метки.
Убрал и идентификатор ввел в "дополнительно" окна индикатора, увы...
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
23.12.2025 14:24:36
Цитата
nikolz написал: Поэтому, полагаю, что как Вы хотите не получится
Не совсем понимаю что вообще дает стирание метки и создание ее заново если можно менять ее параметры? Это сэкономит ресурсы или еще что то? Когда сменится инструмент то все предыдущее должно быть удалено в принципе и инициализировано заново как с чистого листа чего как раз и не происходит, как это должно быть реализовано это не вопрос пользователя
Конечно если это решит сейчас проблему я так и сделаю, но это как мне кажется неправильно и просто как способ обойти проблемы функционирования самого терминала В любом случае спасибо вам за подсказки и что потратили на меня время
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
23.12.2025 13:31:21
Цитата
nikolz написал: Я лишь показал Вам что проблема не QLua
Я имел ввиду что если не удалять метку в теле расчетов а корректировать ее положение то так и будет несколько меток после смены инструмента А lua действительно не причем, это уже проблема самого рабочего места Quik
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
23.12.2025 12:36:44
Но вообще говоря у меня как раз нет задачи на тиках удалять и создавать новую метку. Удалять и создавать новую только нужно только если сменился актив графика. Мептка будет нести информацию о позиции - цена входа, объем позиции и тд и обновляться раз в несколько секунд через SetLabelParams()
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
График - Сбербанк Поле Price - Дополнительно > вводим идентификатор "abcdef" Накладываем индикатор - вводим тот же идентификатор"abcdef" Смотрим метку - есть пробуем ее подвигать мышкой Все ок Переключаемся на Роснефть - сдвигаем метку и видим что их уже две Но сейчас обратил внимание что две метки только в теч одной секунды, потом когда пройдет удаление в коде и метка создастся заново то уже одна опять до повторного переключения
Второй вариант лучше в нем после переключения образуются две метки а в первом - три и они уже не удаляются по мере тиков
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
23.12.2025 10:34:11
Цитата
nikolz написал: Мне не удалось получить наложение меток.
Попробовал Ваш скрипт в том виде как есть без каких либо изменений К сожалению метки дублируются Чтобы увидеть это переключайтесь между двумя активами туда и обратно Как только первый раз вернетесь на изначальный сместите метку и увидите что их две, потом еще раз на другой и обратно на исходный и будет уже три и тд
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
23.12.2025 10:10:49
Спасибо большое и Попробую все на выходных и отпишусь
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
22.12.2025 22:46:23
Цитата
Бес Паники написал: Вот пример как реализовано у меня и метки уверенно удаляются, долго морочился, пока не зафиксировал "chart_tag" в виде константы в коде
Не совсем удобно но я попрошу - допишите необходимые фрагменты кода прямо в Тогда разберусь неприменно Здорово выручите !
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
22.12.2025 22:10:44
Цитата
Бес Паники написал: -- Удаление всех меток function GraphLabels:Clear() self.Labels = {} DelAllLabels(self.GraphId) end
Не разобрался :) Выдает ошибку
Код
test_Example2.lua:190: attempt to index a nil value (global 'GraphLabels')
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
22.12.2025 20:43:10
Цитата
Бес Паники написал: В методе GraphLabels:Clear() поле self.GraphId объекта GraphLabels содержит значение, переданное в Init() вызовом GraphLabels:Init(GRAPHID_TRADERTARGETS). Старые метки удаляются и создаются новые как раз по ci == 1
Спасибо, красивый вариант Но честно говоря не совсем уловил :) GRAPHID_TRADERTARGETS - это метка из Settings ? LabelSB, ..., LabelBS - это что?
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
Как мы отмечали в наших прошлых сообщениях, данная проблема зафиксирована и действительно изучается разработчиками в данный момент. К сожалению, более точной информации мы предоставить пока не можем.
В самом темы я привел ссылки на предыдущие вопросы пользователей еще с 2017 года ! а Вы говорите изучается Я понимаю что одна из ваших главных задач это обеспечение безукоризненного функционала финансовых и учетных задач, но это не исключает работу по другому функционалу
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
21.12.2025 08:49:34
Цитата
Бес Паники написал: По моему скромному опыту DelAllLabels(ID) отрабатывает корректно и удаляет все метки (включая добавленные для предыдущего инструмента)
Нет не удаляет Например включение в OnCalculate(index) строки if index == 1 then DelAllLabels(chart_tag) end не удаляет Метки удаляются только при удалении самого индикатора с графика
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
19.12.2025 07:53:06
Цитата
nikolz написал: т е при смене инструмента старые матки удаляются.Что не так?
Приветствую коллега 1. При наложении при первом проходе индикатора терминал ни видит идентификатора объявленного в Settings, и увидит его только на втором проходе и соответственно если есть в коде проверка на идентификатор то выдаст аларм на отсутствие его 2. При переключении инструмента в окне с индикатором метка предыдущего инструмента теряется и создается новая для текущего инструмента Старую метку в коде скрипта уже не найти и не удалить из кода скрипта, но это же не решение проблемы В результате сколько переключений по смене инструмента столько и меток оказывается в окне графика. В и код тестового скрипта и скрин есть Ну при удалении скрипта с графика да метки будут удалены Вопрос- как при смене инструмента удалить все следы от предыдущего?
Теперь к стандартной фразе техподдержки "проблема изучается" Ну парни у вас вобще чувство собственного достоинства есть? ответственность за продукт вашей работы, за авторитет компании? Мне лично дважды обещал и здесь на форуме и в переписке по email.
Цитата
Вот от 12.09.2024 "Да, мы приносим Вам благодарность за развернутое описание проблемы. Однако, что является для Вас неожиданным в нашем ответе? Проблемы, которые Вы обозначили признаны таковыми и будут исправлены в следующих версиях рабочего места QUIK"
"Больше года прошло а ""воз и ныне там..."
С наступающим годом и успехов всем
Картинка метка png
Пользователь
Сообщений: Регистрация: 30.11.2021
20.08.2025 08:33:32
Господа разработчики, в течении нескольких лет обращаюсь с проблемой работы терминала (рабочего места Quik) с метками и через данный форум и электронными письмами (Некорректная работа терминала метками (QU-227199) Проблема вами признана но как минимум с сентября 24 года не решена Детально проблема описана , причем с приложением тестовых скриптов
В тексте обращения приведены аналогичных обращений других пользователей от 2017, 2018, 2021 годов
Кратко: 1. При добавлении скрипта индикатора на график на первом проходе OnCalculate() скрипт не видит параметры настроек, в частности идентификатора графика, что приводит к ошибке 2. Скрипт и сам терминал теряет доступ к меткам после смены инструмента графика Метки от предыдущего инструмента остаются на графике и скрипт создает новые уже для текущего инструмента
Прошу прокомментировать ситуацию и назвать хотя бы ориентировочные сроки ее решения
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
Пользователь
Сообщений: Регистрация: 30.11.2021
28.03.2025 09:52:06
Цитата
Karina Dmitrieva написал: Пока можем предложить настраивать фильтры по нужным Вам условиям в таблице заявок
Благодарю, я в курсе наличия фильтров :)
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
Если на текущей активной вкладке таблицы "Карман" не будет, то команда "Копировать в карман" будет недоступной.
Да, команда активизируется если все на одной вкладке и табл сделок и сам карман Но а зачем в таком случае оставили команды по сохранению в файл заявок если их потом не подгрузить? Вообще было гораздо функциональнее. Таблиц заявок как правило несколько и на разных вкладках, например по рынкам (акции, облигации, срочный) и все это дублировать в отдельной вкладке где и карманы неудобно и лишняя нагрузка Сделайте тогда хотя бы возможность выделять группу заявок в таблице заявок с теми чтобы можно было эту группу выгрузить в Карман-1, др группу в Карман-2 по аналогии возможности выделения группы через CTRL в самом кармане
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
Пользователь
Сообщений: Регистрация: 30.11.2021
26.03.2025 14:47:37
Цитата
Karina Dmitrieva написал: В таблицы заявок, стоп-заявок, внебиржевых адресных/безадресных заявок добавлена новая команда "Копировать в карман".
Команда "Копировать в карман" не активна, текущая версия 12.2.1.2 Из табл Заявок есть и активны Сохранить в файл заявки из таблицы и Сохранить в файл все заявки Их табл Стоп-заявок активны Сохранить в файл стоп-заявки из табл и Сохранить в файл все стов-заявки как и было в предыдущей 11 Из Кармана в 12.2 - только Загрузить транзакции из tri-файла
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
Пользователь
Сообщений: Регистрация: 30.11.2021
26.03.2025 10:28:44
Цитата
Karina Dmitrieva написал: действительно, в версии Рабочего места QUIK 11.4.0 исчезла возможность переносить заявки из таблицы заявок в карман транзакций
, Прошу Вас пояснить ситуацию по данной ошибке в версии 12.2 где указано что проблема устранена но во всплывающем меню из Кармана нет опции "Загрузить заявки из файла"
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
Пользователь
Сообщений: Регистрация: 30.11.2021
25.03.2025 08:31:31
Цитата
paluke написал: Ну так решили же проблему с ошибками
Логично Из кармана есть только "Загрузить транзакции из tri-файла" а из таблицы заявок только "Сохранить в файл заявки из таблицы"
А по моему обращению и детально описанной проблеме по работе с уже 4 месяца ни ответа ни привета :) Кстати там же есть ссылки на эту проблему еще десятка участников форума#s3gt_translate_tooltip_mini { display: none !important; }
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
Сообщаем, что нами выпущена новая версия Рабочего места QUIK - 12.2.0 в которой данная проблема устранена.
В анонсе версии 12.2 действительно указано что "Ошибка при попытке загрузить в Карман транзакций заявки из файла" исправлена Но в последней версии 12.2.1.2 во всплывающем меню из Кармана нет опций "Загрузить заявки из файла", "Загрузить стоп-заявки из файла", "Загрузить адресные/безадресные заявки из файла" которые есть в версии 11.3.4 Есть только "Загрузить транзакции из tri-файла"
Как в qlua разделить на группы облигации по типу купона
Пользователь
Сообщений: Регистрация: 30.11.2021
06.12.2024 10:40:05
Цитата
Станислав написал: Увы, другой информации биржа не транслирует
Да, ММВБ параметры облигаций транслирует крайне неудовлетворительно Нашел казалось бы косвенный признак флоатеров - нулевые данные по доходности или по дюрации Но увы и тут не все однозначно, по некоторым ммвб дает доходность Например РСЭКСМБ2Р4 указана доходность а по РСЭКСМБ2Р5 нет (ноль)
Вобщем сделал отбор по нулевой доходности а те корпоративные флоатеры где биржа дает доходность пока записал в массив Таких в портфеле всего 5, не сложно и добавить если будет новая сделка Ну а с ММВБ что то спрашивать бессмысленно
Как в qlua разделить на группы облигации по типу купона
Пользователь
Сообщений: Регистрация: 30.11.2021
04.12.2024 12:26:32
Цитата
Станислав написал: По названию ОФЗ можно сразу понять, к какому классу бумаг относится конкретный выпуск
Спасибо, а этот код "COMPLEXPRODUCT" как можно получить в коде скрипта ОФЗ понятно а что по корпоративным, муниципальным да и остальным "бирж.обл." как дает "SECTYPE"
Как в qlua разделить на группы облигации по типу купона
Пользователь
Сообщений: Регистрация: 30.11.2021
03.12.2024 15:21:55
Набросал черновик скрипта для построения пользовательской таблицы облигации в портфеле в соответствии с классификацией По типу эмитента: Федеральные, Субфедеральные и муниципальные, корпоративные сделал разбивку с помощью параметров функции getParamEx() "SECTYPESTATIC" и "SECTYPE" по их значениям "Облигации" >> "РФ" "суб.РФ" "мун.обл." " корп.обл." Отдельной группой сформировал массив Замещающих облигаций по признаку валюты номинала А вот дальше хотелось бы разбить по типу купона - Постоянный, Фиксированный, Плавающий и Переменный, как минимум на две группы
Буду благодарен за идеи по отличительным признакам?
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
Andrey Golik написал: , добрый день. Получили от Вас информацию на почте. По итогам разбора продублируем наш ответ в данной теме форума.
Добрый день Есть какие то ориентиры по времени устранения описанной проблемы
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
Пользователь
Сообщений: Регистрация: 30.11.2021
03.12.2024 11:41:08
Karina Dmitrieva, спасибо Неудобно конечно При большом количестве заявок по их количестве сделать перетаскивание а выделение всех не предусмотрено Придется подождать и работать на предыдущей версии 11.3
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
Пользователь
Сообщений: Регистрация: 30.11.2021
29.11.2024 23:22:42
Karina Dmitrieva, Спасибо за информацию, но во-первых, найдите где доводить ее до пользователей своевременно и с пояснениями поскольку мне сейчас непонятно с какой целью это сделано и как теперь работать с новыми форматами Ну и главное - я писал о том что теперь Карман транзакций не загружает сохраненные заявки в файле из меню на Таблице заявок
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
Пользователь
Сообщений: Регистрация: 30.11.2021
29.11.2024 09:47:13
Здесь вообще есть админ ?
На проблему работы терминала в отношении торговых функций должна быть незамедлительная реакция разработчика, а тут неделя заканчивается и хоть трава не расти !
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
Пользователь
Сообщений: Регистрация: 30.11.2021
25.11.2024 22:58:32
Сохраняем файл - ПКМ на таблице заявок > Сохранить в файл заявки из таблицы В окне Карман транзакций - ПКМ Загрузить заявки из файла Результат - Ошибка Не указан номер заявки
Смотрим формат сохраненного файла и видим следующее: ,Выставлена (время),Инструмент,Операция,Цена,Кол-во,Остаток,Объем,Состояние, 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() не вызывается
Похоже не все понимают о чем речь... или не посмотрели ссылки на предыдущие обращения с аналогичной тематикой :) Причина моего обращения в техподдержку и этой темы в следующем: 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() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
20.08.2024 15:42:09
При наложении индикатора или при периинициализации при смене инструмента графика терминал даже ни видит переменных объявленных в Settings
А увидит он идентификатор только на втором проходе Как тут метки не потерять :)
Тяжелая у вас работа парни (разработчики) За 20 лет как познакомился с этим монстром ничего не изменилось Кракозябы накапливаются и наслаиваются одни на другие
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() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
14.08.2024 13:11:32
Такой вопрос - где и как происходит прерывание расчетов в текущем цикле OnCulculate() при смене инструмента на графике? Цикл доходит до конца или прерывается случайным образом
Цель выполнить кусок кода по удалению текущей метки которая после смены инструмента уже "потеряется"
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
14.08.2024 08:18:03
Проблема с метками существует с древних времен - и и и с моим участием По второй ссылке - ответ типовой "К сожалению, проблему, о которой ведётся речь, воспроизвести не удалось"н Ну киньте что приводит пользователь по данной ссылке, переключите несколько раз между двумя инструментами график и увидите см файл - screen_1 Ну что еще нужно чтобы "воспроизвести" ошибку в работе терминала По обсуждения с моим участием еще в 2021 еще на версии терминала 9.3 ответ того же "Описанная в данном обращении проблема была устранена в версии 9.4.0 терминала QUIK." а проблема как была так и переходит уже несколько лет
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
13.08.2024 23:18:17
Цитата
funduk написал: На каждом I == 1 проверяете инструмент, если он не совпадает с предыдущим, удаляете метку. Т.е. удаляете после смены инструмента, не до.
Спасибо за ответ Но после смены инструмента ситуацию я только что описал - метку в коде уже не найти и соответственно не удалить Кроме того часто бывают ситуации когда пкм на графике не дает уже "Удалить - Все метки в диаграмме" Да и как после смены инструмента получить тикер предыдущего? После инита все переменные уже "обнулены" в том числе и id метка. Ну разве что в файле хранить, и постоянно сравнивать запись в файле с текущим
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
13.08.2024 23:07:09
Никто из сообщества не откликнулся. Обращаюсь к разработчикам. Господа. Это не пожелание а вопрос некорректной работы терминала Терминал теряет метки. Создав метку на одном инструменте и переключившись на другой инструмент метка полностью теряется. Ее уже невозможно удалить ни стандартными функциями: - 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() не вызывается
Пользователь
Сообщений: Регистрация: 30.11.2021
13.08.2024 10:19:10
Добрый день Вопрос еще в 2017г и был принят поддержкой :)
При смене инструмента графика OnDestroy() по прежнему не вызывается Вопрос - скажем скрипт-индикатор создает метку на графике Меняете инструмент и метка остается, причем скрипт полностью ее теряет Как ее удалить в коде скрипта перед тем как инструмент будет заменен или сохранить доступ к ней? Глобальные переменные обнулились, идентификатор метки тоже утерян
Для детального анализа возникновения описываемого Вами эффекта просим приложить данный скрипт. Можете здесь или направьте его нам на почту: со ссылкой на данную ветку форума.
Это абсурд ! Напишите сами (индикатор) скрипт в одну строчку SetLabelParams(chart_tag, Label_ID, label_params); и установите метку на график предварительно заполнив параметр label_params['HINT'] = "TEST"
Опишите, пожалуйста, более подробно Вашу ситуацию. Что Вы подразумеваете под "программной установкой"? Можете приложить скриншот для наглядности ?
Программно - значит скриптом При наведении курсора мыши на текст метки появляется "всплывающая подсказка" ( HINT ) На скрине версии 9.4 В версии 9.5 эта подсказка не появляется
Известные баги 9 версии
Пользователь
Сообщений: Регистрация: 30.11.2021
06.06.2022 11:56:53
Версия 9.5.0.42 не работает всплывающая подсказка при программной установки текстовой метки (hint)
Версия 9.2.3.15, Метки
Пользователь
Сообщений: Регистрация: 30.11.2021
02.02.2022 15:29:46
Цитата
Anzhelika Belokur написал: Добрый день. Описанная в данном обращении проблема будет устранена в одной из очередных версий ПО. Приносим извинения за причиненные неудобства.
Пожалуйста, сориентируйте по срокам. Пауза затянулась....
Версия 9.2.3.15, Метки
Пользователь
Сообщений: Регистрация: 30.11.2021
29.12.2021 09:37:20
Цитата
Anzhelika Belokur написал: Добрый день. Описанная в данном обращении проблема будет устранена в одной из очередных версий ПО. Приносим извинения за причиненные неудобства.
Спасибо за отклик Ждем С наступающим НГ
Версия 9.2.3.15, Метки
Пользователь
Сообщений: Регистрация: 30.11.2021
24.12.2021 12:00:54
Цитата
Daniil Pozdnyakov написал: Правильно понимаем, что данные скрипты Вы получили от сторонних разработчиков ?
Спасибо что откликнулись. Правильно. Я привел ссылку на разработчика
Цитата
Daniil Pozdnyakov написал: Просьба подробно описать, с какими проблемами Вы столкнулись ?
Я начал работать начиная с 8 версии и имея опыт в программировании не смог найти где и почему терминал теряет метки и и соответственно не контролирует их. Установленная скриптом (индикатором) метка после каких либо действий с графиком (смена таймфрейма, инструмента) теряется. Скрипт ее уже не может найти. Даже программное удаление DelAllLabels(chart_tag) не работает поскольку На графике пкм-Удалить-Все метки диаграммы подтверждает что метки на графике остались но найти их программно скрипт не может. Кроме того при установке индикатора на график с указанием в settings идентификатора графика проверка при инициализации в коде сразу выдает ошибку по идентификатору. Это говорит о том что терминал при инициализации индикатора не идентифицирует метку самого графика и метку указанную в настройках индикатора Возможно что проблема именно в этом. В 9 версии проблема с загрузкой метки из файла labels_params[IMAGE_PATH] = getWorkingFolder()..\\Data\\transation_Icons\\*.bmp выдает ошибку загрузки файла и соответственно метки на графике нет Причем ошибка только процессе инициализации индикатора, далее ошибки нет но и меток на графике нет Хотя "Удалить Все метки..." подтверждает их наличие на графике
Еще раз хочу подчеркнуть что код скрипта и индикатора который я предложил протестировать для меня никакой роли не играет У меня свои наработанные годами скрипты которые я просто адаптировал под Квик Попытка разобраться в переписке в отдельных фрагментах кода полагаю приведет только к путанице Поэтому я и предложил протестировать приложенный мною скрипт и индикатор с тем чтобы разработчики сами могли проверить работу терминала с метками Задача ведь не в проверке кодов а именно в проверке работы терминала
Потому что теперь функция называется table.unpack. Аж с луа 5.2.
Вообще дело то не в unpak(). Терминал теряет метки, т.е. если скрипт установил метку, то через некоторое время, после смены инструмента, тайили таймфрейма он уже не может найти свою же метку и ее невозможно даже удалить программно не говоря уже о том чтобы управлять ей, а 9.3.3. просто не выводит метку на график Я же приложил скрипт и индикатор Оба написаны очень грамотно Все кому интересно могут попробовать и суть не в функционале и его востребованности а именно как академический пример работы с метками и не только