Erreurs, bugs, questions - page 1982

 

Pouvez-vous me dire comment lire les informations d'un e-mail ou d'un sms en utilisant MQL4/5 ? Par exemple, je reçois un signal d'information par courriel, mon conseiller expert le lit et ouvre/ferme une position.

 
fxsaber:

L'opérateur de copie par défaut est déclenché.

J'ai même trouvé ceci dans les docs (notez la 3ème ligne en partant du bas) :

https://www.mql5.com/ru/docs/basis/types/casting

class CBar { };
class CFoo : public CBar { };
 
void OnStart()
  {
   CBar bar;    
//--- динамическое приведение типа указателя *bar к указателю *foo разрешено 
   CFoo *foo = dynamic_cast<CFoo *>(&bar); // критической ошибки выполнения не возникнет   
   Print(foo);                             // foo=NULL      
//--- попытка явного приведения ссылки объекта типа Bar к объекту типа Foo запрещено
   foo=(CFoo *)&bar;                       // возникнет критическая ошибка выполнения
   Print(foo);                             // эта строка не будет выполнена
  }

Je me souviens qu'il était possible de copier (dans le style memcpy) vers des structures simples, mais ma structure n'est pas simple.

 
pavlick_:

Je me souviens qu'il était possible de copier (style memcpy débile) dans des structures simples, mais je n'ai pas de structure simple.

MQL5 a changé.

 
fxsaber:

MQL5 a changé.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

La nouvelle version de MetaTrader 5 build 1640 : Créez et testez vos propres instruments financiers

MetaQuotes Software Corp., 2017.07.19 18:03

Nouvelle version de la plateforme MetaTrader 5 build 1640 : créer et tester vos propres instruments financiers

  1. MQL5 : Ajout de la génération automatique de l'opérateur de copie implicite pour les objets de structures et de classes. Maintenant, le compilateur génère automatiquement des opérateurs de copie, ce qui permet d'écrire des enregistrements simples pour des objets comme b=a :
    class Foo
      {
       int               value;
    public:
       string Description(void){return IntegerToString(value);};
       //--- конструктор по умолчанию
                         Foo(void){value=-1;};
       //--- конструктор с параметрами   
                         Foo(int v){value=v;};
      };
    //+------------------------------------------------------------------+
    //|  структура, содержащая объекты типа Foo                          |
    //+------------------------------------------------------------------+
    struct MyStruct
      {
       string            s;
       Foo               foo;
      };
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //---
       MyStruct a,b;
       Foo an_foo(5);
       a.s="test";
       a.foo=an_foo;
       Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
       Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
    //---
       Print("b=a");
       b=a;
    //---
       Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
       Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
    /*
       Результат выполнения;
       a.s=test a.foo.Description()=5
       b.s= b.foo.Description()=-1
       b=a
       a.s=test a.foo.Description()=5
       b.s=test b.foo.Description()=5
    */
      }
    L'opérateur implicite copie les objets par cœur.

    • Si un membre est un objet, l'opérateur de copie correspondant à cet objet est appelé.
    • Si le membre est un tableau d'objets, avant d'appeler l'opérateur de copie approprié pour chaque élément, le tableau récepteur est agrandi ou réduit à la taille requise via ArrayResize.
    • Si un membre est un tableau de types simples, la fonction ArrayCopy est utilisée pour la copie.
    • Si un membre est un pointeur vers un objet, c'est le pointeur lui-même qui est copié, et non l'objet vers lequel il pointe.

    Si nécessaire, vous pouvez modifier le comportement et créer votre propre variante au lieu de l'opérateur de copie implicite en utilisant la surcharge.
 

fxsaber

Merci, cela a du sens maintenant. Je ne sais pas si je dois me réjouir ou non. La compatibilité avec l'ancien code est rompue. C'est une bonne idée de forcer d'une manière ou d'une autre l'activation de la nouvelle fonctionnalité avec des changements aussi importants (via des commutateurs de compilation ou #pragma).


Par exemple, mon auto_ptr :

template <typename T_>
class auto_ptr
{
public:
   T_ *p;
   void reset()  {if(this.p) delete this.p; this.p=NULL;}
   auto_ptr(void *ptr=NULL): p(ptr)  {}
   ~auto_ptr()  {this.reset();}
   void swap(auto_ptr<T_> &other)
   {
      T_ *buf = this.p;
      this.p = other.p;
      other.p = buf;
   }
};

Il s'avère maintenant que auto_ptr peut être copié dans le nouveau code (à moins que l'opérateur/constructeur de copie ne soit réduit au silence), ce qui conduira à de multiples suppressions d'un seul pointeur.

 
 

Fichier MQL5\Include\Controls\SpinEdit.mqh

int MaxValue(void) const { return(m_min_value) ; }

 

Comment télécharger MT4 ?
Je télécharge le fichier mt4setup.exe, je l'installe, mais la plateforme installe mt5. où puis-je obtenir mt4 ?

 
lukyF: Comment obtenir MT4 ?

Je télécharge le fichier mt4setup.exe, je l'installe, mais la plateforme installe mt5. où puis-je obtenir mt4 ?

Vous pouvez télécharger mt4 depuis votre courtier. Cette question revient chaque semaine...
 
STARIJ:
Avec votre courtier. Cette question revient chaque semaine...

Et ensuite, comment lier le BROKER mt4 à votre site ? Existe-t-il un article ou une vidéo ?

Raison: