Странное поведение CPanelDialog!

 
Всем доброго дня!
Пилю эксперта. Он тянет  панель на график созданную из инструментов стандартной библиотеки.
Заметил странное поведение панели после смены ТФ.
Некоторые контролы жили своей жизнью, и показывали "погоду" вместо тех данных которые я им кодил и ожидал наблюдать.
Ставлю панель на график без эксперта, никаких проблем, никакие манипуляции с графиком не приводят к проблеме.
Ставлю эксперта который вызывает эту панель, смена ТФ, и проблема опять проявляется.
Далее..
Создал нового пустого эксперта который просто вызывает стандартную панель из коробки, и тоже самое, при смене ТФ наблюдаю ту же картину.
В коде панели прописал единственую строчку в функцию 
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//---
   Print((string)TimeCurrent());
//--- return value of prev_calculated for next call
   return(rates_total);
  }

Ставлю эксперта на ТФ Н1
ожидаю в журнале такие надписи каждый тик:

2023.03.23 10:46:47.416 SimplePanel (GBPUSD,H1) 2023.03.23 09:46:47
2023.03.23 10:46:47.416 SimplePanel (GBPUSD,H1) 2023.03.23 09:46:48
Все норм, так в журнале и пишется.

Меняю ТФ на М30, ожидаю:
2023.03.23 10:46:47.416 SimplePanel (GBPUSD,М30) 2023.03.23 09:46:57
2023.03.23 10:46:47.416 SimplePanel (GBPUSD,М30) 2023.03.23 09:46:58

Но нет, в журнале следующее:
2023.03.23 10:46:47.416 SimplePanel (GBPUSD,М30) 2023.03.23 09:46:57
2023.03.23 10:46:47.416 SimplePanel (GBPUSD,H1) 2023.03.23 09:46:57
2023.03.23 10:46:47.416 SimplePanel (GBPUSD,М30) 2023.03.23 09:46:58
2023.03.23 10:46:47.416 SimplePanel (GBPUSD,H1) 2023.03.23 09:46:58


Как я понял по какой-то причине не деинициализируется что-то, либо не так переключается
как побороть незнаю, какой-то глюк странный



Файлы:
 
botDev:
Всем доброго дня!


Как я понял по какой-то причине не деинициализируется что-то, либо не так переключается
как побороть незнаю, какой-то глюк странный

Исходник не смотрел, но предположительное решение - добавить в имя каждого объекта текущий таймфрейм и символ - тогда переинициализация графика из-за смены таймфрейма или символа не будет "перемешивать" старые удаляемые объекты и новые добавляемые.

 
Stanislav Korotky #:

Исходник не смотрел, но предположительное решение - добавить в имя каждого объекта текущий таймфрейм и символ - тогда переинициализация графика из-за смены таймфрейма или символа не будет "перемешивать" старые удаляемые объекты и новые добавляемые.

там кода нет особо.
Панель стандартная из коробки метатрейдер, а эксперт с одной функцией притянуть эту панель на график.

 

Здравствуйте, botDev.

Судя по наличию в коде функции onCalculate(...), вы пишете не эксперта, а эксперта и индикатор, который будет вызываться из эксперта. Это точно именно то, что вам надо? Не будет ли правильнее панель создавать все-таки в эксперте, а не в индикаторе?
Попробуйте написать примерно так в файле SimpleExpert.mq5:

#include "PanelDialog.mqh"

CPanelDialog ExtDialog;
int OnInit(void) {
//--- create application dialog
   if(!ExtDialog.Create(0, "Simple Panel", 0, 50, 50, 390, 200))
      return(INIT_FAILED);
//--- run application
   if(!ExtDialog.Run())
      return(INIT_FAILED);
//--- succeed
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason) {
   ExtDialog.Destroy(reason);
}

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam) {
   ExtDialog.ChartEvent(id, lparam, dparam, sparam);
}

void OnTick() {
   Print((string)TimeCurrent());
}

Проверить не могу, так как нет файла PanelDialog.mqh.

Или если панель вам нужна именно через индикатор, то добавьте удаление индикатора в OnDeinit() у эксперта через вызов ChartIndicatorDelete(...)

 
Yuriy Bykov #:

Здравствуйте, botDev.

Судя по наличию в коде функции onCalculate(...), вы пишете не эксперта, а эксперта и индикатор, который будет вызываться из эксперта. Это точно именно то, что вам надо? Не будет ли правильнее панель создавать все-таки в эксперте, а не в индикаторе?
Попробуйте написать примерно так в файле SimpleExpert.mq5:

Проверить не могу, так как нет файла PanelDialog.mqh.

Или если панель вам нужна именно через индикатор, то добавьте удаление индикатора в OnDeinit() у эксперта через вызов ChartIndicatorDelete(...)

PanelDialog.mqh в папке с индикаторами лежит SimplePanel
эксперт вызывает индикатор с той целью, чтобы панель была закреплена под графиком а не размещена была на графике и тем самым закрывала бы его часть