文章 "制作仪表板以显示指标和EA中的数据" - 页 3

 
到目前为止,我发现 CHARTEVENT_CHART_CHANGE(9) 事件就是这样处理的。
 
Denis Kirichenko #:
到目前为止,我发现 CHARTEVENT_CHART_CHANGE(9) 事件就是这样处理的。

因此,当焦点从图表窗口移开时,它的大小就会发生变化,这是很自然的。

下面是处理过程:

//--- Если график изменён
   if(id==CHARTEVENT_CHART_CHANGE)
     {
      //--- Получаем номер подокна графика (он может измениться при удалении окна какого-либо индикатора)
      this.m_wnd=this.GetSubWindow();
      //--- Получаем новые размеры графика
      int w=(int)::ChartGetInteger(this.m_chart_id,CHART_WIDTH_IN_PIXELS,this.m_wnd);
      int h=(int)::ChartGetInteger(this.m_chart_id,CHART_HEIGHT_IN_PIXELS,this.m_wnd);
      //--- Определяем выход размеров панели за пределы окна графика
      this.m_higher_wnd=this.HigherWnd();
      this.m_wider_wnd=this.WiderWnd();
      //--- Если высота графика изменилась - корректируем расположение панели по вертикали
      if(this.m_chart_h!=h)
        {
         this.m_chart_h=h;
         int y=this.m_y;
         if(this.m_y+this.m_h>h-1)
            y=h-this.m_h-1;
         if(y<1)
            y=1;
         this.Move(this.m_x,y);
        }
      //--- Если ширина графика изменилась - корректируем расположение панели по горизонтали
      if(this.m_chart_w!=w)
        {
         this.m_chart_w=w;
         int x=this.m_x;
         if(this.m_x+this.m_w>w-1)
            x=w-this.m_w-1;
         if(x<1)
            x=1;
         this.Move(x,this.m_y);
        }
     }

应尽量控制图表的焦点,而不是在图表窗口失去焦点时对变化做出反应。或者其他类似的想法。遗憾的是,我还无法运行和测试它,以找出确切的原因和修复方法。

 

我浏览了论坛。这个问题已经被讨论过了。举个例子。我在代码 添加了这样一个检查

//--- Если график изменён
   if(id==CHARTEVENT_CHART_CHANGE)
     {
      //--- Получаем номер подокна графика (он может измениться при удалении окна какого-либо индикатора)
      this.m_wnd=this.GetSubWindow();
      l ong value;
      //--- сбросим значение ошибки
      ::ResetLastError();
      //--- получим значение свойства
      if(!::ChartGetInteger(m_chart_id, CHART_BRING_TO_TOP, m_wnd, value))
         {
         //--- выведем сообщение об ошибке в журнал "Эксперты"
         Print(__FUNCTION__ + ", Error Code = ", ::GetLastError());
         return;
         }
      // если это не показ графика поверх всех других - выходим
      if(value == 0)
         return;
      //--- Получаем новые размеры графика
      int w=(int)::ChartGetInteger(this.m_chart_id,CHART_WIDTH_IN_PIXELS,this.m_wnd);
      int h=(int)::ChartGetInteger(this.m_chart_id,CHART_HEIGHT_IN_PIXELS,this.m_wnd);
      //--- Определяем выход размеров панели за пределы окна графика
      this.m_higher_wnd=this.HigherWnd();
      this.m_wider_wnd=this.WiderWnd();
      //--- Если высота графика изменилась - корректируем расположение панели по вертикали
      if(this.m_chart_h!=h)
        {
         this.m_chart_h=h;
         int y=this.m_y;
         if(this.m_y+this.m_h>h-1)
            y=h-this.m_h-1;
         if(y<1)
            y=1;
         this.Move(this.m_x,y);
        }
      //--- Если ширина графика изменилась - корректируем расположение панели по горизонтали
      if(this.m_chart_w!=w)
        {
         this.m_chart_w=w;
         int x=this.m_x;
         if(this.m_x+this.m_w>w-1)
            x=w-this.m_w-1;
         if(x<1)
            x=1;
         this.Move(x,this.m_y);
        }
     }


错误似乎消失了。


Проблема с CHARTEVENT_CHART_CHANGE - Отлавливаю момент, когда изменяется размер окна графика. При переключении окон происходит событие CHARTEVENT на размер окна предыдущих установок
Проблема с CHARTEVENT_CHART_CHANGE - Отлавливаю момент, когда изменяется размер окна графика. При переключении окон происходит событие CHARTEVENT на размер окна предыдущих установок
  • 2021.12.25
  • satorifx
  • www.mql5.com
чтобы она была в зоне видимости не вылазила за пределы окна графика CHANGE так же срабатывает. 26 11 при переключении окон ресурс не удаляется при переключении окон происходит событие CHARTEVENT CHANGE
 

另一个问题。首先从图表中删除指标,然后将面板最小化,再重新在图表中启动后, 面板 窗口的展开没有得到处理。




明天我将尝试找出问题所在....。

 

Artem,后续文章中关于震荡指标的另一个例子,也是在最小化窗口后从图表中删除程序时出现故障。这不是一个指标,而是一个智能交易系统。这里:



 
Denis Kirichenko #:

另一个问题。首先从图表中移除指标,将面板最小化,然后再次在图表中启动后, 面板 窗口的展开没有得到处理。

明天我将尝试找出问题所在....。

在这里您可以检查去初始化的原因,以及从图表中移除智能交易系统(或指标)时面板状态未保存到全局终端变量的原因。这不是解决问题的办法,而是掩盖问题。当然,这并不好。但它可以快速解决问题。

或者你需要研究一下这种行为。遗憾的是,我现在时间有限。

 
Denis Kirichenko #:

我浏览了论坛。这个问题已经被讨论过了。举个例子。我在代码 添加了这样一个检查

错误似乎消失了。

谢谢。我稍后会把这个面板类添加到我的代码中。顺便说一下,在使用该面板的每一篇文章中,都有各种各样的改进。我想这是 使用该面板的最后一篇文章。但我不记得是否已经改进过了。
我在这里附上了面板类的代码。

Цветные буферы в мультисимвольных мультипериодных индикаторах
Цветные буферы в мультисимвольных мультипериодных индикаторах
  • www.mql5.com
В статье пересмотрим структуру индикаторного буфера в мультисимвольных мультипериодных индикаторах и организуем вывод на график цветных буферов этих индикаторов.
附加的文件:
Dashboard.mqh  219 kb
 

关于交易、自动交易系统和交易策略测试的论坛

讨论文章 "制作用于在指标和智能交易系统中显示数据的信息面板"

Denis Kirichenko, 2024.09.23 22:26

另一个问题。当指标从图表中移除,面板最小化,然后在图表....,它无法处理 面板 窗口的展开。


是的,在最新版本的 Dashboard.mqh 中没有这个错误。它可以正常工作。

 
Denis Kirichenko #:

是的,在最新版本的 Dashboard.mqh 中没有这样的错误。它可以运行。

很好。
 

新的围兜还有一个错误。如果在图表上启动面板,然后调整图表窗口大小,当窗口恢复时,面板会粘在底部。而且它不想离开那里((