文章 "在 MetaTrader 5 中交易策略优化的可视化" - 页 3

 
Rashid Umarov:

@Dennis Kirichenko 你自己解压了EasyAndFastGUI.zip 压缩包 中的图片吗?我不得不把所有图片都压缩成 ZIP 文件,目前没有其他选择。

是的,我自己解压缩并复制了它们。你是否应该换一种方法?

我现在就是这样:



 
Dennis Kirichenko:

是的,我自己解压缩并复制的。我应该用不同的方法吗?

我现在就是这样:

全部正确。

在优化开始时,显示智能交易系统离开图表前创建的图形对象列表(Ctrl + B)。

 
Anatoli Kazharski:

这就对了。

在优化开始时离开图表之前,显示智能交易系统创建的图形对象列表(Ctrl + B)。

以防万一,这些对象是隐藏的。要在列表中显示它们,我按下了 "全部 "按钮。



 
Dennis Kirichenko:

...

也就是说,由于某些原因,您没有创建绘制按钮的对象:

标准库中 CCanvas 类的这个方法上:

//+------------------------------------------------------------------+
//| 使用位图资源附加新对象
//+------------------------------------------------------------------+
bool CCanvas::Attach(const long chart_id,const string objname,ENUM_COLOR_FORMAT clrfmt=COLOR_FORMAT_XRGB_NOALPHA)
  {
   if(OBJ_BITMAP_LABEL==ObjectGetInteger(chart_id,objname,OBJPROP_TYPE))
     {
      string rcname=ObjectGetString(chart_id,objname,OBJPROP_BMPFILE);
      rcname=StringSubstr(rcname,StringFind(rcname,"::"));
      if(ResourceReadImage(rcname,m_pixels,m_width,m_height))
        {
         m_objname=objname;
         m_rcname=rcname;
         m_format=clrfmt;
         m_objtype=OBJ_BITMAP_LABEL;
         //--- 成功
         return(true);
        }
     }
//--- 失败
   return(false);
  }

//---

目前还不清楚为什么有些用户会出现这个问题,而有些用户则不会。

您是否对该类做了任何更改?

 

按钮就在那里。

我从未编辑过 SB。

我没有对CCanvas::Attach() 类做任何修改。就是这样:

//+------------------------------------------------------------------+
//| 使用位图资源附加新对象
//+------------------------------------------------------------------+
bool CCanvas::Attach(const long chart_id,const string objname,ENUM_COLOR_FORMAT clrfmt=COLOR_FORMAT_XRGB_NOALPHA)
  {
   if(OBJ_BITMAP_LABEL==ObjectGetInteger(chart_id,objname,OBJPROP_TYPE))
     {
      string rcname=ObjectGetString(chart_id,objname,OBJPROP_BMPFILE);
      rcname=StringSubstr(rcname,StringFind(rcname,"::"));
      if(ResourceReadImage(rcname,m_pixels,m_width,m_height))
        {
         m_objname=objname;
         m_rcname=rcname;
         m_format=clrfmt;
         m_objtype=OBJ_BITMAP_LABEL;
         //--- 成功
         return(true);
        }
     }
//--- 失败
   return(false);
  }
 
Dennis Kirichenko:

有按钮。

我从不编辑 SB。

我没有对CCanvas::Attach() 类做任何修改。就是这样:

在这种情况下我帮不了你。

KR      0       12:44:52.304    MacdSampleWithFrames (EURUSD,H1)        CElement::CreateCanvas > Не удалось присоединить холст для рисования к графику: 4016

//---

错误4016 意味着

Err_resource_not_found

4016

在 EX5 中没有找到此名称的资源


//---

如果有人测试过文章中的示例,请告诉我结果。还有人遇到过这个问题吗?

 

会不会是因为我的根文件夹是"C:/Program Files / MetaTrader 5 / MQL5"????

相应地,资源位于 C:/Program Files\MetaTrader 5\MQL5\Images 中。

也许在访问图像时出了问题?虽然终端是以管理员身份启动的。

 
Dennis Kirichenko:

会不会是因为我的根文件夹看起来像"C:\Program Files\MetaTrader 5\MQL5"

相应地,资源位于 C:\Program Files/ MetaTrader 5/ MetaTrader 5/ MQL5/Images。

也许在访问图像时出现了问题?尽管终端是以管理员身份运行的。

我不知道。请尝试调查这一点。

表单代码中的资源是这样写的:

//+------------------------------------------------------------------+
//|| 在表单上创建按钮|
//+------------------------------------------------------------------+
#resource "\\Images\\EasyAndFastGUI\\Controls\\close_black.bmp"
#resource "\\Images\\EasyAndFastGUI\\Controls\\close_white.bmp"
#resource "\\Images\\EasyAndFastGUI\\Controls\\full_screen.bmp"
#resource "\\Images\\EasyAndFastGUI\\Controls\\minimize_to_window.bmp"
#resource "\\Images\\EasyAndFastGUI\\Controls\\up_thin_white.bmp"
#resource "\\Images\\EasyAndFastGUI\\Controls\\down_thin_white.bmp"
#resource "\\Images\\EasyAndFastGUI\\Controls\\help.bmp"
//---
bool CWindow::CreateButtons(void)
  {
//--- 如果程序类型为 "脚本",则退出
   if(CElementBase::ProgramType()==PROGRAM_SCRIPT)
      return(true);
//--- 计数、尺寸、数量
   int i=0,x_size=20;
   int buttons_total=4;
//--- 文件路径
   string icon_file="";
//--- 捕捉区域出现异常
   m_right_limit=0;
//---
   CButton *button_obj=NULL;
//---
   for(int b=0; b<buttons_total; b++)
     {
      //---
      if(b==0)
        {
         CElementBase::LastId(LastId()-1);
         m_button_close.MainPointer(this);
         if(!m_close_button)
            continue;
         //---
         button_obj=::GetPointer(m_button_close);
         icon_file ="Images\\EasyAndFastGUI\\Controls\\close_white.bmp";
        }
      else if(b==1)
        {
         m_button_fullscreen.MainPointer(this);
         //--- 如果 (1) 按钮未启用或 (2) 此对话窗口关闭,则退出。
         if(!m_fullscreen_button || m_window_type==W_DIALOG)
            continue;
         //---
         button_obj=::GetPointer(m_button_fullscreen);
         icon_file="Images\\EasyAndFastGUI\\Controls\\full_screen.bmp";
        }
      else if(b==2)
        {
         m_button_collapse.MainPointer(this);
         //--- 如果 (1) 按钮未启用或 (2) 此对话窗口关闭,则退出。
         if(!m_collapse_button || m_window_type==W_DIALOG)
            continue;
         //---
         button_obj=::GetPointer(m_button_collapse);
         if(m_is_minimized)
            icon_file="Images\\EasyAndFastGUI\\Controls\\down_thin_white.bmp";
         else
            icon_file="Images\\EasyAndFastGUI\\Controls\\up_thin_white.bmp";
        }
      else if(b==3)
        {
         m_button_tooltip.MainPointer(this);
         //--- 如果 (1) 按钮未启用或 (2) 此对话窗口关闭,则退出。
         if(!m_tooltips_button || m_window_type==W_DIALOG)
            continue;
         //---
         button_obj=::GetPointer(m_button_tooltip);
         icon_file ="Images\\EasyAndFastGUI\\Controls\\help.bmp";
        }
      //--- 属性
      button_obj.Index(i);
      button_obj.XSize(x_size);
      button_obj.YSize(x_size);
      button_obj.IconXGap(2);
      button_obj.IconYGap(2);
      button_obj.BackColor(m_caption_color);
      button_obj.BackColorHover((b<1)? C'242,27,45' : C'0,150,245');
      button_obj.BackColorPressed((b<1)? C'149,68,116' : C'0,160,255');
      button_obj.BackColorLocked(m_caption_color_locked);
      button_obj.BorderColor(m_caption_color);
      button_obj.BorderColorHover(m_caption_color);
      button_obj.BorderColorLocked(m_caption_color_locked);
      button_obj.BorderColorPressed(m_caption_color);
      button_obj.IconFile(icon_file);
      button_obj.IconFileLocked(icon_file);
      if(b==3)
        {
         button_obj.TwoState(true);
         button_obj.IconFilePressed(icon_file);
         button_obj.IconFilePressedLocked(icon_file);
        }
      button_obj.AnchorRightWindowSide(true);
      //-- 下一个按钮的缩进计算
      m_right_limit+=x_size-((i<3)? 0 : 1);
      i++;
      //--- 创建一个元素
      if(!button_obj.CreateButton("",m_right_limit,0))
         return(false);
      //--- 为数组添加一个元素
      CElement::AddToArray(button_obj);
     }
//---
   return(true);
  }
 

是的,阿纳托利,我发现了这个问题。

在您为文章提供的代码示例下载文件中,MacdSampleWithFrames.mq5 文件与MovingAverageWithFrames.mq5 文件的 代码 内容完全相同。

请更正。谢谢。

 

我在另一个终端上进行了测试,所有文件都存储在 %AppData\Roaming\MetaQuotes\Terminal\... 文件夹中。

同样的错误。某个地方出错了。