Erreurs, bugs, questions - page 2653

 
Les macros font leur travail, elles ont réussi à réduire le canevas à la forme (version complète dans le fichier joint) :
//+------------------------------------------------------------------+
//|  MQL realization                                                 |
//+------------------------------------------------------------------+
#ifdef __MQL5__
   template <typename _InputIter>
   CREATE_MISSED_ITERATOR_FUNCTION_FW_P2(int, distance, _InputIter&, _InputIter&);
   
   template <typename _InputIter>
   CREATE_MISSED_ITERATOR_FUNCTION_RA_P2(int, distance, _InputIter&, _InputIter&);

   template <typename _InputIter>
   CREATE_MAIN_ITERATOR_FUNCTION_P2(int, distance, _InputIter&, _InputIter&, _InputIter);
   
   void OnStart(){
      MyIterator it1(1);
      MyIterator it2(5);
      printf("result:%d", distance(it1, it2));            
   }
#endif 

Les développeurs sont priés de nous dire s'il est prévu de corrigerce bug ou si c'est architecturalement impossible.
Dossiers :
 
Bug MT5(build 2323),
À l'intérieur d'une fonction modèle, un pointeur passé dans une conversion de type explicite se comporte comme une classe, ce qui provoque une erreur de compilation :
#define  PRINT(x) ; Print(#x, ":", string(x))

template<typename T>
class ClassWrapper{
public:
   T data;
};

class ClassA{};
class ClassB : public ClassA{};


template<typename T, typename TT>
void func(const T &_wrapper, const TT &value){
   T wrapper = _wrapper;   
   
   PRINT(typename(wrapper.data));         // Ok: ClassA*
   PRINT(typename(value));                // Ok: ClassA*
   PRINT(typename(TT));                   // Ok: ClassA*
   
   //wrapper.data = (TT)(value);          // Compiler Error: 'value' - object required  
   //wrapper.data = (TT)(wrapper.data);   // Compiler Error: 'data' - object required   
   
   ClassB b;
   PRINT(typename((TT)(b)));              // Result: C lassA. During explicit type conversion, TT is "ClassA" instead of "ClassA*"
};


void OnStart(){
   ClassWrapper<ClassA*> a_ptr_wrapper;
   
   ClassA a;
   const ClassA* a_ptr = &a;
   func(a_ptr_wrapper, a_ptr);
};
 

Idiot, ne peut pas résoudre un problème simple. Je dois comprendre que la négociation est interdite pendant les paramètres de démarrage de l'EA suivants.


Cette vérification ne fonctionne pas.

int OnInit()
{
  Alert(AccountInfoInteger(ACCOUNT_TRADE_EXPERT) &&
        AccountInfoInteger(ACCOUNT_TRADE_ALLOWED) &&
        TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)); // true
        
  return(INIT_FAILED);
}


OrderCheck est un hareng rouge. Veuillez me conseiller.

 
bool CheckTradingPermission()
  {
//--- Для режима реального времени
   if(IsRealtime())
     {
      //--- Проверка соединения с сервером
      if(!TerminalInfoInteger(TERMINAL_CONNECTED))
         return(false);
      //--- Разрешение на торговлю на уровне данной запущенной программы
      if(!MQLInfoInteger(MQL_TRADE_ALLOWED))
         return(false);
      //--- Разрешение на торговлю на уровне терминала
      if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
         return(false);
      //--- Разрешение на торговлю для текущего счета
      if(!AccountInfoInteger(ACCOUNT_TRADE_ALLOWED))
         return(false);
      //--- Разрешение на автоматическую торговлю для текущего счета
      if(!AccountInfoInteger(ACCOUNT_TRADE_EXPERT))
         return(false);
     }
//---
   return(true);
  }
CodeANATOLI KAZHARSKI

Anatoli Kazharski
Anatoli Kazharski
  • www.mql5.com
Опубликовал статью ZigZag всему голова (Часть II): Примеры получения, обработки и отображения данных В первой части был описан модифицированный индикатор ZigZag и класс для получения данных индикаторов такого типа. Теперь мы покажем как создать индикаторы на основе этих инструментов, а также напишем эксперта для тестов, который будет заключать...
 
Fast235:
Code ANATOLI KAZHARSKI

Merci, je n'avais pas remarqué le MQL_TRADE_ALLOWED.

 
fxsaber:

Idiot, ne peut pas résoudre un problème simple. Je dois comprendre que la négociation est interdite pendant les paramètres de démarrage de l'EA suivants.


Cette vérification ne fonctionne pas.


OrderCheck est un hareng rouge. Veuillez me conseiller.

Je ne suis pas sûr depuis mon mobile, mais voici :MQL_TRADE_ALLOWED
 
Bug MT5(build 2323), le même objet template B<int> peut être créé après un objet de classe B<void*>, mais si cela est fait avant, une erreur de compilation se produit.
La raison en est probablement le travail du cache du générateur de classes de modèles.

template<typename T>
class B{
   T data;
};

void OnStart (){ 
   //B<int> b_int_0;    // Compiler Error  'void' - unexpected token, probably type is missing?
   B<void*> b;          // OK
   B<int> b_int_1;      // OK
}
 

Bug MT5 (build 2340) utilise deux fois le même code : premier passage - compilation réussie, deuxième passage - erreur de compilation.
Apparemment,
lesproblèmes sont liés au cache du générateur de fonction modèle.
L'erreur disparaît si pour la fonction modèle "
void run(const T &ff)" le transfert par référence est remplacé par le transfert par valeur"void run(const T ff)".

void func(){
}

template<typename T>
void run(const T &ff){
   ff();
}

void OnStart (){ 
   {
      typedef void(*f_ptr)();
      f_ptr ff = func;
      run(ff);             // OK
   }
   {
      typedef void(*f_ptr)();
      f_ptr ff = func;
      run(ff);            // Compile Error: 'ff' - parameter conversion not allowed     
   }
}
 

Bug MT5 (build 2340) Erreur de compilation lors de la tentative d'accès à la classe interne pour un paramètre de modèle d'une fonction de modèle.

class B{
public:
   class C{};
};


// Bypass Compile Error
template<typename T>
class GetClassType{
public:
   class type : public T{};
};


template<typename T>
void func(const T &b){
   T::C* c_ptr = new T::C;          // Compile Error: 'T' - struct undefined    
   
   // Bypass Compile Error
   GetClassType<T>::type::C* c_ptr_bps = new GetClassType<T>::type::C();
};

void OnStart (){ 
   B b;
   func(b);
}
 

Quelqu'un peut-il nous éclairer sur la question suivante :

J'ai une dll écrite en C# mais compilée :

- Pour le projet MT5 usual C# - Net Framework dll - 64 bit

- MT4 - Net Framework dll - 32 bits, mais enveloppé dans des appels C gérés.

Les sources dll sont 100% identiques, sauf le wrapper MT4 bien sûr,

Système d'exploitation Win10-64

Eh bien, la question est de savoir pourquoi les appels de MT4 fonctionnent exactement 4 fois plus vite, les chiffres sont d'environ 100 000 appels de dll sur MT4 pendant 7,5 secondes, MT5 pendant 30 secondes