記事"MetaTrader 5における取引戦略最適化の可視化"についてのディスカッション - ページ 3

 
Rashid Umarov:

Dennis Kirichenko EasyAndFastGUI.zip アーカイブから自分で解凍しましたか?すべての写真をZIPファイルとして添付しなければなりませんでした。

はい、自分で解凍してコピーしました。もっと違う方法がありましたか?

今はこんな感じです:



 
Dennis Kirichenko:

はい、自分で解凍してコピーしました。こうすればよかった?

今はこんな感じです:

すべて正しい。

Expert Advisorが作成したグラフィカル・オブジェクトのリストを、最適化の開始時にチャートを離れる前に表示します(Ctrl + B)。

 
Anatoli Kazharski:

その通りだ。

最適化開始時にチャートを離れる前に、Expert Advisorが作成したグラフィカル・オブジェクトのリストを表示します(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 FilesMetaTrader 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)
  {
//--- プログラムのタイプが "script "の場合は、終了する。
   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 ファイルと コード 内容が同じです。

修正をお願いします。ありがとうございました。

 

すべてのファイルが%AppDataRoaming\MetaQuotes\Terminal...フォルダーに保存されている別のターミナルでテストしました。

同じエラー。どこかが間違っている。