Erreurs, bugs, questions - page 2828

 
Alexey Navoykov:
Ils sont dans des dossiers différents. Sont-ils liés par un lien symbolique ?

Dans MQL5 commun aux deux terminaux.

 
Comment changer la langue de l'interface MT5 ? Je pense qu'il y avait un bouton à bascule dans le menu, mais je ne le trouve plus.
 
Stanislav Korotky:
Comment changer la langue de l'interface MT5 ? Je pense qu'il y avait un bouton à bascule dans le menu, mais je ne le trouve plus.

 
J'ai rencontré une situation étrange l'autre jour - l'indicateur sur TF M1 ne détermine pas correctement le prix d'ouverture de la barre quotidienne. L'indicateur a été utilisé pendant environ 3 ans, et je n'ai eu aucun problème avec lui auparavant. Le changement était très significatif, environ 500 pips, en même temps, le matin, il montrait des données correctes, mais l'après-midi, il mentait déjà. Le changement de TF n'a pas aidé, seul le changement de TF du calcul de l'indicateur dans les paramètres de l'indicateur lui-même a aidé. Je ne sais pas comment le reproduire. De tels dysfonctionnements sont effrayants lorsqu'on effectue des transactions automatiques.
 

Lors de la création d'une ressource, le compilateur se plaint du fichier BMP mouse.bmp.

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

Cependant, si elle est utilisée directement, il n'y a pas d'erreur et l'image s'affiche correctement.

#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); 
  }
//+------------------------------------------------------------------+

est dans l'archive.

Rédacteur en chef


Le comportement dans MT4 est le même...

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

Lors de la création d'une ressource, le compilateur "jure" sur le fichier BMP mouse.bmp.

Cependant, si elle est utilisée directement, il n'y a pas d'erreur et l'image s'affiche correctement.

est dans l'archive.

Rédacteur en chef


Le comportement dans MT4 est le même...

Ne veut pas avaler des cartes à 8 bits.
Mieux vaut convertir en 24 ou 32 bits.

Le 32 bits est préférable lorsque vous avez besoin d'un canal alpha, vous pouvez alors obtenir une image sur un fond transparent au lieu d'un fond rectangulaire couvrant le graphique.

Dans ce cas, les bitmaps doivent être convertis en tableau via ResourceReadImage et COLOR_FORMAT_ARGB_NORMALIZE doit être utilisé.

Dossiers :
Images.zip  3 kb
 
Bonjour, le bug suivant [MT4 (1280) / ME (2375)] s'est produit après une mise à jour :

Expansion de la portée via un paramètre de modèle pour accéder aux fonctions avec une valeur de retour.

Exemple 1:Appel d' une fonction d'une classe de base.
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();
}  
Si nous accédons à une fonction void via l'expansion de la portée ou sans promouvoir la valeur de retour, c'est OK.

Exemple 2 : Appel d'une fonction statique d'une classe.
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>();
}  

Il fonctionnait avant la mise à jour. Dans MT5/MetaEditor 2560, cela fonctionne bien aussi.
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
  • www.mql5.com
Оператор возврата return - Операторы - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Le comportement n'est pas le même pour les fonctions de sélection.
void OnStart()
{
  PositionSelectByTicket(0); // OK
  OrderSelect(0);            // return value of 'OrderSelect' should be checked
}
 
Bonjour, après la mise à jour, le bogue suivant est apparu [MT4 (1280) / MetaEditor (2375)] :

Surcharge de la fonction du modèle dans le corps de la classe, le paramètre du modèle remplace la version correcte de la fonction.
(Pour les fonctions globales - autoriser la surcharge fonctionne bien)
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();
}
 
Nouvelles fonctions internes.
int OrderExist( const string symbol, ENUM_ORDER_TYPE type, ulong magic, ulong &tickets[] );

int PositionExist( const string symbol, ENUM_POSITION_TYPE type, ulong magic, ulong &tickets[] );