Чудеса терминала МТ4.

 

Столкнулся с двумя, возможно, недокументированными явлениями МТ4. На мой взгляд, они между собой связаны.

1) В терминале на графике запускаю один индикатор. Вывожу панель графического интерфейса. Зеленые значки в верхнем левом углу:

Удаляю индикатор с графика. При этом удаляются все, созданные индикатором файлы, которые могут влиять на повторный запуск индикатора. Удаляются все глобальные переменные. Никакие индикаторы, советники, скрипты  не загружены ни на один из открытых графиков.

При повторном запуске индикатора автоматически выводится панель графического интерфейса.

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

ЧТО ВЫЗЫВАЕТ СОХРАНЕНИЕ ПАРАМЕТРОВ ЗАПУСКА? ЧТО-ТО ОСТАЕТСЯ В ПАМЯТИ?

2) Возможно, это как-то связано с выше описанным явлением.

Я взял некоторые маленькие программы из документации и вставил их в программу. Речь пойдет про ButtonCreate(.....)

Перед выведением какой-либо кнопки в программе проверяется наличие этой кнопки на графике. Если она есть, то удаляется и выводится по-новой.

Все ранее работало прекрасно. Кнопка удалялась без проблем. В последние несколько дней столкнулся со следующим явлением. Кнопка в виде восклицательного знака, на картинке выше в левом верхнем углу, перестала иногда удаляться. Точнее так. Кнопка удаляется, а при запуске  ButtonCreate(.....) выводится ошибка 4200 - объект не создан, так как он уже существует.

Перелопатил все. Нашел место, в котором возникает ошибка. Делаю удаление с помощью    if (ObjectFind(name_znak)) ObjectDelete(name_znak); . Функция  ObjectFind объект не находит, а  ButtonCreate(.....) выводит ошибку 4200.

Модифицировал  функцию ButtonCreate(.....), чтобы выводилось больше информации о месте в программе, где происходит ошибка.

Выводится такое:

2021.05.10 15:51:00.366 ZUP GBPUSD,H1: 26955  ButtonCreate: не удалось создать кнопку! Код ошибки = 4200   В строке:  19595  ExtSet = 151


Такие чудеса. 

Что-то в памяти терминала остается. Знать бы, что. И как это учитывать в разработке?

Версия МТ4 - 1330 от 19 марта 2021.

====================

Добавлю следующее. На компьютере запущены 5 терминалов от пяти брокеров. На других терминалах, где разработка не ведется, данная программа запущена. Может, это как-то связано с возникшими чудесами?

Но на других терминалах запущена старая версия программы, в которой нет участков кода, в которых возникают  чудеса.
 
можно посмотреть список объектов того что на графике чтоб посмотреть что остаётся - Графики -> Объекты -> Список объектов (все)
 
Примерно пару лет назад была целая ветка о том, что при переинициализации индикатора происходит загрузка новой версии индикатора. При этом инициализация новой версии не обязательно случится после того, как будет произведена выгрузка предыдущей версии. Порядок попросту не регламентирован. Насколько я помню, никаких изменений в этом плане не произошло. Приходится делать различные костыли для ожидания выгрузки предыдущей версии индикатора.
 
Удаляйте объекты в той же программе, где их создали. В Deinit всё подчищайте. 
 
На 20 тысяч строк такую хрень написать и упереться в артефакты. Сочувствую. 
 
Aleksey Semenov:
можно посмотреть список объектов того что на графике чтоб посмотреть что остаётся - Графики -> Объекты -> Список объектов (все)

Пожалуйста.

 
Алексей Тарабанов:
На 20 тысяч строк такую хрень написать и упереться в артефакты. Сочувствую. 

Там более 50 000 строк. 

Я, кажется, немного начинаю понимать, где собака порылась. Удаление объекта, возможно, связано с вот этим:

      // включение сообщений об удалении объекта
      ChartSetInteger(0,CHART_EVENT_OBJECT_DELETE,0,true); 
Потихоньку продумываю, как поаккуратнее эту функцию применять.
 
Eugeni Neumoin:

Там более 50 000 строк. 

NEN, я в курсе, что у Вас всё очень большое. 

 
Eugeni Neumoin:

Там более 50 000 строк. 

Я, кажется, немного начинаю понимать, где собака порылась. Удаление объекта, возможно, связано с вот этим:

Потихоньку продумываю, как поаккуратнее эту функцию применять.

Просто, всё удалите внутри программы. Хуже не будет. 

 
Алексей Тарабанов:

NEN, я в курсе, что у Вас всё очень большое. 

Этой весной дочитал книгу Далай Ламы https://royallib.com/book/gyatso_tenzin/vselennaya_v_odnom_atome_nauka_i_duhovnost_na_slugenii_miru.html

Там есть очень интересные идеи.

Гьяцо Тензин - Вселенная в одном атоме: Наука и духовность на служении миру, скачать бесплатно книгу в формате fb2, doc, rtf, html, txt
  • royallib.com
Гьяцо Тензин - Вселенная в одном атоме: Наука и духовность на служении миру, скачать бесплатно книгу в формате fb2, doc, rtf, html, txt :: Электронная библиотека royallib.com
 
Алексей Тарабанов:

Просто, всё удалите внутри программы. Хуже не будет. 

Попробую все-таки реализовать задуманное. 

Причина обращения: