Discussão do artigo "Migrando do MQL4 para o MQL5" - página 11

 

Olá a todos,

Vocês sabem como usar ObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value) em MQL5? Tentei pesquisar OBJPROP_FIRSTLEVEL, mas não o encontrei em MQL5

mql4:

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

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

{

ObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value);

ObjectSetFiboDescription(objname,level,description);

}

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

 
vietlh216:

Você sabe como usar ObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value) em MQL5? Tentei pesquisar OBJPROP_FIRSTLEVEL, mas não o encontrei em MQL5.

mql4:

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

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

{

ObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value);

ObjectSetFiboDescription(objname,level,description);

}

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


Você pode ler minha postagem no blog para obter uma solução pronta.

 
Stanislav Korotky:

Você pode ler minha postagem no blog para obter uma solução pronta.


Muito útil, obrigado :)

 
Stanislav Korotky:

Você pode ler minha postagem no blog para obter uma solução pronta.


Obrigado, Stanislav Korotky, por sua solução, mas não sou muito bom em MQL5 e ainda não sei como converter OBJPROP_FIRSTLEVEL para usar em MQL5. Não encontro a mesma propriedade de objeto para convertê-la

em mql4:

OBJPROP_FIRSTLEVEL+n

210+n

int

Valor inteiro para definir/obter o valor do nível do objeto Fibonacci com índice n. O índice n pode ser de 0 (número de níveis -1), mas não maior que 31

mas não o encontrei na MQL5

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

MQL4: ObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value); -> MQL5: ???

 
vietlh216:

Obrigado, Stanislav Korotky, por sua solução, mas não sou muito bom em MQL5 e ainda não sei como converter OBJPROP_FIRSTLEVEL para usar em MQL5. Não encontro a mesma propriedade de objeto para convertê-la

em mql4:

OBJPROP_FIRSTLEVEL+n

210+n

int

Valor inteiro para definir/obter o valor do nível do objeto Fibonacci com índice n. O índice n pode ser de 0 (número de níveis -1), mas não maior que 31

mas não o encontrei na MQL5

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

MQL4: ObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value); -> MQL5: ???


ah, eu encontrei

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

^^

 
vietlh216:

ah, encontrei

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

^^


Você pode tentar o seguinte adendo ao meu 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);

Depois disso, seu código MQL4 inicial deverá funcionar como está.

 
Stanislav Korotky:

Você pode tentar o seguinte adendo ao meu include:

Depois disso, seu código MQL4 inicial deverá funcionar como está.


Agora entendi como funciona, muito obrigado Stanislav Korotky.

 

Eu sugeriria a substituição

string StringConcatenate(..);

por

string StringFormat("",..);

Ambas as funções retornam uma string, o que facilita a substituição em determinadas condições!

 
Stanislav Korotky:

Você pode tentar o seguinte adendo ao meu include:

Depois disso, seu código MQL4 inicial deverá funcionar como está.

Adicionei a classe OBJPROP_DOUBLE_BROKER_EXTENDED ao seu include ind4to5 e parece que não está funcionando, pois na versão mais recente do Metaeditor 1958 a chamada de ObjectSetDouble(chart_ID,name,OBJPROP_PRICE1,price1) retorna o erro de compilação 'ObjectSetDouble' - nenhuma das sobrecargas pode ser aplicada à chamada de função. Alguma ideia?

 

Eu mesmo descobri que o ObjectSetDouble não estava incluído no ind4to5. Adicionei o seguinte código ao mqh e o problema foi resolvido.

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);
}