Discussion de l'article "Migration de MQL4 vers MQL5" - page 11

 

Bonjour à tous,

Est-ce que vous savez comment utiliser ObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value) dans MQL5 ? J'ai essayé de chercher OBJPROP_FIRSTLEVEL mais je ne l'ai pas trouvé dans MQL5.

mql4 :

void _SetFibLevel(string objname, int level, double value, string description)

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

{

ObjectSet(nomobjet,OBJPROP_FIRSTLEVEL+niveau,valeur) ;

ObjectSetFiboDescription(nomobjet,niveau,description) ;

}

-----------------------------------

 
vietlh216:

Savez-vous comment utiliser ObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value) dans MQL5 ? J'ai essayé de chercher OBJPROP_FIRSTLEVEL mais je ne l'ai pas trouvé dans MQL5.

mql4 :

void _SetFibLevel(string objname, int level, double value, string description)

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

{

ObjectSet(nomobjet,OBJPROP_FIRSTLEVEL+niveau,valeur) ;

ObjectSetFiboDescription(nomobjet,niveau,description) ;

}

-----------------------------------


Vous pouvez lire mon article de blog pour une solution prête à l'emploi.

 
Stanislav Korotky:

Vous pouvez lire mon article de blog pour une solution prête à l'emploi.


Très utile, merci :)

 
Stanislav Korotky:

Vous pouvez lire mon article de blog pour une solution prête à l'emploi.


Merci Stanislav Korotky pour votre solution, mais je ne suis pas très bon en MQL5 et je ne sais toujours pas comment convertir OBJPROP_FIRSTLEVEL pour l'utiliser dans MQL5. Je ne trouve pas la même propriété d'objet pour la convertir

dans mql4 :

OBJPROP_FIRSTLEVEL+n

210+n

int

Valeur entière pour définir/obtenir la valeur du niveau de l'objet Fibonacci avec l'index n. L'index n peut être compris entre 0 (nombre de niveaux -1), mais ne doit pas être supérieur à 31.

mais je ne l'ai pas trouvé dans MQL5

ex : MQL4 : ObjectSetFiboDescription(objname,level,description);->MQL5 : ObjectSetString(0,objname,OBJPROP_LEVELTEXT,level,description) ;

MQL4 : ObjectSet(nomobjet,OBJPROP_FIRSTLEVEL+niveau,valeur) ; -> MQL5 : ? ???

 
vietlh216:

Merci Stanislav Korotky pour votre solution, mais je ne suis pas très bon en MQL5 et je ne sais toujours pas comment convertir OBJPROP_FIRSTLEVEL pour l'utiliser en MQL5. Je ne trouve pas la même propriété d'objet pour la convertir

dans mql4 :

OBJPROP_FIRSTLEVEL+n

210+n

int

Valeur entière pour définir/obtenir la valeur du niveau de l'objet Fibonacci avec l'index n. L'index n peut être compris entre 0 (nombre de niveaux -1), mais ne doit pas être supérieur à 31.

mais je ne l'ai pas trouvé dans MQL5

ex : MQL4 : ObjectSetFiboDescription(objname,level,description);->MQL5 : ObjectSetString(0,objname,OBJPROP_LEVELTEXT,level,description) ;

MQL4 : ObjectSet(nomobjet,OBJPROP_FIRSTLEVEL+niveau,valeur) ; -> MQL5 : ? ???


ah, j'ai trouvé

ObjectSetDouble(0,objname,OBJPROP_LEVELVALUE,level,value) ;

^^

 
vietlh216:

ah, je l'ai trouvé

ObjectSetDouble(0,objname,OBJPROP_LEVELVALUE,level,value) ;

^^


Vous pouvez essayer l'addendum suivant à mon include :

class OBJPROP_DOUBLE_BROKER_EXTENDED: public OBJPROP_DOUBLE_BROKER
{
  public:
    OBJPROP_DOUBLE_BROKER_EXTENDED(const ENUM_OBJECT_PROPERTY_DOUBLE property, const int modifier): OBJPROP_DOUBLE_BROKER(property, modifier)
    {
    }
    
    OBJPROP_DOUBLE_BROKER_EXTENDED *operator+(const int add)
    {
      i = add;
      return &this;
    }
};

OBJPROP_DOUBLE_BROKER_EXTENDED OBJPROP_FIRSTLEVEL(OBJPROP_LEVELVALUE, 0);

Après cela, votre code MQL4 initial devrait fonctionner tel quel.

 
Stanislav Korotky:

Vous pouvez essayer l'addendum suivant à mon include :

Après cela, votre code MQL4 initial devrait fonctionner tel quel.


J'ai maintenant compris comment cela fonctionne, merci beaucoup Stanislav Korotky.

 

Je suggère de remplacer

string StringConcatenate(..);

par

string StringFormat("",..);

Les deux fonctions renvoient une chaîne de caractères, ce qui facilite le remplacement dans certaines conditions !

 
Stanislav Korotky:

Vous pouvez essayer l'addendum suivant à mon include :

Après cela, votre code MQL4 initial devrait fonctionner tel quel.

J'ai ajouté la classe OBJPROP_DOUBLE_BROKER_EXTENDED à votre include ind4to5 et il semble que cela ne fonctionne pas car dans la dernière version de Metaeditor, l'appel 1958 de ObjectSetDouble(chart_ID,name,OBJPROP_PRICE1,price1) renvoie l'erreur de compilation 'ObjectSetDouble' - aucune des surcharges ne peut être appliquée à l'appel de la fonction. Une idée ?

 

J'ai découvert moi-même que ObjectSetDouble n'était pas inclus dans ind4to5. J'ai ajouté le code suivant à mqh et cela a résolu le problème.

bool ObjectSetDouble(long chart_id, const string name, const OBJPROP_DOUBLE_BROKER &property, const double value)
{
  return ObjectSetDouble(chart_id, name, property.p, property.i, value);
}