Errori, bug, domande - pagina 2828

 
fxsaber:

Al momento, ci sono un mucchio di file identici che differiscono solo per l'ultima cifra dell'estensione.

Sono in cartelle diverse. Sono collegati in symlink o qualcosa del genere?
 
Alexey Navoykov:
Sono in cartelle diverse. Sono collegati da un symlink?

In MQL5 comune a entrambi i terminali.

 
Come posso cambiare la lingua dell'interfaccia di MT5? Credo che una volta ci fosse un toggle nel menu, ora non riesco a trovarlo.
 
Stanislav Korotky:
Come posso cambiare la lingua dell'interfaccia di MT5? Credo che una volta ci fosse un toggle nel menu, ora non riesco a trovarlo.

 
L'altro giorno ho incontrato una strana situazione: l'indicatore su TF M1 non determina correttamente il prezzo di apertura della barra giornaliera. L'indicatore è stato usato per circa 3 anni e non ha avuto problemi prima. Lo spostamento è stato molto significativo, circa 500 pips, allo stesso tempo, al mattino mostrava dati corretti, ma nel pomeriggio era già bugiardo. Cambiare TF non ha aiutato, solo cambiare TF del calcolo dell'indicatore nelle impostazioni dell'indicatore stesso ha aiutato. Non so come riprodurlo. Tali glitch sono spaventosi quando si fa trading automatico.
 

Quando si cerca di creare una risorsa, il compilatore si "lamenta" del file BMP mouse.bmp

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

Anche se, se usato direttamente, non c'è nessun errore e l'immagine viene visualizzata correttamente.

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

è in archivio.

Editore


Il comportamento in MT4 è lo stesso...

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

Quando si cerca di creare una risorsa, il compilatore si lamenta del file BMP mouse.bmp

Anche se, se usato direttamente, non c'è nessun errore e l'immagine viene visualizzata correttamente.

è in archivio.

Editore


Il comportamento in MT4 è lo stesso...

Non vuole ingoiare 8 bitmap.
Meglio convertire a 24 o 32 bit.

32-bit è preferibile quando hai bisogno del canale alfa, allora puoi ottenere un'immagine su uno sfondo trasparente invece di uno sfondo rettangolare che copre il grafico.

In questo caso, le bitmap devono essere convertite in un array tramite ResourceReadImage e deve essere usato COLOR_FORMAT_ARGB_NORMALIZE.

File:
Images.zip  3 kb
 
Buon pomeriggio, il seguente bug [MT4 (1280) / ME (2375)] si è verificato dopo un aggiornamento :

Espansione dell'ambito tramite parametro template per accedere a funzioni con un valore di ritorno.

Esempio 1:chiamare una funzione di una classe 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();
}  
Se accediamo a una funzione void tramite l'espansione dell'ambito o senza promuovere il valore di ritorno, va bene.

Esempio 2: chiamare una funzione statica di una 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>();
}  

Funzionava prima dell'aggiornamento. Anche in MT5/MetaEditor 2560 funziona bene.
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
  • www.mql5.com
Оператор возврата return - Операторы - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Non lo stesso comportamento per le funzioni Select.
void OnStart()
{
  PositionSelectByTicket(0); // OK
  OrderSelect(0);            // return value of 'OrderSelect' should be checked
}
 
Buon pomeriggio, dopo l'aggiornamento si è verificato il seguente bug [MT4 (1280) / MetaEditor (2375)]:

sovraccarico della funzione Template nel corpo della classe, il parametro del template sovrascrive la versione corretta della funzione.
(Per le funzioni globali - consentire l'overloading funziona bene.)
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();
}