Discussão do artigo "Visualizando a otimização de uma estratégia de negociação na MetaTrader 5" - página 3

 
Rashid Umarov:

@Dennis Kirichenko Você descompactou as imagens do arquivo EasyAndFastGUI.zip sozinho? Tive que anexar todas as imagens em um arquivo ZIP, pois não há outra opção no momento.

Sim, eu mesmo descompactei e copiei as imagens. Você deveria ter feito isso de forma diferente?

Estou assim agora:



 
Dennis Kirichenko:

Sim, eu mesmo descompactei e copiei. Deveria ter feito isso de forma diferente?

Agora estou assim:

Tudo correto.

Mostre a lista de objetos gráficos criados pelo Expert Advisor antes que ele saia do gráfico no início da otimização (Ctrl + B).

 
Anatoli Kazharski:

É isso mesmo.

Mostre a lista de objetos gráficos criados pelo Expert Advisor antes de deixar o gráfico no início da otimização (Ctrl + B).

Por precaução, os objetos estão ocultos. Para mostrá-los na lista, pressiono o botão "All" (Todos).



 
Dennis Kirichenko:

...

Ou seja, por algum motivo, você não tem um objeto criado para desenhar o botão:

biblioteca padrão:

//+------------------------------------------------------------------+
//| Anexar novo objeto com recurso de bitmap
//+------------------------------------------------------------------+
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;
         //--- sucesso
         return(true);
        }
     }
//--- falhou
   return(false);
  }

//---

E não está claro por que o problema aparece para alguns usuários e não para outros.

Você fez alguma alteração nessa classe?

 

Os botões estão lá.

Eu nunca edito o SB.

Não fiz nenhuma alteração na classe CCanvas::Attach(). Aqui está ela:

//+------------------------------------------------------------------+
//| Anexar novo objeto com recurso de bitmap
//+------------------------------------------------------------------+
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;
         //--- sucesso
         return(true);
        }
     }
//--- falhou
   return(false);
  }
 
Dennis Kirichenko:

Há botões.

Eu nunca edito o SB.

Não fiz nenhuma alteração na classe CCanvas::Attach(). Aqui está:

Não posso ajudá-lo nesse caso.

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

//---

O erro 4016 significa:

ERR_RESOURCE_NOT_FOUND

4016

O recurso com esse nome não foi encontrado no EX5


//---

Se alguém tiver testado os exemplos do artigo, por favor, conte-me os resultados. Alguém mais está enfrentando esse problema?

 

Pode ser porque minha pasta raiz é "C:/Program Files/MetaTrader 5/MQL5"????

Da mesma forma, os recursos estão localizados em C:\Program Files\MetaTrader 5\MQL5\Images.

Talvez haja um problema com o acesso às imagens? Embora o terminal seja iniciado como administrador.

 
Dennis Kirichenko:

Pode ser porque minha pasta raiz se parece com "C:\Program Files\MetaTrader 5\MQL5"??? ?

Assim, os recursos estão localizados em C:\Program Files\MetaTrader 5\MetaTrader 5\MQL5/Images.

Talvez haja um problema com o acesso às imagens? Embora o terminal seja executado como administrador.

Eu não sei. Tente investigar esse ponto.

Os recursos no código do formulário estão escritos assim:

//+------------------------------------------------------------------+
//|| Cria botões no formulário|
//+------------------------------------------------------------------+
#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)
  {
//--- Se o tipo de programa for "script", sair
   if(CElementBase::ProgramType()==PROGRAM_SCRIPT)
      return(true);
//--- Contagem, tamanho, quantidade
   int i=0,x_size=20;
   int buttons_total=4;
//--- Caminho do arquivo
   string icon_file="";
//--- Exceção na área de captura
   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);
         //--- Sair se (1) o botão não estiver ativado ou (2) essa janela de diálogo
         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);
         //--- Sair se (1) o botão não estiver ativado ou (2) essa janela de diálogo
         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);
         //--- Sair se (1) o botão não estiver ativado ou (2) essa janela de diálogo
         if(!m_tooltips_button || m_window_type==W_DIALOG)
            continue;
         //---
         button_obj=::GetPointer(m_button_tooltip);
         icon_file ="Images\\EasyAndFastGUI\\Controls\\help.bmp";
        }
      //--- Propriedades
      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);
      //--- Cálculo de indentação para o próximo botão
      m_right_limit+=x_size-((i<3)? 0 : 1);
      i++;
      //--- Criar um elemento
      if(!button_obj.CreateButton("",m_right_limit,0))
         return(false);
      //--- Adicionar um elemento à matriz
      CElement::AddToArray(button_obj);
     }
//---
   return(true);
  }
 

Sim, Anatoly, descobri isso.

Em seus exemplos de código para o artigo, nos arquivos baixados, o arquivo MacdSampleWithFrames.mq5 é idêntico ao arquivo MovingAverageWithFrames.mq5 em termos de conteúdo de código .

Por favor, corrija-o. Muito obrigado.

 

Testei-o em outro terminal em que todos os arquivos estão armazenados na pasta %AppData\Roaming\MetaQuotes\Terminal\....

O erro é o mesmo. Há algo errado em algum lugar.