エラー、バグ、質問 - ページ 2828

 
fxsaber:

今のところ、拡張子の下1桁だけが異なる同一ファイルが大量に存在します。

別のフォルダーに入っているシンボリックリンクか何かですか?
 
Alexey Navoykov:
別のフォルダーに入っています。シンボリックリンクでリンクされていますか?

MQL5では両端末共通。

 
MT5のインターフェースの言語を変更する方法を教えてください。以前はメニューにトグルがあったように思うのですが、今は見当たりません。
 
Stanislav Korotky:
MT5のインターフェースの言語を変更する方法を教えてください。以前はメニューにトグルがあったように思うのですが、今は見当たりません。

 
先日、奇妙な状況に遭遇しました。TF M1のインジケータが、日足バーの始値を正しく判断していないのです。インジケーターは3年ほど使用していますが、それ以前は何の問題もありませんでした。500pipsほどの非常に大きな変化で、同時に、午前中は正しいデータを示していたのに、午後にはもう嘘のデータになっていました。TFを変えてもダメで、インジケーターの設定 自体でインジケーターの計算のTFを変えるだけで効果がありました。再現の仕方がわからない。自動売買の場合、こうした不具合は怖いですね。
 

リソースを作成 しようとすると、コンパイラはBMPファイルmouse.bmpについて「文句」を言います。

unsupported image format 'C:\Users\pc\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Files\Images\MyBMP\mouse.bmp'   

ただし、直接使用した場合は、エラーにならず、正常に表示されます。

#property strict
string label_name="currency_label";        // имя объекта OBJ_BITMAP_LABEL 
#resource "\\Files\\Images\\MyBMP\\Style-Pause-icon.bmp";    // путь к файлу каталог_данных_терминала\MQL4\Files\Images\MyBMP\... 
//#resource "\\Files\\Images\\MyBMP\\mouse.bmp";    
string press      ="::Files\\Images\\MyBMP\\Style-Pause-icon.bmp";    // RESOURCE
string unpress    ="\\Files\\Images\\MyBMP\\mouse.bmp";  // путь к файлу каталог_данных_терминала\MQL4\... 
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- создадим кнопку OBJ_BITMAP_LABEL, если ее еще нет 
   if(ObjectFind(0,label_name)<0) 
     { 
      //--- попробуем создать объект OBJ_BITMAP_LABEL 
      bool created=ObjectCreate(0,label_name,OBJ_BITMAP_LABEL,0,0,0); 
      if(created) 
        { 
         //--- привяжем кнопку к правому верхнему углу графика 
         ObjectSetInteger(0,label_name,OBJPROP_CORNER,CORNER_RIGHT_UPPER); 
         //--- теперь настроим свойства объекта 
         ObjectSetInteger(0,label_name,OBJPROP_XDISTANCE,100); 
         ObjectSetInteger(0,label_name,OBJPROP_YDISTANCE,50); 
         //--- сбросим код последней ошибки в 0 
         ResetLastError(); 
         //--- загрузим картинку для состояния кнопки "Нажата" 
         bool set=ObjectSetString(0,label_name,OBJPROP_BMPFILE,0,press); 
         //--- проверим результат 
         if(!set) 
           { 
            PrintFormat("Не удалось загрузить картинку из файла %s. Код ошибки %d",press,GetLastError()); 
           } 
         ResetLastError(); 
         //--- загрузим картинку для состояния кнопки "Отжата" 
         set=ObjectSetString(0,label_name,OBJPROP_BMPFILE,1,unpress); 
          
         if(!set) 
           { 
            PrintFormat("Не удалось загрузить картинку из файла %s. Код ошибки %d",unpress,GetLastError()); 
           } 
         //--- отдадим графику команду на обновление, чтобы кнопка появилась сразу же, не дожидаясь тика 
         ChartRedraw(0); 
        } 
      else 
        { 
         //--- объект создать не удалось, сообщим об этом 
         PrintFormat("Не удалось создать объект OBJ_BITMAP_LABEL. Код ошибки %d",GetLastError()); 
        } 
     } 
//--- 
   return(INIT_SUCCEEDED); 
  } 
//+------------------------------------------------------------------+ 
//| Expert deinitialization function                                 | 
//+------------------------------------------------------------------+ 
void OnDeinit(const int reason) 
  { 
//--- удалим объект с графика  
   ObjectDelete(0,label_name); 
  }
//+------------------------------------------------------------------+

ファイルはアーカイブにあります。

編集部


MT4での動作は同じですが・・・。

Документация по MQL5: Общие функции / ResourceCreate
Документация по MQL5: Общие функции / ResourceCreate
  • www.mql5.com
[in]  Относительный путь к файлу, содержащему данные для ресурса. Если путь начинается с обратной косой черты "\" (пишется "\\"), то файл ищется относительно папки Если второй вариант функции вызывается для...
ファイル:
Images.zip  3 kb
 
Mikhail Dovbakh:

リソースを作成 しようとすると、コンパイラがBMPファイルmouse.bmpに "悪態 "をつく

ただし、直接使用した場合は、エラーにならず、正常に表示されます。

ファイルはアーカイブにあります。

編集部


MT4での動作は同じですが・・・。


24ビットか32ビットに変換したほうがいい。

アルファチャンネルが必要な場合は、32ビットが望ましいです。

その場合、ResourceReadImageでビットマップを配列に変換し、COLOR_FORMAT_ARGB_NORMALIZEを使用しなければならない。

ファイル:
Images.zip  3 kb
 
午後、アップデート後に以下の不具合 [MT4 (1280) / ME (2375)] が発生しました。

戻り値を持つ関数にアクセスするためにテンプレートパラメータを介してスコープを拡張しています。

例1 ベースクラスの関数を呼び出す
class _f
{
public:
   
   bool f(){ return false; }
   
   void g(){ Print("g");   }   
};

template<typename F>
class run_f : public F
{
public:

   bool f(){ return F::f(); } //<--- '::' - unexpected token

   void g(){ F::g(); }        //<--- OK
};


//+------------------------------------------------------------------+

void OnStart() 
{ 
   run_f<_f> r;
   
   r.f();
   r.g();
}  
void関数にスコープ展開でアクセスしたり、戻り値を昇格させずにアクセスしても、問題ない。

例 2: クラスの静的関数を呼び出す
class _f
{
public:
   
   static bool static_f(){ return true; } 
   static void static_g(){}    
};

template<typename F>
bool call_static()
{
   return F::static_f(); //<--- '::' - unexpected token and function not defined
   
   F::static_f();       //<--- OK (не используем возварщаемое значение)
   
   //F::static_g();     //<--- OK (void функция)
   
   return true;  
}

//+------------------------------------------------------------------+

void OnStart() 
{ 
   call_static<_f>();
}  

アップデート前は動作していました。MT5/MetaEditor 2560でも問題なく 動作しています。
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
  • www.mql5.com
Оператор возврата return - Операторы - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
セレクト機能については、同じ動作ではありません。
void OnStart()
{
  PositionSelectByTicket(0); // OK
  OrderSelect(0);            // return value of 'OrderSelect' should be checked
}
 
こんにちは、アップデート後に以下のバグが発生しました [MT4 (1280) / MetaEditor (2375)]:

クラス本体でのテンプレート関数のオーバーロード、テンプレートパラメータは正しい関数バージョンをオーバーライドします。
(グローバル関数については、オーバーロードを許可しても問題ありません。)
template<typename T>
class template_class{};

class X
{  
public:

   template<typename T>
   void f(const template_class<T>&) 
   {
      Print("T");
      
      T * obj = NULL;
   }
   
   void f(const template_class<string>&) 
   {
      Print("string");
   }
   
   void call()
   {
      template_class<string> ts;
      
      f(ts);    //Вызывает версию Т, а должен string.
   }
};

void OnStart()
{
   X x;
   
   x.call();
}